Triển khai Wiki.js với Docker: Hướng dẫn toàn diện
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
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 -
Cách ly mạng
services: db: networks: wikinet: aliases: - database.internal
Cấu hình SSL
environment: LETSENCRYPT_DOMAIN: wiki.example.com LETSENCRYPT_EMAIL: [email protected] SSL_ACTIVE: "1"
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.