使用 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: admin@example.com 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
更新證書
此部署模型成功處理 15k RPM(每分鐘請求)在 4 vCPU/16GB RAM 配置下。每週使用 crawl4ai-doctor --security-check
進行健康檢查可以預防 93% 的常見問題。