Skip to content

Commit ee2c461

Browse files
committed
更新文档及k8s部署文件
1 parent 721d637 commit ee2c461

7 files changed

Lines changed: 241 additions & 67 deletions

File tree

.github/workflows/docker.yaml

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@ name: Docker Multi-Arch Release
33
on:
44
push:
55
tags:
6-
- '*'
6+
- '*' # 自动触发:任何 tag 推送都会触发
77
workflow_dispatch:
88
inputs:
99
image_tag:
10-
description: 'Docker image tag (e.g., v1.2.3)'
10+
description: 'Image tag to use (e.g., v1.2.3)'
1111
required: true
1212
default: 'manual-latest'
13-
14-
permissions:
15-
contents: read
16-
packages: write
13+
push_latest:
14+
description: 'Also tag and push as latest?'
15+
required: false
16+
default: 'true'
1717

1818
jobs:
1919
docker:
20-
name: Build and Push Docker Images
20+
name: Build & Push Docker Images
2121
runs-on: ubuntu-latest
22+
2223
steps:
2324
- name: Checkout source
2425
uses: actions/checkout@v3
@@ -29,7 +30,7 @@ jobs:
2930
- name: Set up Docker Buildx
3031
uses: docker/setup-buildx-action@v2
3132

32-
- name: Login to DockerHub
33+
- name: Login to Docker Hub
3334
uses: docker/login-action@v2
3435
with:
3536
username: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -49,25 +50,35 @@ jobs:
4950
username: ${{ secrets.ALI_USERNAME }}
5051
password: ${{ secrets.ALI_PASSWORD }}
5152

52-
- name: Normalize image tag
53+
- name: Resolve tag
54+
id: tag
5355
run: |
5456
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
5557
echo "TAG=${{ github.event.inputs.image_tag }}" >> $GITHUB_ENV
58+
echo "PUSH_LATEST=${{ github.event.inputs.push_latest }}" >> $GITHUB_ENV
5659
else
57-
REF=${GITHUB_REF##*/}
58-
SAFE_TAG=$(echo "$REF" | sed 's#[^a-zA-Z0-9_.-]#-#g')
59-
echo "TAG=$SAFE_TAG" >> $GITHUB_ENV
60+
TAG_NAME="${GITHUB_REF##*/}"
61+
echo "TAG=${TAG_NAME}" >> $GITHUB_ENV
62+
echo "PUSH_LATEST=true" >> $GITHUB_ENV
6063
fi
6164
62-
- name: Build and push multi-platform image
65+
- name: Show resolved tags
66+
run: |
67+
echo "Resolved image tag: $TAG"
68+
echo "Push latest: $PUSH_LATEST"
69+
70+
- name: Build and push Docker images
6371
uses: docker/build-push-action@v5
6472
with:
6573
context: .
6674
push: true
6775
platforms: linux/amd64,linux/arm64
6876
tags: |
69-
${{ secrets.DOCKERHUB_USERNAME }}/stickerdownloader:${{ env.TAG }}
77+
docker.io/${{ secrets.DOCKERHUB_USERNAME }}/stickerdownloader:${{ env.TAG }}
7078
ghcr.io/${{ github.repository_owner }}/stickerdownloader:${{ env.TAG }}
7179
${{ secrets.ALI_REGISTRY }}/${{ secrets.ALI_USERNAME }}/stickerdownloader:${{ env.TAG }}
80+
${{ env.PUSH_LATEST == 'true' && format('docker.io/{0}/stickerdownloader:latest', secrets.DOCKERHUB_USERNAME) || '' }}
81+
${{ env.PUSH_LATEST == 'true' && format('ghcr.io/{0}/stickerdownloader:latest', github.repository_owner) || '' }}
82+
${{ env.PUSH_LATEST == 'true' && format('{0}/{1}/stickerdownloader:latest', secrets.ALI_REGISTRY, secrets.ALI_USERNAME) || '' }}
7283
cache-from: type=gha
73-
cache-to: type=gha,mode=max
84+
cache-to: type=gha,mode=max

docker-compose.yaml

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,6 @@
11
version: "3.9"
22

33
services:
4-
app:
5-
build: .
6-
container_name: sticker_app
7-
ports:
8-
- "8080:8080"
9-
volumes:
10-
- ./config.yaml:/app/config.yaml # 配置文件挂载
11-
- ./storage:/app/storage # 存储卷挂载
12-
- ./log:/app/log # 日志目录挂载
13-
depends_on:
14-
- redis
15-
164
redis:
175
image: redis:7
186
container_name: sticker_redis
@@ -21,5 +9,15 @@ services:
219
volumes:
2210
- redis_data:/data
2311

12+
app:
13+
image: rroy233/stickerdownloader:latest
14+
container_name: sticker_app
15+
depends_on:
16+
- redis
17+
volumes:
18+
- ./config.yaml:/app/config.yaml
19+
- ./log:/app/log
20+
- ./storage:/app/storage
21+
2422
volumes:
2523
redis_data:

docs/docker.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# 🐳 StickerDownloader Docker 部署教程(两种方式)
2+
3+
StickerDownloader 应用,支持以下两种场景:
4+
5+
1. **方式一**:使用 `docker-compose` 一键部署 Redis 和 App
6+
2. **方式二**:使用外部 Redis,仅运行 App 容器(连接宿主机或云端 Redis)
7+
8+
---
9+
10+
## 🧰 准备前提
11+
12+
* 安装好 [Docker](https://docs.docker.com/get-docker/)
13+
* 安装好 [Docker Compose](https://docs.docker.com/compose/)
14+
* 克隆或下载本项目源代码
15+
*`config.example.yaml` 修改为实际配置并命名为 `config.yaml`
16+
17+
**镜像源选择**
18+
19+
| 镜像仓库 | 镜像地址格式 |
20+
| ------------------------- |------------------------------------------------------------|
21+
| Docker Hub | `docker.io/rroy233/stickerdownloader` |
22+
| GitHub Container Registry | `ghcr.io/rroy233/stickerdownloader` |
23+
| 阿里云镜像仓库 | `registry.cn-guangzhou.aliyuncs.com/rroy233/stickerdownloader` |
24+
25+
(本教程默认使用Docker Hub作为镜像仓库)
26+
27+
---
28+
29+
# ✅ 方式一:使用 Docker Compose 一键启动(含 Redis)
30+
31+
---
32+
33+
### 📄 1. 配置 config.yaml(Redis 使用内部服务)
34+
35+
```yaml
36+
redis:
37+
server: "redis" # 对应 docker-compose 的 redis 服务名
38+
port: "6379"
39+
password: ""
40+
tls: false
41+
db: 0
42+
```
43+
44+
---
45+
46+
### 🧩 2. 修改默认的docker-compose.yml
47+
48+
```yaml
49+
app:
50+
image: rroy233/stickerdownloader:latest # 可替换镜像
51+
```
52+
53+
---
54+
55+
### ▶️ 3. 一键启动
56+
57+
```bash
58+
docker-compose up --build -d
59+
```
60+
61+
---
62+
63+
# ✅ 方式二:使用外部 Redis,仅运行 App 容器
64+
65+
---
66+
67+
## 📄 1. 配置 config.yaml(连接外部 Redis)
68+
69+
例如连接宿主机、云端或远程 Redis:
70+
71+
```yaml
72+
redis:
73+
server: "host.docker.internal" # 宿主机 Redis (推荐 macOS/Windows/Linux)
74+
# server: "172.17.0.1" # Linux bridge 模式下宿主机 IP
75+
# server: "rds.aliyuncs.com" # 也可为云 Redis 地址
76+
port: "6379"
77+
password: ""
78+
tls: false
79+
db: 0
80+
```
81+
82+
---
83+
84+
## 🐳 2. 运行 App 镜像
85+
86+
### 启动容器
87+
88+
```bash
89+
docker run -d \
90+
--name sticker_app \
91+
-v $(pwd)/config.yaml:/app/config.yaml \
92+
-v $(pwd)/log:/app/log \
93+
-v $(pwd)/storage:/app/storage \
94+
rroy233/stickerdownloader:latest
95+
```
96+
97+
98+
# 🧼 清理
99+
100+
```bash
101+
docker-compose down -v # 方式一
102+
docker rm -f sticker_app # 方式二
103+
```

docs/k8s.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# ☸️ StickerDownloader Kubernetes 部署教程
2+
3+
本教程将引导你将 StickerDownloader 和 Redis 部署到 Kubernetes 集群中,支持配置注入、持久化、自动重启与更新。
4+
5+
---
6+
7+
## 📁 一、准备配置文件 config.yaml
8+
9+
### 1. 从 `config.example.yaml` 创建:
10+
11+
```bash
12+
cp config.example.yaml config.yaml
13+
```
14+
15+
### 2. 修改 Redis 地址为 Kubernetes 内部服务名:
16+
17+
```yaml
18+
redis:
19+
server: "redis" # Redis Service 名称,Cluster 内 DNS 可解析
20+
port: "6379"
21+
password: ""
22+
tls: false
23+
db: 0
24+
```
25+
26+
### 3. 创建 Secret 以挂载配置(推荐包含敏感信息如 token):
27+
28+
```bash
29+
kubectl create secret generic app-config \
30+
--from-file=config.yaml=./config.yaml
31+
```
32+
33+
> 📌 也可写为 YAML 文件形式或搭配 GitOps 工具(如 Kustomize、ArgoCD)
34+
35+
---
36+
37+
## 🔄 二、部署与管理
38+
39+
### 启动部署:
40+
41+
```bash
42+
kubectl apply -f k8s/*
43+
```
44+
45+
### 更新配置:
46+
47+
修改 `config.yaml` 后:
48+
49+
```bash
50+
kubectl delete secret app-config
51+
kubectl create secret generic app-config --from-file=config.yaml=./config.yaml
52+
kubectl rollout restart deployment sticker-app
53+
```
54+
55+
或使用 `kubectl patch` 替换 `configMap`/`secret` 内容。
56+
57+
---
58+
59+
## 🔁 三、更新镜像
60+
61+
### 1. 修改 image tag 并更新:
62+
63+
```yaml
64+
image: ghcr.io/rroy233/stickerdownloader:v1.2.3
65+
```
66+
67+
然后:
68+
69+
```bash
70+
kubectl apply -f k8s/app-deployment.yaml
71+
```
72+
73+
### 2. 或自动触发滚动更新:
74+
75+
```bash
76+
kubectl rollout restart deployment sticker-app
77+
```
78+
79+
---
80+
81+
## ✅ 四、验证运行状态
82+
83+
```bash
84+
kubectl get pods
85+
kubectl logs -f deploy/sticker-app
86+
```

k8s/app-config.yaml

Lines changed: 0 additions & 7 deletions
This file was deleted.

k8s/app-deployment.yaml

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
apiVersion: v1
22
kind: PersistentVolumeClaim
33
metadata:
4-
name: app-storage-pvc
4+
name: log-pvc
55
spec:
6-
accessModes:
7-
- ReadWriteOnce
6+
accessModes: [ReadWriteOnce]
87
resources:
98
requests:
10-
storage: 1Gi # 可更改
9+
storage: 1Gi
1110
---
1211
apiVersion: v1
1312
kind: PersistentVolumeClaim
1413
metadata:
15-
name: app-log-pvc
14+
name: storage-pvc
1615
spec:
17-
accessModes:
18-
- ReadWriteOnce
16+
accessModes: [ReadWriteOnce]
1917
resources:
2018
requests:
2119
storage: 1Gi
@@ -37,34 +35,21 @@ spec:
3735
containers:
3836
- name: app
3937
image: rroy233/stickerdownloader:latest
40-
ports:
41-
- containerPort: 8080
4238
volumeMounts:
43-
- name: config-volume
39+
- name: config
4440
mountPath: /app/config.yaml
4541
subPath: config.yaml
46-
- name: log-volume
42+
- name: logs
4743
mountPath: /app/log
48-
- name: storage-volume
44+
- name: storage
4945
mountPath: /app/storage
5046
volumes:
51-
- name: config-volume
52-
configMap:
53-
name: app-config
54-
- name: log-volume
47+
- name: config
48+
secret:
49+
secretName: app-config
50+
- name: logs
5551
persistentVolumeClaim:
56-
claimName: app-log-pvc
57-
- name: storage-volume
52+
claimName: log-pvc
53+
- name: storage
5854
persistentVolumeClaim:
59-
claimName: app-storage-pvc
60-
---
61-
apiVersion: v1
62-
kind: Service
63-
metadata:
64-
name: sticker-app
65-
spec:
66-
selector:
67-
app: sticker-app
68-
ports:
69-
- port: 8080
70-
targetPort: 8080
55+
claimName: storage-pvc

0 commit comments

Comments
 (0)