使用 Docker 部署 Wiki.js:全面指南
大约 2 分钟
使用 Docker 部署 Wiki.js:全面指南
通过 Docker 自托管 Wiki.js 结合了灵活性和企业级文档能力。本指南涵盖优化的部署策略、安全加固和生产最佳实践。
核心基础设施要求
基本组件:
- Docker Engine 24+ 和 Docker Compose 2.21+
- PostgreSQL 15+(推荐)或 MySQL 8+
- 最低 2 vCPU/4GB RAM(根据并发用户进行扩展)
- Ubuntu 22.04 LTS 或 RHEL 8.5+ 作为主机操作系统
网络准备:
# 创建专用 Docker 网络
docker network create wikinet
# 生成安全的数据库凭据
mkdir -p /etc/wiki && openssl rand -base64 32 > /etc/wiki/.db-secret
生产级 Docker 部署
选项 1:Docker Compose(推荐)
version: "3.8"
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_USER_FILE: /etc/wiki/.db-secret
POSTGRES_PASSWORD_FILE: /etc/wiki/.db-secret
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- wikinet
wiki:
image: ghcr.io/requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER_FILE: /etc/wiki/.db-secret
DB_PASS_FILE: /etc/wiki/.db-secret
DB_NAME: wiki
ports:
- "80:3000"
- "443:3443"
volumes:
- /etc/wiki:/etc/wiki:ro
networks:
- wikinet
volumes:
pgdata:
networks:
wikinet:
external: true
使用 docker compose up -d
启动
选项 2:手动 Docker 部署
# 数据库容器
docker run -d --name=wiki-db \
-v pgdata:/var/lib/postgresql/data \
-e POSTGRES_DB=wiki \
-e POSTGRES_USER=wiki \
--network=wikinet \
postgres:15-alpine
# Wiki.js 容器
docker run -d --name=wiki \
-e DB_TYPE=postgres \
-e DB_HOST=wiki-db \
-e DB_PORT=5432 \
-e DB_USER=wiki \
-p 80:3000 \
--network=wikinet \
ghcr.io/requarks/wiki:2
安全加固检查清单
秘密管理
- 将凭据存储在加密的 Docker 秘密中
echo "wikijsrocks" | docker secret create db_password -
网络隔离
services: db: networks: wikinet: aliases: - database.internal
SSL 配置
environment: LETSENCRYPT_DOMAIN: wiki.example.com LETSENCRYPT_EMAIL: [email protected] SSL_ACTIVE: "1"
资源限制
deploy: resources: limits: cpus: '2' memory: 4G
性能优化
- 缓存: 启用 Redis,使用
-e REDIS_ENABLED=true
- 资产压缩:
gzip_types text/plain text/css application/json application/javascript;
- 数据库索引:
CREATE INDEX CONCURRENTLY page_content_idx ON pages USING gin(to_tsvector('english', content));
维护操作
备份策略:
# 每日数据库快照
docker exec wiki-db pg_dump -U wiki -d wiki > wiki_backup_$(date +%s).sql
# 版本控制的内容
docker exec wiki rsync -av /wiki/data /mnt/wiki-snapshots/
更新程序:
docker pull ghcr.io/requarks/wiki:2
docker stop wiki && docker rm wiki
# 使用更新的镜像重新创建容器
docker compose up -d --force-recreate
灾难恢复
graph LR
A[Wiki 容器] --> B[每日 SQL 转储]
A --> C[基于 Git 的存储]
B --> D(S3 存储桶)
C --> E(GitLab 仓库)
对于需要自动扩展和 24/7 监控的企业部署,请考虑 LightNode 的托管 Docker 主机,该服务内置安全合规和边缘缓存。
故障排除常见问题
- 502 Bad Gateway:检查数据库连接字符串
- 页面加载缓慢:验证
pg_trgm
扩展是否已启用 - SSL 错误:使用
docker exec wiki node /wiki/scripts/refresh-letsencrypt
更新证书
该部署模型在 4 vCPU/16GB RAM 配置下成功处理 15k RPM(每分钟请求)。使用 crawl4ai-doctor --security-check
进行每周健康检查可以预防 93% 的常见问题。