使用 Docker 部署 Wiki.js:全面指南

通过 Docker 自托管 Wiki.js 的全面指南,涵盖优化的部署策略、安全加固和生产最佳实践。

推广链接说明 部分链接为推广链接。通过这些链接购买时,我们可能获得佣金。下单前请向厂商核实最新价格与优惠。

本文目录
  1. 核心基础设施要求
  2. 生产级 Docker 部署
  3. 安全加固检查清单
  4. 性能优化
  5. 维护操作

使用 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  

安全加固检查清单

  1. 秘密管理

    • 将凭据存储在加密的 Docker 秘密中
    echo "wikijsrocks" | docker secret create db_password -  
    
  2. 网络隔离

    services:  
      db:  
        networks:  
          wikinet:  
            aliases:  
              - database.internal  
    
  3. SSL 配置

    environment:  
      LETSENCRYPT_DOMAIN: wiki.example.com  
      LETSENCRYPT_EMAIL: [email protected]  
      SSL_ACTIVE: "1"  
    
  4. 资源限制

    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% 的常见问题。

更多 VPS

查看推荐厂商,按地区继续浏览 VPS 指南。