-
Notifications
You must be signed in to change notification settings - Fork 0
79 lines (68 loc) · 2.35 KB
/
deploy.yml
File metadata and controls
79 lines (68 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
name: Build and Deploy to Docker
on:
push:
branches: ["main"]
paths-ignore:
- "README.md"
- "docs/**"
- ".gitignore"
- "LICENSE"
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: jerry113/echowave:latest
deploy-to-vps:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
port: 22
script: |
# 1. 登录 Docker
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
# 2. 拉取最新镜像
docker pull jerry113/echowave:latest
# 3. 【关键步骤】清理旧容器和残留进程
# 停止并删除旧容器
docker stop echowave || true
docker rm echowave || true
# 4. 【数据持久化准备】
# 创建宿主机数据目录
mkdir -p /root/bot_data
# (可选) 迁移旧数据:如果你以前有散落在外的 db 文件,移动到新目录
if [ -f "/root/echowave.db" ]; then
mv /root/echowave.db /root/bot_data/
fi
if [ -f "/root/bot_data.json" ]; then
mv /root/bot_data.json /root/bot_data/
fi
# 5. 启动新容器
# -v /root/bot_data:/app/data : 将宿主机的 bot_data 挂载到容器内的 /app/data
# 这样 echowave.db 和它的日志文件都会被安全保存
docker run -d \
--name echowave \
--restart always \
-v /root/bot_data:/app/data \
--env-file /root/.env \
jerry113/echowave:latest
# 6. 清理垃圾镜像
docker image prune -f