使用docker部署自动领金豆bot脚本
使用的版本:
服务器:centos 8
docker: 20.10.6
docker-compose: 1.27.4
推荐使用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
版本,确认是否安装成功。
创建一个目录jd_scripts
用于存放备份配置等数据,迁移重装的时候只需要备份整个jd_scripts目录即可
需要新建的目录文件结构参考如下:
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
停止并删除容器;
这里是个大坑,拿个小本本记下来,其实就是docker内代理宿主机代理的问题
由于众所周知的原因,国内的机器不能访问tg,而又想使用tg-bot来控制,无奈,国外机子太贵(穷),最低也要5美刀!遂买国内机子开代理使用
这里应该放各大厂的aff的,留个坑
一直在使用clash,直接网上搜索clash下载,找到对应版本下载,博主用的是centos,下载linux-amd64的
1、下载clash,最新版本可去官网找
wget https://github.com/Dreamacro/clash/releases/download/v0.19.0/clash-linux-amd64-v0.19.0.gz
2、解压
gzip -d clash-linux-amd64-v0.19.0.gz
3、移动至usr/bin/clash并重命名为clash
sudo mv clash-linux-amd64-v0.19.0 /usr/bin/clash
4、赋予clash运行权限
sudo chmod +x /usr/bin/clash
5、检查是否安装成功
clash -v
1.创建配置文件目录
mkdir -p /etc/clash/
2.进入目录
cd /etc/clash/
3.创建配置文件
vim config.yaml
4.手动编辑很麻烦,可用winscp上传
配置参数自行查找
5.下载前端代码
wget https://github.com/Dreamacro/clash-dashboard/tree/gh-pages
6.解压
unzip gh-pages.zip
7.修改目录名,这里的目录名是上面配置文件里的 external-ui: dashboard
mv clash-dashboard-gh-pages dashboard
1.创建service文件
sudo vim /usr/lib/systemd/system/clash.service
2.输入下面代码
[Unit]
Description=clash proxy
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/clash -d /etc/clash
[Install]
WantedBy=multi-user.target
3.重新加载 systemd 模块
sudo systemctl daemon-reload
4.启动Clash
sudo systemctl start clash.service
5.设置Clash开机自启动
sudo systemctl enable clash.service
6.判断是否成功开启代理
curl -I https://www.google.com
返回200即表示代理已经成功
通过shell脚本自动更新Clash在线配置
通过systemctl来管理Clash的进程,对应clash.service
文件,通过两个脚本start-clash.sh
和stop-clash.sh
来管理Clash的启停:
把上面的配置文件修改下:
vim /usr/lib/systemd/system/clash.service
[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
vim /当前用户目录/.config/clash/start-clash.sh
#!/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
vim /当前用户目录/.config/clash/stop-clash.sh
#!/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 正在运行中,需要重新加载配置文件并重启
$ systemctl daemon-reload
$ sudo systemctl restart clash.service
这样每次启动clash时就会自动更新配置文件了,接下来通过crontab 自动重启 clash.service实现自动更新节点
#新建shell文件
vim restart-clash.sh
新增一条命令
#/bin/sh
sudo systemctl restart clash.service
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
查看是否重启成功
由于主要用来使用tg-bot,故只检测tgapi即可
1、判断宿主机可连接tgapi
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、进入容器
docker exec -it jd_scripts /bin/sh
执行步骤1命令,如若响应时间长或失败,则需要配置代理
3、配置容器代理走宿主机
docker版本大于 17.07以上可用下面的方法
cd
mkdir .docker
vim ~/.docker/config.json
填入下面json
{
"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 目录内
docker-compose down
docker-compose up -d
启动成功后,tgbot即可收到成功的消息,尽情享用吧!
## 启动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 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文件夹里面所有的日志文件