添加docker-compose 一键部署及环境变量传入, 添加镜像仓库地址
This commit is contained in:
parent
5965c91276
commit
c8912282fd
|
@ -5,8 +5,28 @@
|
||||||
直接使用和构建二进制文件使用需要golang环境,并且网络可以安装依赖。
|
直接使用和构建二进制文件使用需要golang环境,并且网络可以安装依赖。
|
||||||
docker构建镜像使用,需要安装docker,不依赖golang以及网络。
|
docker构建镜像使用,需要安装docker,不依赖golang以及网络。
|
||||||
|
|
||||||
|
## 修改默认值
|
||||||
|
|
||||||
|
修改的sendkey,企业微信公司ID 等默认值为你的企业中的相关信息,如不设置运行时和打包后都可通过环境变量传入。
|
||||||
|
|
||||||
|
```golang
|
||||||
|
var SENDKEY string = GetEnvDefault("SENDKEY", "set_a_sendkey")
|
||||||
|
var WECOM_CID string = GetEnvDefault("WECOM_CID", "企业微信公司ID")
|
||||||
|
var WECOM_SECRET string = GetEnvDefault("WECOM_SECRET", "企业微信应用Secret")
|
||||||
|
var WECOM_AID string = GetEnvDefault("WECOM_AID", "企业微信应用ID")
|
||||||
|
var WECOM_TOUID string = GetEnvDefault("WECOM_TOUID", "@all")
|
||||||
|
var REDIS_ADDR string = GetEnvDefault("REDIS_ADDR", "localhost:6379")
|
||||||
|
var REDIS_STAT string = GetEnvDefault("REDIS_STAT", "OFF")
|
||||||
|
var REDIS_PASSWORD string = GetEnvDefault("REDIS_PASSWORD", "")
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## 直接使用
|
## 直接使用
|
||||||
|
|
||||||
|
如果没有添加默认值,需要先引入环境变量,以SENDKEY为例:
|
||||||
|
|
||||||
|
`export SENDKEY=set_a_sendkey`
|
||||||
|
依次引入环境变量后,执行
|
||||||
`go run .`
|
`go run .`
|
||||||
|
|
||||||
## build命令构建二进制文件使用
|
## build命令构建二进制文件使用
|
||||||
|
@ -18,18 +38,59 @@ docker构建镜像使用,需要安装docker,不依赖golang以及网络。
|
||||||
|
|
||||||
## 构建docker镜像使用(推荐,不依赖golang,不依赖网络)
|
## 构建docker镜像使用(推荐,不依赖golang,不依赖网络)
|
||||||
|
|
||||||
|
新增打包好的镜像可以直接使用
|
||||||
|
|
||||||
|
`docker pull aozakiaoko/go-wecomchan`
|
||||||
|
|
||||||
|
Docker Hub 地址为:[https://hub.docker.com/r/aozakiaoko/go-wecomchan](https://hub.docker.com/r/aozakiaoko/go-wecomchan)
|
||||||
|
|
||||||
1. 构建镜像
|
1. 构建镜像
|
||||||
`docker build -t go-wecomchan .`
|
`docker build -t go-wecomchan .`
|
||||||
|
|
||||||
2. 启动镜像
|
2. 修改默认值后启动镜像
|
||||||
`docker run -dit -p 8080:8080 go-wecomchan`
|
`docker run -dit -p 8080:8080 go-wecomchan`
|
||||||
|
|
||||||
|
3. 通过环境变量启动镜像并启用redis
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -dit -e SENDKEY=set_a_sendkey \
|
||||||
|
-e WECOM_CID=企业微信公司ID \
|
||||||
|
-e WECOM_SECRET=企业微信应用Secret \
|
||||||
|
-e WECOM_AID=企业微信应用ID \
|
||||||
|
-e WECOM_TOUID="@all" \
|
||||||
|
-e REDIS_STAT=ON \
|
||||||
|
-e REDIS_ADDR="localhost:6379" \
|
||||||
|
-e REDIS_PASSWORD="" \
|
||||||
|
-p 8080:8080 aozakiaoko/go-wecomchan
|
||||||
|
```
|
||||||
|
|
||||||
|
如不使用redis不要传入最后三个关于redis的环境变量
|
||||||
|
|
||||||
|
4. 环境变量说明
|
||||||
|
|
||||||
|
|名称|描述|
|
||||||
|
|---|---|
|
||||||
|
|SENDKEY|发送时用来验证的key|
|
||||||
|
|WECOM_CID|企业微信公司ID|
|
||||||
|
|WECOM_SECRET|企业微信应用Secret|
|
||||||
|
|WECOM_AID|企业微信应用ID|
|
||||||
|
|WECOM_TOUID|需要发送给的人,详见[企业微信官方文档](https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF)|
|
||||||
|
|REDIS_ADDR|redis服务器地址,如不启用redis缓存可不设置|
|
||||||
|
|REDIS_STAT|是否启用redis换缓存token|
|
||||||
|
|REDIS_PASSWORD|redis的连接密码|
|
||||||
|
|
||||||
|
## 使用docker-compose 部署
|
||||||
|
|
||||||
|
修改docker-compose.yml 文件内上述的环境变量,之后执行
|
||||||
|
|
||||||
|
`docker-compose up -d`
|
||||||
|
|
||||||
## 调用方式
|
## 调用方式
|
||||||
|
|
||||||
访问 `http://localhost:8080/wecomchan?sendkey=你配置的sendkey&&msg=需要发送的消息&&msg_type=text`
|
访问 `http://localhost:8080/wecomchan?sendkey=你配置的sendkey&&msg=需要发送的消息&&msg_type=text`
|
||||||
|
|
||||||
## 后续预计添加
|
## 后续预计添加
|
||||||
|
|
||||||
~~- Dockerfile 打包镜像(不依赖网络环境)~~
|
* [x] Dockerfile 打包镜像(不依赖网络环境)
|
||||||
- docker-compose redis + go-wecomchan 一键部署
|
* [x] 通过环境变量传递企业微信id,secret等,镜像一次构建多次使用
|
||||||
- 通过环境变量传递企业微信id,secret等,镜像一次构建多次使用
|
* [x] docker-compose redis + go-wecomchan 一键部署
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
go-wecomchan:
|
||||||
|
image: docker.io/aozakiaoko/go-wecomchan:latest
|
||||||
|
environment:
|
||||||
|
- SENDKEY=发送时用来验证的key
|
||||||
|
- WECOM_CID=企业微信公司ID
|
||||||
|
- WECOM_SECRET=企业微信应用Secret
|
||||||
|
- WECOM_AID=企业微信应用ID
|
||||||
|
- WECOM_TOUID=@all
|
||||||
|
- REDIS_STAT=ON
|
||||||
|
- REDIS_ADDR=redis:6379
|
||||||
|
- REDIS_PASSWORD=redis的连接密码
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
||||||
|
networks:
|
||||||
|
- go-wecomchan
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: docker.io/bitnami/redis:6.2
|
||||||
|
environment:
|
||||||
|
- REDIS_PASSWORD=redis的连接密码
|
||||||
|
- REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
|
||||||
|
networks:
|
||||||
|
- go-wecomchan
|
||||||
|
volumes:
|
||||||
|
- 'redis_data:/bitnami/redis/data'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis_data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
go-wecomchan:
|
|
@ -5,25 +5,33 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SENDKEY string = "set_a_sendkey"
|
var SENDKEY string = GetEnvDefault("SENDKEY", "set_a_sendkey")
|
||||||
var WECOM_CID string = "企业微信公司ID"
|
var WECOM_CID string = GetEnvDefault("WECOM_CID", "企业微信公司ID")
|
||||||
var WECOM_SECRET string = "企业微信应用Secret"
|
var WECOM_SECRET string = GetEnvDefault("WECOM_SECRET", "企业微信应用Secret")
|
||||||
var WECOM_AID string = "企业微信应用ID"
|
var WECOM_AID string = GetEnvDefault("WECOM_AID", "企业微信应用ID")
|
||||||
var WECOM_TOUID string = "@all"
|
var WECOM_TOUID string = GetEnvDefault("WECOM_TOUID", "@all")
|
||||||
|
var REDIS_ADDR string = GetEnvDefault("REDIS_ADDR", "localhost:6379")
|
||||||
var REDIS_ADDR string = "localhost:6379"
|
var REDIS_STAT string = GetEnvDefault("REDIS_STAT", "OFF")
|
||||||
|
var REDIS_PASSWORD string = GetEnvDefault("REDIS_PASSWORD", "")
|
||||||
var ctx = context.Background()
|
var ctx = context.Background()
|
||||||
var redis_stat string = "OFF"
|
|
||||||
|
func GetEnvDefault(key, defVal string) string {
|
||||||
|
val, ex := os.LookupEnv(key)
|
||||||
|
if !ex {
|
||||||
|
return defVal
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
func praser_json(json_str string) map[string]interface{} {
|
func praser_json(json_str string) map[string]interface{} {
|
||||||
var wecom_response map[string]interface{}
|
var wecom_response map[string]interface{}
|
||||||
|
@ -53,7 +61,7 @@ func get_token(corpid, app_secret string) string {
|
||||||
func redis_client() *redis.Client {
|
func redis_client() *redis.Client {
|
||||||
rdb := redis.NewClient(&redis.Options{
|
rdb := redis.NewClient(&redis.Options{
|
||||||
Addr: REDIS_ADDR,
|
Addr: REDIS_ADDR,
|
||||||
Password: "", // no password set
|
Password: REDIS_PASSWORD, // no password set
|
||||||
DB: 0, // use default DB
|
DB: 0, // use default DB
|
||||||
})
|
})
|
||||||
return rdb
|
return rdb
|
||||||
|
@ -105,7 +113,7 @@ func IsZero(v interface{}) (bool, error) {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var access_token string
|
var access_token string
|
||||||
if redis_stat == "ON" {
|
if REDIS_STAT == "ON" {
|
||||||
log.Println("从redis获取token")
|
log.Println("从redis获取token")
|
||||||
rdb := redis_client()
|
rdb := redis_client()
|
||||||
vals, err := rdb.Get(ctx, "access_token").Result()
|
vals, err := rdb.Get(ctx, "access_token").Result()
|
||||||
|
@ -135,7 +143,7 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("%v", err)
|
fmt.Printf("%v", err)
|
||||||
} else {
|
} else {
|
||||||
if ok && redis_stat == "ON" {
|
if ok && REDIS_STAT == "ON" {
|
||||||
log.Println("pre to set redis key")
|
log.Println("pre to set redis key")
|
||||||
rdb := redis_client()
|
rdb := redis_client()
|
||||||
set, err := rdb.SetNX(ctx, "access_token", access_token, 7000*time.Second).Result()
|
set, err := rdb.SetNX(ctx, "access_token", access_token, 7000*time.Second).Result()
|
||||||
|
|
Loading…
Reference in New Issue