使用docker部署自动领金豆bot脚本

使用的版本:

服务器:centos 8

docker: 20.10.6

docker-compose: 1.27.4

1、服务器安装docker,docker-compose

推荐使用centos服务器安装docker、docker-compose

Docker安装

  • 国内一键安装 curl -sSL https://get.daocloud.io/docker | sh
  • 国外一键安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

docker-compose安装

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

最新发行的版本地址:https://github.com/docker/compose/releases。

将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

通过docker-compose version查看docker-compose版本,确认是否安装成功。

2、安装jd_scripts

创建一个目录jd_scripts用于存放备份配置等数据,迁移重装的时候只需要备份整个jd_scripts目录即可

需要新建的目录文件结构参考如下:

1
2
3
4
5
6
jd_scripts
├── logs
│   ├── XXXX.log
│   └── XXXX.log
├── my_crontab_list.sh
└── docker-compose.yml
  • jd_scripts/logs建一个空文件夹就行
  • jd_scripts/docker-compose.yml 参考内容如下(自己动手能力不行搞不定请使用默认配置):

根据文档一步一步下去就ok了,下面主要记录下可能用到的命令

目录文件配置好之后在 jd_scripts目录执行。
docker-compose up -d 启动(修改docker-compose.yml后需要使用此命令使更改生效);
docker-compose logs 打印日志;
docker-compose logs -f 打印日志,-f表示跟随日志; docker logs -f jd_scripts 和上面两条相比可以显示汉字; docker-compose pull 更新镜像;
docker-compose stop 停止容器;
docker-compose restart 重启容器;
docker-compose down 停止并删除容器;

3、开代理机器,激活tg-bot

这里是个大坑,拿个小本本记下来,其实就是docker内代理宿主机代理的问题

由于众所周知的原因,国内的机器不能访问tg,而又想使用tg-bot来控制,无奈,国外机子太贵(穷),最低也要5美刀!遂买国内机子开代理使用

1、买国内机器,推荐大厂的

这里应该放各大厂的aff的,留个坑

2、安装clash

一直在使用clash,直接网上搜索clash下载,找到对应版本下载,博主用的是centos,下载linux-amd64的

1、下载clash,最新版本可去官网找

1
wget https://github.com/Dreamacro/clash/releases/download/v0.19.0/clash-linux-amd64-v0.19.0.gz

2、解压

1
gzip -d clash-linux-amd64-v0.19.0.gz

3、移动至usr/bin/clash并重命名为clash

1
sudo mv clash-linux-amd64-v0.19.0 /usr/bin/clash

4、赋予clash运行权限

1
sudo chmod +x /usr/bin/clash

5、检查是否安装成功

1
clash -v 
3、创建配置文件、安装控制面板

1.创建配置文件目录

1
mkdir -p /etc/clash/

2.进入目录

1
cd /etc/clash/

3.创建配置文件

1
vim config.yaml

4.手动编辑很麻烦,可用winscp上传

配置参数自行查找

5.下载前端代码

1
wget https://github.com/Dreamacro/clash-dashboard/tree/gh-pages

6.解压

1
unzip gh-pages.zip

7.修改目录名,这里的目录名是上面配置文件里的 external-ui: dashboard

1
mv clash-dashboard-gh-pages dashboard

可用这个面板远程控制

4、设置clash开机启动

1.创建service文件

1
sudo vim /usr/lib/systemd/system/clash.service

2.输入下面代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=clash proxy
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/clash -d /etc/clash

[Install]
WantedBy=multi-user.target

3.重新加载 systemd 模块

1
sudo systemctl daemon-reload

4.启动Clash

1
sudo systemctl start clash.service

5.设置Clash开机自启动

1
sudo systemctl enable clash.service

6.判断是否成功开启代理

1
curl -I https://www.google.com

返回200即表示代理已经成功

5、自动更新订阅配置文件

通过shell脚本自动更新Clash在线配置

通过systemctl来管理Clash的进程,对应clash.service文件,通过两个脚本start-clash.shstop-clash.sh来管理Clash的启停:

把上面的配置文件修改下:

1
vim /usr/lib/systemd/system/clash.service
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=clash proxy
After=network.target

[Service]
WorkingDirectory=/当前用户目录/.config/clash
Type=simple
ExecStart=/当前用户目录/.config/clash/start-clash.sh
ExecStop=/当前用户目录/.config/clash/stop-clash.sh
Environment="HOME=/当前用户目录"
Environment="CLASH_URL=你的订阅链接"

[Install]
WantedBy=multi-user.target
1
vim /当前用户目录/.config/clash/start-clash.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash
# save this file to ${HOME}/.config/clash/start-clash.sh

# save pid file
echo $$ > ${HOME}/.config/clash/clash.pid

diff ${HOME}/.config/clash/config.yaml <(curl -s ${CLASH_URL})
if [ "$?" == 0 ]
then
    /usr/bin/clash
else
    TIME=`date '+%Y-%m-%d %H:%M:%S'`
    cp ${HOME}/.config/clash/config.yaml "${HOME}/.config/clash/config.yaml.bak${TIME}"
    curl -L -o ${HOME}/.config/clash/config.yaml ${CLASH_URL}
    /usr/bin/clash
fi
1
vim /当前用户目录/.config/clash/stop-clash.sh
1
2
3
4
5
6
7
#!/bin/bash
# save this file to ${HOME}/.config/clash/stop-clash.sh

# read pid file
PID=`cat ${HOME}/.config/clash/clash.pid`
kill -9 ${PID}
rm ${HOME}/.config/clash/clash.pid

配置添加完成后,如果你的clash 正在运行中,需要重新加载配置文件并重启

1
2
$ systemctl daemon-reload
$ sudo systemctl restart clash.service

这样每次启动clash时就会自动更新配置文件了,接下来通过crontab 自动重启 clash.service实现自动更新节点

1
2
#新建shell文件
vim restart-clash.sh

新增一条命令

1
2
#/bin/sh
sudo systemctl restart clash.service
1
2
3
4
5
6
7
chmod +x restart-clash.sh
crontab -e
#插入下面命令
#每3小时重启一次
0 */3 * * * restart-clash.sh
#每分钟重启一次
* * * * * restart-clash.sh

大功告成,可通过tail -500f /var/log/cron查看定时任务是否执行

sudo systemctl status clash.service 查看是否重启成功

4、docker内开代理

由于主要用来使用tg-bot,故只检测tgapi即可

1、判断宿主机可连接tgapi

1
2
3
curl -sX POST "https://api.telegram.org/bot'''Your Token'''/sendMessage" -d "chat_id="Some Chat id"&text=hello"

curl -sX POST "https://api.telegram.org/botxxxxxxxxugt5A/sendMessage" -d "chat_id=48xxxxxx&text=hello"

如果返回成功,即表示成功

2、进入容器

1
docker exec -it jd_scripts /bin/sh

执行步骤1命令,如若响应时间长或失败,则需要配置代理

3、配置容器代理走宿主机

docker官方有教程

docker版本大于 17.07以上可用下面的方法

1
2
3
cd
mkdir .docker
vim  ~/.docker/config.json

填入下面json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://172.17.0.1:7890",
     "httpsProxy": "http://172.17.0.1:7890",
     "noProxy": "localhost,127.0.0.1"
"
   }
 }
}

保存文件创建或者启动新容器时才生效

这里有个大坑,搞了一天,就是

代理的ip一定要写对!

代理的ip一定要写对!

代理的ip一定要写对!

下午调试的时候https的写成了127的了,机器启动起来,pull代码的时候,直接找不到文件,当时还骂这破代理,没法,就把报错ip不走代理了,没想到下面不报错了,直接无限重启,搞得头都大了,还在想是不是内存爆了呢!晚上,打开配置文件,定睛一看,WC!“httpsProxy"端口写的127…赶紧改了,重新跑遍,妥了,bot成功了!

4、删除容器,重新启用

接下来在jd_scripts 目录内

1
2
docker-compose down
docker-compose up -d

启动成功后,tgbot即可收到成功的消息,尽情享用吧!

Clash相关的管理命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
## 启动Clash ##
sudo systemctl start clash.service

## 重启Clash ##
sudo systemctl restart clash.service

## 查看Clash运行状态 ##
sudo systemctl status clash.service

## 实时滚动状态 ##
sudo journalctl -u clash.service -f

docker相关命令

docker exec -it jd_scripts /bin/sh -c 'git -C /scripts pull && node /scripts/jd_bean_change.js' 手动运行一脚本

docker exec -it jd_scripts /bin/sh -c 'env' 查看设置的环境变量

docker exec -it jd_scripts /bin/sh -c 'crontab -l' 查看已生效的crontab_list定时器任务

docker exec -it jd_scripts sh -c "docker_entrypoint.sh" 手动更新jd_scripts仓库最新脚本

docker exec -it jd_scripts /bin/sh 仅进入容器命令

rm -rf logs/*.log 删除logs文件夹里面所有的日志文件