添加 Docker 服务配置文件

新增 forgejo、mihomo 透明代理的 docker-compose 和配置文件,
敏感凭证(runner token、VLESS UUID)通过 .env 管理不入库。
同步更新 CLAUDE.md 目录结构说明,新增 README.md。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-05-31 00:31:38 +08:00
parent 71a7eef7e6
commit d6692b8776
10 changed files with 228 additions and 23 deletions
+11
View File
@@ -0,0 +1,11 @@
# Docker 运行时数据
*.db
*.metadb
*.dat
*.tar
# 敏感凭证
docker/**/.env
# 系统文件
.DS_Store
+18 -23
View File
@@ -21,22 +21,26 @@ ssh nas # ~/.ssh/config 已配置,HostName 192.168.3.200User wangj
| 存储 | /volume17TB 总量 |
| IP | 192.168.3.200(静态,手动配置) |
## 目录结构
## 仓库目录结构
```
/volume1/docker/
docker/
├── forgejo/
│ ├── docker-compose.yml # Forgejo + act-runner
│ ├── data/ # Forgejo 数据(SQLite DB、仓库、app.ini
│ └── runner/ # act-runner 配置
├── proxy/
│ ├── docker-compose.yml # mihomo 容器
├── mihomo/config.yaml # 透明代理配置
── dnsmasq/dnsmasq.conf # dnsmasq 配置(预备,暂未启用)
└── backups/
└── jiu-db/ # jiu 项目 DB 每日备份(.sql.gz
│ ├── docker-compose.yml # Forgejo + act-runnertoken 通过 .env 注入)
│ ├── .env.example # 复制为 .env 填入真实 token
│ └── runner/
│ └── config.yaml # act-runner 配置
└── proxy/
├── docker-compose.yml # mihomo 容器
── mihomo/
│ ├── config.yaml # 透明代理规则(uuid 用 <VLESS_UUID> 占位)
│ └── .env.example # 复制为 .env 填入真实 UUID
└── dnsmasq/
└── dnsmasq.conf # 预备 DHCP 配置(暂未启用)
```
NAS 上实际路径:`/volume1/docker/<服务名>/`,与仓库 `docker/` 目录一一对应。
## Docker 服务
### 权限说明
@@ -51,24 +55,18 @@ ssh nas # ~/.ssh/config 已配置,HostName 192.168.3.200User wangj
- **局域网直连**`http://192.168.3.200:3000/`
- **SSH Clone**`ssh://git@git.51yanmei.com:2222/`
- **配置方式**:优先通过 docker-compose.yml 的环境变量(`GITEA__section__key`)管理,避免直接改 app.ini
- **app.ini 路径**`/volume1/docker/forgejo/data/gitea/conf/app.ini`(属于 uid=1000wangjia 只读)
- **app.ini 路径**`/volume1/docker/forgejo/data/gitea/conf/app.ini`(属于 uid=1000wangjia 只读,需 root 修改
- **数据库**SQLite`/volume1/docker/forgejo/data/gitea/gitea.db`
- **act-runner**CI/CD runner`forgejo-act-runner`),挂载 `/var/run/docker.sock` 可运行 Docker 任务
```bash
# 查看 Forgejo 日志
ssh nas "tail -f /volume1/docker/forgejo/data/gitea/log/gitea.log"
# 修改 Forgejo 配置(通过环境变量,改完需在 Container Manager 重启容器)
ssh nas "vi /volume1/docker/forgejo/docker-compose.yml"
# 如需直接改 app.ini,必须用 rootDSM 终端)
sudo sed -i 's/旧值/新值/' /volume1/docker/forgejo/data/gitea/conf/app.ini
```
### mihomo(透明代理)
局域网透明代理网关,运行在 NAS 上,Windows 设备(192.168.3.88)以 NAS 为默认网关。
局域网透明代理网关,Windows 设备(192.168.3.88)以 NAS 为默认网关。
**架构:**
```
@@ -101,13 +99,10 @@ ssh nas "curl -s --max-time 10 --proxy 'socks5h://127.0.0.1:7890' https://ifconf
# 查看实时日志
ssh nas "curl -s http://127.0.0.1:9090/logs -N --max-time 10"
# 查看活跃连接
ssh nas "curl -s http://127.0.0.1:9090/connections"
```
**dnsmasq(预备,未启用):**
配置文件已就绪(`/volume1/docker/proxy/dnsmasq/dnsmasq.conf`),待未来启用 DHCP 自动分发时使用。启用前需将 mihomo DNS 端口从 53 改为 1053,并将 dnsmasq 加入 docker-compose.yml。
配置文件已就绪(`docker/proxy/dnsmasq/dnsmasq.conf`),待未来启用 DHCP 自动分发时使用。启用前需将 mihomo DNS 端口从 53 改为 1053,并将 dnsmasq 加入 docker-compose.yml。
### jiu-db 自动备份
+47
View File
@@ -0,0 +1,47 @@
# NAS 运维配置
Synology DS925+192.168.3.200)的 Docker 服务配置管理。
## 服务
| 服务 | 说明 | 地址 |
|------|------|------|
| Forgejo | 自托管 Git 服务 + CI/CD runner | http://git.51yanmei.com |
| mihomo | 透明代理网关(VLESS + Reality | 局域网网关 192.168.3.200 |
| dnsmasq | DHCP/DNS(预备,暂未启用) | — |
## 目录
```
docker/
├── forgejo/ # Forgejo + act-runner
└── proxy/ # mihomo 透明代理 + dnsmasq
```
## 部署
### 前置条件
```bash
cp docker/forgejo/.env.example docker/forgejo/.env
# 填入 GITEA_RUNNER_REGISTRATION_TOKEN
cp docker/proxy/mihomo/.env.example docker/proxy/mihomo/.env
# 填入 VLESS_UUID(然后手动更新 config.yaml 中的 <VLESS_UUID>
```
### 启动服务
```bash
# Forgejo
cd docker/forgejo && docker compose up -d
# 透明代理
cd docker/proxy && docker compose up -d
```
## 连接
```bash
ssh nas # HostName 192.168.3.200,需配置 ~/.ssh/config
```
+1
View File
@@ -0,0 +1 @@
GITEA_RUNNER_REGISTRATION_TOKEN=
+35
View File
@@ -0,0 +1,35 @@
services:
forgejo:
image: gitea/gitea:latest
container_name: forgejo
restart: always
environment:
USER_UID: 1000
USER_GID: 1000
GITEA__actions__ENABLED: "true"
GITEA__actions__DEFAULT_ACTIONS_URL: https://gitea.com
GITEA__server__ROOT_URL: http://git.51yanmei.com/
GITEA__server__SSH_DOMAIN: git.51yanmei.com
GITEA__server__SSH_PORT: 2222
ports:
- "3000:3000"
- "2222:22"
volumes:
- /volume1/docker/forgejo/data:/data
act-runner:
image: gitea/act_runner:latest
container_name: forgejo-act-runner
restart: always
network_mode: host
depends_on:
- forgejo
environment:
CONFIG_FILE: /data/config.yaml
GITEA_INSTANCE_URL: http://git.51yanmei.com/
GITEA_RUNNER_REGISTRATION_TOKEN: ${GITEA_RUNNER_REGISTRATION_TOKEN}
GITEA_RUNNER_NAME: nas-runner
volumes:
- /volume1/docker/forgejo/runner:/data
- /var/run/docker.sock:/var/run/docker.sock
- /volume1/docker/backups:/volume1/docker/backups
+23
View File
@@ -0,0 +1,23 @@
log:
level: info
runner:
file: .runner
capacity: 1
timeout: 3h
labels:
- ubuntu-latest:docker://catthehacker/ubuntu:act-latest
cache:
enabled: true
dir: /data/cache
container:
network: bridge
privileged: false
options: >-
-v /volume1/docker/backups:/volume1/docker/backups
-v /volume1/docker/tools:/volume1/docker/tools
valid_volumes:
- /volume1/docker/backups
- /volume1/docker/tools
+12
View File
@@ -0,0 +1,12 @@
# DHCP 服务
dhcp-range=192.168.3.10,192.168.3.230,12h
dhcp-option=3,192.168.3.200
dhcp-option=6,192.168.3.200
# DNS 上游指向 Mihomo(端口 1053
server=127.0.0.1#1053
# 本地解析
address=/nas.local/192.168.3.200
no-hosts
+11
View File
@@ -0,0 +1,11 @@
services:
mihomo:
image: metacubex/mihomo:latest
container_name: mihomo
restart: always
network_mode: host
privileged: true
volumes:
- /volume1/docker/proxy/mihomo:/root/.config/mihomo
environment:
- TZ=Asia/Shanghai
+1
View File
@@ -0,0 +1 @@
VLESS_UUID=
+69
View File
@@ -0,0 +1,69 @@
mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
ipv6: false
external-controller: 0.0.0.0:9090
tun:
enable: true
stack: gvisor
mtu: 1500
auto-route: true
auto-detect-interface: true
route-exclude-address:
- 18.136.60.128/32
dns-hijack:
- any:53
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-persist: true
fake-ip-range: 198.18.0.0/15
fake-ip-filter:
- '*.lan'
- '*.local'
- 'time.*.com'
- 'ntp.*.com'
- '+.pool.ntp.org'
nameserver:
- 114.114.114.114
- 223.5.5.5
fallback:
- 8.8.8.8
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
proxies:
- name: "ec2-sg"
type: vless
server: 18.136.60.128
port: 443
uuid: <VLESS_UUID>
network: tcp
tls: true
udp: true
reality-opts:
public-key: fHHr9qWw2JuqNxpv3XTcZTi5k73HWfjipa4vnXFu9W8
short-id: 6eb28f1a766a
servername: www.cloudflare.com
client-fingerprint: chrome
proxy-groups:
- name: "Proxy"
type: select
proxies:
- ec2-sg
- DIRECT
rules:
- GEOIP,private,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxy