Confluence Docker 一键部署项目
目标:通过脚本和 Docker Compose 部署一个 HTTP 访问的 Confluence 10.2.11 LTS,并保证重复执行部署不会破坏已有数据。
github地址:https://github.com/MyUseSkills/ConfluenceDockerDeploy
快速开始
这是一个 Confluence Docker one-click deployment 项目。部署脚本是 idempotent 的:重复运行 scripts/deploy.sh 会检查环境、补齐缺失目录、渲染 Nginx 配置并执行 docker compose up -d,但 does not overwrite existing data。
目录结构
confluence-docker-deploy/
├── .env.example
├── docker-compose.yml
├── README.md
├── scripts/
│ ├── backup.sh
│ ├── deploy.sh
│ └── status.sh
├── templates/
│ └── nginx/
│ └── confluence.conf.template
└── tests/
└── test_project_structure.ps1
首次部署:
cd confluence-docker-deploy
chmod +x scripts/*.sh
CONFLUENCE_DOMAIN=wiki.example.com ./scripts/deploy.sh
如果不传 CONFLUENCE_DOMAIN,脚本会从 .env.example 生成 .env,默认域名是 wiki.example.com。生产环境请把它改成真实域名后再开放访问。
部署完成后访问:
http://wiki.example.com
脚本做了什么
scripts/deploy.sh 按顺序执行:
- 检查
docker、docker compose、openssl、sed - 如果
.env不存在,从.env.example创建,并自动生成 PostgreSQL 密码 - 如果
.env已存在,保留不改 - 创建
data/、backups/、logs/等目录 - 渲染
data/nginx/conf.d/confluence.conf - 拉取镜像
- 执行
docker compose up -d
部署日志写入:
logs/deploy-YYYY-MM-DD-HHMMSS.log
幂等和数据保护
重复运行部署脚本时:
| 对象 | 行为 |
|---|---|
.env |
已存在则不覆盖 |
data/confluence-home |
已存在则保留 |
data/postgres-data |
已存在则保留 |
| 容器 | 用 docker compose up -d 对齐配置 |
核心数据都在 data/ 下:
data/confluence-home/
data/postgres-data/
data/nginx/
不要删除这些目录。已有数据的环境再次一键部署,不会清空 PostgreSQL 数据,也不会删除 Confluence 附件和配置。
配置项
主要配置在 .env:
| 变量 | 默认值 | 说明 |
|---|---|---|
CONFLUENCE_IMAGE |
atlassian/confluence:10.2.11 |
Confluence LTS 镜像 |
POSTGRES_IMAGE |
postgres:17 |
PostgreSQL 镜像 |
NGINX_IMAGE |
nginx:stable-alpine |
Nginx 镜像 |
CONFLUENCE_DOMAIN |
wiki.example.com |
Confluence 访问域名 |
POSTGRES_PASSWORD |
自动生成 | PostgreSQL 密码 |
JVM_MAXIMUM_MEMORY |
6144m |
Confluence JVM 最大内存 |
修改 .env 后重新运行:
./scripts/deploy.sh
看到如下信息说明部署完成:
[2026-05-29 09:21:07] Step 7/7: Starting services
Network confluence_confluence-net Creating
Network confluence_confluence-net Created
Container confluence-postgres Creating
Container confluence-postgres Created
Container confluence Creating
Container confluence Created
Container confluence-nginx Creating
Container confluence-nginx Created
Container confluence-postgres Starting
Container confluence-postgres Started
Container confluence-postgres Waiting
Container confluence-postgres Healthy
Container confluence Starting
Container confluence Started
Container confluence-nginx Starting
Container confluence-nginx Started
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
confluence atlassian/confluence:10.2.11 "/usr/bin/tini -- /e…" confluence 12 seconds ago Up Less than a second (health: starting) 127.0.0.1:8090->8090/tcp, 8091/tcp
confluence-nginx nginx:stable-alpine "/docker-entrypoint.…" nginx 12 seconds ago Up Less than a second 0.0.0.0:80->80/tcp, :::80->80/tcp
confluence-postgres postgres:17 "docker-entrypoint.s…" postgres 12 seconds ago Up 11 seconds (healthy) 5432/tcp
[2026-05-29 09:21:21] Deployment finished
[2026-05-29 09:21:21] Open http://wiki.example.com to finish Confluence setup
日常运维
查看状态:
./scripts/status.sh
查看容器:
docker compose ps
查看日志:
docker logs -f confluence
docker logs -f confluence-postgres
docker logs -f confluence-nginx
重启 Confluence:
docker compose restart confluence
备份
执行冷备份:
./scripts/backup.sh
备份脚本会:
- 停止 Confluence 容器
- 使用
pg_dump导出 PostgreSQL - 打包
data/confluence-home、data/nginx、.env和docker-compose.yml - 重启 Confluence
- 按
BACKUP_RETENTION_DAYS清理旧备份
备份输出在:
backups/YYYY-MM-DD-HHMMSS/
建议把 backups/ 同步到另一台机器或对象存储。
升级
升级前先备份:
./scripts/backup.sh
然后修改 .env 中的 CONFLUENCE_IMAGE,例如:
CONFLUENCE_IMAGE=atlassian/confluence:10.2.x
重新部署:
./scripts/deploy.sh
不要只回滚镜像。Confluence 升级可能修改数据库 schema;如果升级失败,需要同时恢复数据库和 data/confluence-home。
自检
在 Windows 工作站上可以运行项目结构检查:
powershell -ExecutionPolicy Bypass -File .\tests\test_project_structure.ps1
该检查只做静态验证,不会启动 Docker,也不会改动数据。