Merge branch 'main' of 6t7.net:cnphpbb/deploy.stack

This commit is contained in:
2026-06-19 11:47:23 +08:00
27 changed files with 416 additions and 36 deletions
+73
View File
@@ -0,0 +1,73 @@
# ========== 经典模式 ==========
# 如果为 true,不使用任何颜色或图标,与标准 ls 行为类似
classic: false
# ========== 分块(Blocks ==========
# 定义每行显示哪些信息块,按顺序排列
blocks:
- permission # 文件权限 (rwxr-xr-x)
- user # 文件所有者
- group # 用户组
- size # 文件大小
- date # 日期/时间
- name # 文件名(必须包含)
# ========== 颜色主题 ==========
color:
# 何时使用颜色:always(总是)、auto(自动)、never(从不)
when: auto
# 自定义文件类型颜色(覆盖默认值)
theme: custom
# ========== 日期格式 ==========
date: "+%Y-%m-%d %H:%M:%S" # 可选:relative(相对时间)、isoISO格式)
# ========== 跟随符号链接 ============
dereference: false
# ========== 图标 ==========
icons:
# 何时显示图标:always、auto、never
when: auto
# 图标主题(需要对应的 Nerd Font)
theme: fancy # 或 unicode
# 分隔符(图标与文件名之间的字符)
separator: " "
# ========== 忽略选项 ==========
ignore-globs:
- "*.bak" # 忽略所有 .bak 文件
- ".git" # 忽略 .git 目录
- "__pycache__" # 忽略 Python 缓存
# ========== 布局 ==========
layout: grid # grid(网格)| tree(树状)| oneline(单行)
# ========== 递归深度(--tree 时有效) ==========
recursion:
enabled: false
depth: 3 # 递归显示的最大深度
# ========== 排序 ==========
sorting:
column: name # 排序字段:name、size、time、version、extension
# reverse: false # 是否倒序
# dir-grouping: first # 目录排序:first(靠前)、last(靠后)、none
# ========== 符号链接 ==========
# 是否显示符号链接的目标路径
no-symlink: false
symlink-arrow: " ➜ "
# ========== 总大小 ==========
total-size: false # 是否显示总大小(在目录底部)
# ========== 截断所有者名 ==========
truncate-owner:
after: 8 # 用户名超过多少字符截断
# ========== 超链接 ==========
hyperlink: never # always | auto | never 是否生成终端超链接
+32
View File
@@ -0,0 +1,32 @@
# 文件类型颜色
file-type:
directory:
foreground: cyan
bold: true
symlink:
foreground: magenta
italic: true
executable:
foreground: green
bold: true
socket:
foreground: red
pipe:
foreground: yellow
block-device:
foreground: red
char-device:
foreground: yellow
# 文件扩展名颜色(覆盖文件类型颜色)
extensions:
rs:
foreground: white
bold: true
py:
foreground: yellow
js:
foreground: green
md:
foreground: cyan
italic: true
+3
View File
@@ -0,0 +1,3 @@
IMAGE_TAG_VER=5.4.2
IMAGE_TAG=adminer:${IMAGE_TAG_VER}
Volumes_Path=/data/volumes/adminer
+1
View File
@@ -0,0 +1 @@
IMAGE_TAG=hub.tp229.com:3500/ansible-alpine:py3.13-rootless
+2
View File
@@ -0,0 +1,2 @@
Cadvisor_Tag_Ver=v0.53.0
Cadvisor_Image=hub.6t7.net/base/cadvisor:${Cadvisor_Tag_Ver}
+1
View File
@@ -0,0 +1 @@
IMAGE_TAG=alpine:3
+1
View File
@@ -0,0 +1 @@
IMAGE_TAG=debian:13
+3
View File
@@ -0,0 +1,3 @@
IMAGE_TAG_BASH=golang:1.25.0-trixie
IMAGE_TAG_ASH=golang:1.25.0-alpine
Volumes_Path=/data/volumes
+3 -2
View File
@@ -8,8 +8,9 @@
# $EDITOR env.cfg # 填入真实密码/密钥后保存
# docker compose -p golang --env-file ./env.cfg -f ./stack.yml up -d
#
IMAGE_TAG_BASH=golang:1.25.0-trixie
IMAGE_TAG_ASH=golang:1.25.0-alpine
IMAGE_TAG_BASH=golang:1.25-trixie
IMAGE_TAG_ASH=golang:1.25-alpine
Volumes_Path=/data/volumes
+3
View File
@@ -0,0 +1,3 @@
IMAGE_TAG_BASH=node:22.18.0-bookworm
IMAGE_TAG_ASH=node:22.18.0-alpine
Volumes_Path=/data/volumes
+4 -4
View File
@@ -17,13 +17,13 @@
#IMAGE_TAG=postgres:15.6-bookworm
IMAGE_TAG=postgres:16.10
IMAGE_TAG=postgres:16.14
IMAGE_TAG_V17=postgres:17.6
IMAGE_TAG_V17=postgres:17.10
IMAGE_TAG_V18=postgres:18.0
IMAGE_TAG_V18=postgres:18.4
IMAGE_TAG_V15=postgres:15.14
IMAGE_TAG_V15=postgres:15.18
POSTGRES_PASSWORD=<your-strong-password>
+1 -1
View File
@@ -8,7 +8,7 @@
# $EDITOR env.cfg # 填入真实密码/密钥后保存
# docker compose -p domain-admin --env-file ./env.cfg -f ./stack.yml up -d
#
IMAGE_TAG_VER=v1.6.73
IMAGE_TAG_VER=v1.6.78
IMAGE_TAG=mouday/domain-admin:${IMAGE_TAG_VER}
+1 -1
View File
@@ -8,6 +8,6 @@
# $EDITOR env.cfg # 填入真实密码/密钥后保存
# docker compose -p drawnix --env-file ./env.cfg -f ./stack.yml up -d
#
IMAGE_TAG_VER=v0.3.0
IMAGE_TAG_VER=v0.4.1
IMAGE_TAG=pubuzhixing/drawnix:${IMAGE_TAG_VER}
+2
View File
@@ -0,0 +1,2 @@
IMAGE_TAG_VER=12.2.0
IMAGE_TAG=grafana/grafana:${IMAGE_TAG_VER}
+1 -1
View File
@@ -8,6 +8,6 @@
# $EDITOR env.cfg # 填入真实密码/密钥后保存
# docker compose -p grafana --env-file ./env.cfg -f ./stack.yml up -d
#
IMAGE_TAG_VER=12.2.0
IMAGE_TAG_VER=13.0.2
IMAGE_TAG=grafana/grafana:${IMAGE_TAG_VER}
+68 -3
View File
@@ -1,4 +1,69 @@
## Grafana
# Grafana 部署说明
image: grafana/grafana:12.2.0
ports: 3000
[Grafana](https://grafana.com/) 是一个开源的可观测性平台,支持 Prometheus、InfluxDB、Loki、Elasticsearch 等多种数据源,提供丰富的仪表盘和告警能力,适用于基础设施监控、应用性能分析和日志可视化等场景。
## 目录结构
| 文件 | 说明 |
|------|------|
| `compose.yml` | Docker Compose 部署配置 |
| `env.cfg` | 环境变量(镜像版本) |
| `env.cfg.example` | 环境变量模板(不含敏感信息) |
## 部署命令
```bash
# 拉取镜像
docker compose -p grafana --env-file ./grafana/env.cfg -f ./grafana/compose.yml pull
# 启动服务
docker compose -p grafana --env-file ./grafana/env.cfg -f ./grafana/compose.yml up -d
# 停止服务
docker compose -p grafana --env-file ./grafana/env.cfg -f ./grafana/compose.yml down
# 查看日志
docker compose -p grafana --env-file ./grafana/env.cfg -f ./grafana/compose.yml logs -f
```
## 环境变量说明
| 变量 | 说明 | 示例 |
|------|------|------|
| `IMAGE_TAG_VER` | Grafana 镜像版本 | `13.0.2` |
| `IMAGE_TAG` | 完整镜像标签 | `grafana/grafana:13.0.2` |
## 访问服务
- 默认端口:`3000`
- 访问地址:`http://<主机IP>:3000`
- 默认登录凭据:`admin / admin`(首次登录后建议修改密码)
## 持久化
当前配置使用无状态模式,容器重启后仪表盘和配置会丢失。如需持久化,建议在 `compose.yml` 中添加卷挂载:
```yaml
services:
grafana:
volumes:
- ${Volumes_Path:-/data/volumes/grafana}:/var/lib/grafana # 数据持久化
```
并确保宿主机目录权限正确:
```bash
# 创建数据目录
mkdir -pv /data/volumes/grafana
# 设置目录属主为 Grafana 容器用户(UID 472
chown -R 472:472 /data/volumes/grafana
```
## 注意事项
- Grafana 和 Gitea 默认都使用 3000 端口,部署在同一宿主机时需通过 `env.cfg` 或 compose 调整端口映射避免冲突
- 容器使用 `restart: unless-stopped` 策略,宿主机重启后自动拉起
- 默认使用匿名用户访问,如需接入 LDAP/OAuth 等认证,需挂载自定义 `grafana.ini` 配置文件
- 生产环境建议配置数据源和告警渠道的持久化存储
- 当前 `env.cfg.example` 版本为 `13.0.2`,实际部署版本以 `env.cfg` 为准
+10
View File
@@ -0,0 +1,10 @@
IMAGE_TAG=joplin/server:3.6.1
# only amd64
#IMAGE_TAG=joplin/server:2.14.2-beta
## 实际部署时需要考虑APP_BASE_URL变量值
APP_BASE_URL=https://joplin.6t7.net
POSTGRES_USER=postgres
POSTGRES_PASSWORD=Kevin0412PgSql
POSTGRES_DATABASE=joplin-db
POSTGRES_PORT=5432
POSTGRES_HOST=10.0.74.3
+6
View File
@@ -0,0 +1,6 @@
DB_DRIVER=postgres
DB_USER=postgres
DB_PASSWORD=Kevin0412PgSql
DB_DATANAME=memos-db
DB_HOST=192.168.100.184
DB_POST=5432
+6
View File
@@ -0,0 +1,6 @@
DB_DRIVER=postgres
DB_USER=postgres
DB_PASSWORD=Kevin0412PgSql
DB_DATANAME=memos-db
DB_HOST=192.168.10.61
DB_POST=5432
+7
View File
@@ -0,0 +1,7 @@
DB_DRIVER=postgres
DB_USER=postgres
DB_PASSWORD=Kevin0412PgSql
DB_DATANAME=memos-db
#DB_HOST=192.168.100.184
DB_HOST=10.0.74.3
DB_POST=5432
+24
View File
@@ -0,0 +1,24 @@
IMAGE_TAG_LATEST=2.3.6
IMAGE_TAG_Pre=2.4.4
# 数据库连接配置
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=n8n_password
# n8n基础配置
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin_password
# 时区
GENERIC_TIMEZONE=Asia/Shanghai
TZ=Asia/Shanghai
# Webhook配置
WEBHOOK_URL=http://localhost:5678
# 加密密钥
N8N_ENCRYPTION_KEY=your_encryption_key_here
+2 -4
View File
@@ -2,12 +2,10 @@ networks:
nightingale:
driver: bridge
services:
redis:
image: "redis:8-alpine"
container_name: redis
container_name: n9e_redis
hostname: redis
restart: always
ports:
@@ -18,7 +16,7 @@ services:
- nightingale
nightingale:
image: flashcatcloud/nightingale:8.5.0
image: flashcatcloud/nightingale:9.0.0-beta.3
container_name: nightingale
hostname: nightingale
restart: always
+13 -1
View File
@@ -10,8 +10,20 @@
#
IMAGE_TAG_VER=v2.15
IMAGE_TAG_VER=v2.24
IMAGE_TAG=binwiederhier/ntfy:${IMAGE_TAG_VER}
Volumes_Path=/data/volumes/ntfy
NTFY_BASE_URL=http://ntfy:80
# Web推送密钥对(自行生成):
# docker run --rm binwiederhier/ntfy ntfy web push generate > keys.txt
# 或:docker exec ntfy ntfy web push generate
# 然后将 public key 和 private key 分别填入下方
NTFY_WEB_PUSH_PUBLIC_KEY=
NTFY_WEB_PUSH_PRIVATE_KEY=
# Web推送关联的邮件地址(用于通知等场景)
NTFY_WEB_PUSH_EMAIL_ADDRESS=
+16 -17
View File
@@ -9,26 +9,25 @@ services:
container_name: ntfy
#tty: true
stdin_open: true
command:
serve
command: serve
restart: unless-stopped
ports:
- '5480:80'
- "5480:80"
environment:
- TZ=Asia/Shanghai # 时区设置为上海时区
- NTFY_BASE_URL=<http://ntfy:80> # ntfy服务的基础访问URL(协议+主机+端口)
- NTFY_CACHE_FILE=/var/lib/ntfy/cache.db # 缓存数据的存储文件路径
- NTFY_AUTH_FILE=/var/lib/ntfy/auth.db # 授权信息(如用户认证数据)的存储文件路径
- NTFY_AUTH_DEFAULT_ACCESS=deny-all # 默认访问权限:禁止所有未授权访问
- NTFY_BEHIND_PROXY=true # 标识ntfy服务运行在代理服务器后方(如Nginx等)
- NTFY_ATTACHMENT_CACHE_DIR=/var/lib/ntfy/attachments # 附件资源的缓存存储目录
- NTFY_ENABLE_LOGIN=true # 启用登录功能,允许用户通过账号密码授权访问
- NTFY_WEB_PUSH_PUBLIC_KEY= <public_key> # Web推送功能的公钥(用于消息加密)
- NTFY_WEB_PUSH_PRIVATE_KEY= <private_key> # Web推送功能的私钥(与公钥配对,用于解密/签名)
- NTFY_WEB_PUSH_FILE=/var/lib/ntfy/webpush.db # Web推送相关的数据存储文件路径
- NTFY_WEB_PUSH_EMAIL_ADDRESS= <email> # Web推送关联的邮件地址(用于通知等场景)
- NTFY_ENABLE_SIGNUP=false # 禁用用户注册功能,阻止新用户自主创建账号
- NTFY_ENABLE_METRICS=true # 启用指标收集功能,用于监控和分析服务运行状态
- TZ=Asia/Shanghai # 时区设置为上海时区
- NTFY_BASE_URL=${NTFY_BASE_URL} # ntfy服务的基础访问URL(协议+主机+端口)
- NTFY_CACHE_FILE=/var/lib/ntfy/cache.db # 缓存数据的存储文件路径
- NTFY_AUTH_FILE=/var/lib/ntfy/auth.db # 授权信息(如用户认证数据)的存储文件路径
- NTFY_AUTH_DEFAULT_ACCESS=deny-all # 默认访问权限:禁止所有未授权访问
- NTFY_BEHIND_PROXY=true # 标识ntfy服务运行在代理服务器后方(如Nginx等)
- NTFY_ATTACHMENT_CACHE_DIR=/var/lib/ntfy/attachments # 附件资源的缓存存储目录
- NTFY_ENABLE_LOGIN=true # 启用登录功能,允许用户通过账号密码授权访问
- NTFY_WEB_PUSH_PUBLIC_KEY=${NTFY_WEB_PUSH_PUBLIC_KEY} # Web推送功能的公钥(用于消息加密)
- NTFY_WEB_PUSH_PRIVATE_KEY=${NTFY_WEB_PUSH_PRIVATE_KEY} # Web推送功能的私钥(与公钥配对,用于解密/签名)
- NTFY_WEB_PUSH_FILE=/var/lib/ntfy/webpush.db # Web推送相关的数据存储文件路径
- NTFY_WEB_PUSH_EMAIL_ADDRESS=${NTFY_WEB_PUSH_EMAIL_ADDRESS} # Web推送关联的邮件地址(用于通知等场景)
- NTFY_ENABLE_SIGNUP=false # 禁用用户注册功能,阻止新用户自主创建账号
- NTFY_ENABLE_METRICS=true # 启用指标收集功能,用于监控和分析服务运行状态
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
+130
View File
@@ -7,3 +7,133 @@
> 1. 该脚本只是一个简单的示例,不保证任何的稳定性。
> 2. 请根据自己的需求进行修改。
## 项目结构
项目包含多个可独立部署的服务栈,每个服务栈位于单独的目录中,包含以下核心文件:
- `stack.yml` / `compose.yml` - Docker Compose 配置文件
- `env.cfg` - 环境变量配置文件(包含敏感信息,已 gitignore)
- `env.cfg.example` - 环境变量配置模板(不含敏感信息)
- `readme.md` - 服务说明文档(可选)
## 使用示例
### Gitea 部署实践事例
**场景**:要部署 Gitea 服务,但希望保持项目目录的原始配置不变,同时在独立的目录中进行定制化部署。
**1. 创建独立部署目录**
```bash
# 假设当前在 deploy.stack 项目根目录
# 创建独立的部署目录
mkdir -p ~/mydeploy
cd ~/mydeploy
# 复制项目中的 Gitea 配置(相对路径或绝对路径)
cp -r ../deploy.stack/gitea .
# 或者使用绝对路径
# cp -r /path/to/your/deploy.stack/gitea .
# 进入 Gitea 目录
cd gitea
```
**2. 准备环境变量**
```bash
# 复制环境变量模板
cp env.cfg.example env.cfg
# 编辑环境变量(根据实际需求修改)
vim env.cfg
```
**3. 修改配置(在 mydeploy 目录中)**
**修改端口映射**Gitea 默认使用 3000 端口,可能与 Grafana 冲突):
```yaml
# 在 lky-prod.yml 或 rpi-prod.yml 中添加端口映射
ports:
- "3001:3000" # 将容器内 3000 端口映射到宿主机 3001 端口
```
**调整数据卷路径**(根据实际存储位置):
```bash
# 在 env.cfg 中修改 Volumes_Path
Volumes_Path=/data/volumes/gitea
```
**更新镜像版本**
```bash
# 在 env.cfg 中修改镜像版本
IMAGE_TAG_VER=1.25.2
IMAGE_TAG=gitea/gitea:${IMAGE_TAG_VER}-rootless
```
**选择环境配置文件**
- `lky-prod.yml` - 用于生产环境(Linux 服务器)
- `rpi-prod.yml` - 用于树莓派环境
- 根据实际环境选择合适的 compose 文件
**4. 创建数据目录**
```bash
# 根据 env.cfg 中的 Volumes_Path 创建目录
mkdir -pv /data/volumes/gitea/{data,config,logs}
# 设置正确的权限(Gitea 使用 UID 1000
chown -R 1000:1000 /data/volumes/gitea/
```
**5. 部署服务**
```bash
# 拉取镜像(根据选择的配置文件)
docker compose -p gitea --env-file ./env.cfg -f ./lky-prod.yml pull
# 或使用 rpi-prod.yml
# docker compose -p gitea --env-file ./env.cfg -f ./rpi-prod.yml pull
# 启动服务
docker compose -p gitea --env-file ./env.cfg -f ./lky-prod.yml up -d
# 查看日志
docker compose -p gitea --env-file ./env.cfg -f ./lky-prod.yml logs -f
# 查看服务状态
docker compose -p gitea --env-file ./env.cfg -f ./lky-prod.yml ps
# 停止服务
docker compose -p gitea --env-file ./env.cfg -f ./lky-prod.yml down
```
**6. 优势**
- **配置隔离**:在 `mydeploy` 目录中的修改不会影响原始项目配置
- **版本管理**:可以针对不同环境维护不同的配置版本
- **快速回滚**:如需恢复原始配置,只需删除 `mydeploy` 目录并重新部署
- **测试验证**:可以在 `mydeploy` 中测试新配置,确认无误后再应用到生产环境
**7. 注意事项**
- **配置兼容性**:确保 `mydeploy` 目录中的配置文件与原始项目保持兼容,特别是 compose 文件版本
- **定期同步**:关注原始项目的更新(安全补丁、新功能等),适时同步到 `mydeploy` 目录
- **配置备份**:定期备份 `mydeploy` 目录中的自定义配置
- **敏感信息安全**`env.cfg` 包含密码、密钥等敏感信息,确保文件权限为 600
```bash
chmod 600 env.cfg
```
- **版本控制**:建议将 `mydeploy` 目录纳入版本控制(排除 `env.cfg`
- **多环境管理**:可以为不同环境创建不同的 `mydeploy` 目录,如 `mydeploy-prod``mydeploy-dev`
**8. 通用模式**
这种 "mydeploy" 模式不仅适用于 Gitea,也适用于项目中的其他服务:
```bash
# 部署 Grafana
cp -r ../deploy.stack/grafana ~/mydeploy/grafana
# 部署 Memos
cp -r ../deploy.stack/memos ~/mydeploy/memos
# 部署 Portainer
cp -r ../deploy.stack/portainer-ce ~/mydeploy/portainer-ce
# 部署 Traefik
cp -r ../deploy.stack/traefik ~/mydeploy/traefik
```
每个服务都可以在独立的目录中进行定制化配置和测试,实现真正的配置隔离和环境管理。
+1
View File
@@ -1,3 +1,4 @@
# RUN:: docker compose -p prod-dbs --env-file ./victoriametrics/env.cfg -f ./victoriametrics/compose.yml up -d
services:
victoriametrics: