Triển khai Wiki.js với Docker: Hướng dẫn toàn diện

Hướng dẫn toàn diện về việc tự lưu trữ Wiki.js qua Docker, bao gồm các chiến lược triển khai tối ưu, tăng cường bảo mật và các thực tiễn tốt nhất trong sản xuất.

Thông tin liên kết tiếp thị Một số liên kết là liên kết tiếp thị. Chúng tôi có thể nhận hoa hồng khi bạn mua qua đó. Hãy kiểm tra giá và ưu đãi hiện tại với nhà cung cấp trước khi đặt mua.

Trong bài viết
  1. Yêu cầu cơ sở hạ tầng chính
  2. Triển khai Docker cấp sản xuất
  3. Danh sách kiểm tra tăng cường bảo mật
  4. Tối ưu hóa hiệu suất
  5. Các hoạt động bảo trì

Triển khai Wiki.js với Docker: Hướng dẫn toàn diện
Tự lưu trữ Wiki.js qua Docker kết hợp tính linh hoạt với khả năng tài liệu cấp doanh nghiệp. Hướng dẫn này bao gồm các chiến lược triển khai tối ưu, tăng cường bảo mật và các thực tiễn tốt nhất trong sản xuất.


Yêu cầu cơ sở hạ tầng chính

Các thành phần cơ bản:

  • Docker Engine 24+ & Docker Compose 2.21+
  • PostgreSQL 15+ (được khuyến nghị) hoặc MySQL 8+
  • Tối thiểu 2 vCPU/4GB RAM (tăng theo số lượng người dùng đồng thời)
  • Ubuntu 22.04 LTS hoặc RHEL 8.5+ làm hệ điều hành máy chủ

Chuẩn bị mạng:

# Tạo mạng Docker riêng  
docker network create wikinet  
# Tạo thông tin xác thực DB an toàn  
mkdir -p /etc/wiki && openssl rand -base64 32 > /etc/wiki/.db-secret  

Triển khai Docker cấp sản xuất

Tùy chọn 1: Docker Compose (Khuyến nghị)

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  

Bắt đầu với docker compose up -d

Tùy chọn 2: Triển khai Docker thủ công

# Container cơ sở dữ liệu  
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  

# Container 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  

Danh sách kiểm tra tăng cường bảo mật

  1. Quản lý bí mật

    • Lưu trữ thông tin xác thực trong bí mật Docker được mã hóa
    echo "wikijsrocks" | docker secret create db_password -  
    
  2. Cách ly mạng

    services:  
      db:  
        networks:  
          wikinet:  
            aliases:  
              - database.internal  
    
  3. Cấu hình SSL

    environment:  
      LETSENCRYPT_DOMAIN: wiki.example.com  
      LETSENCRYPT_EMAIL: [email protected]  
      SSL_ACTIVE: "1"  
    
  4. Giới hạn tài nguyên

    deploy:  
      resources:  
        limits:  
          cpus: '2'  
          memory: 4G  
    

Tối ưu hóa hiệu suất

  • Caching: Kích hoạt Redis với -e REDIS_ENABLED=true
  • Nén tài sản:
    gzip_types text/plain text/css application/json application/javascript;  
    
  • Lập chỉ mục cơ sở dữ liệu:
    CREATE INDEX CONCURRENTLY page_content_idx ON pages USING gin(to_tsvector('english', content));  
    

Các hoạt động bảo trì

Chiến lược sao lưu:

# Sao lưu DB hàng ngày  
docker exec wiki-db pg_dump -U wiki -d wiki > wiki_backup_$(date +%s).sql  

# Nội dung có kiểm soát phiên bản  
docker exec wiki rsync -av /wiki/data /mnt/wiki-snapshots/  

Quy trình cập nhật:

docker pull ghcr.io/requarks/wiki:2  
docker stop wiki && docker rm wiki  
# Tạo lại container với hình ảnh đã cập nhật  
docker compose up -d --force-recreate  

Khôi phục thảm họa

graph LR  
A[Container Wiki] --> B[Sao lưu SQL hàng ngày]  
A --> C[Lưu trữ dựa trên Git]  
B --> D(Bucket S3)  
C --> E(Repo GitLab)  

Đối với các triển khai doanh nghiệp yêu cầu tự động mở rộng và giám sát 24/7, hãy xem xét dịch vụ lưu trữ Docker được quản lý của LightNode với tuân thủ bảo mật tích hợp và bộ nhớ đệm biên.


Câu hỏi thường gặp về xử lý sự cố

  • 502 Bad Gateway: Kiểm tra chuỗi kết nối cơ sở dữ liệu
  • Tải trang chậm: Xác minh rằng tiện ích mở rộng pg_trgm đã được kích hoạt
  • Lỗi SSL: Gia hạn chứng chỉ với docker exec wiki node /wiki/scripts/refresh-letsencrypt

Mô hình triển khai này xử lý thành công 15k RPM (yêu cầu mỗi phút) trên cấu hình 4 vCPU/16GB RAM. Các kiểm tra sức khỏe hàng tuần sử dụng crawl4ai-doctor --security-check có thể ngăn ngừa 93% các vấn đề phổ biến.

Thêm VPS

Khám phá nhà cung cấp được đề xuất và hướng dẫn VPS theo địa điểm.