Wdrażanie Wiki.js z Dockerem: Kompleksowy przewodnik
Wdrażanie Wiki.js z Dockerem: Kompleksowy przewodnik
Samodzielne hostowanie Wiki.js za pomocą Dockera łączy elastyczność z dokumentacją na poziomie przedsiębiorstwa. Ten przewodnik obejmuje zoptymalizowane strategie wdrażania, wzmocnienie bezpieczeństwa i najlepsze praktyki produkcyjne.
Wymagania dotyczące podstawowej infrastruktury
Podstawowe komponenty:
- Docker Engine 24+ i Docker Compose 2.21+
- PostgreSQL 15+ (zalecane) lub MySQL 8+
- Minimum 2 vCPU/4GB RAM (skaluje się z równoczesnymi użytkownikami)
- Ubuntu 22.04 LTS lub RHEL 8.5+ jako system operacyjny hosta
Przygotowanie sieci:
# Utwórz dedykowaną sieć Docker
docker network create wikinet
# Wygeneruj bezpieczne dane uwierzytelniające do bazy danych
mkdir -p /etc/wiki && openssl rand -base64 32 > /etc/wiki/.db-secret
Wdrażanie Dockera na poziomie produkcyjnym
Opcja 1: Docker Compose (zalecane)
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
Rozpocznij od docker compose up -d
Opcja 2: Ręczne wdrażanie Dockera
# Kontener bazy danych
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
# Kontener 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
Lista kontrolna wzmocnienia bezpieczeństwa
Zarządzanie sekretami
- Przechowuj dane uwierzytelniające w zaszyfrowanych sekretach Dockera
echo "wikijsrocks" | docker secret create db_password -
Izolacja sieci
services: db: networks: wikinet: aliases: - database.internal
Konfiguracja SSL
environment: LETSENCRYPT_DOMAIN: wiki.example.com LETSENCRYPT_EMAIL: [email protected] SSL_ACTIVE: "1"
Limity zasobów
deploy: resources: limits: cpus: '2' memory: 4G
Optymalizacja wydajności
- Cache: Włącz Redis z
-e REDIS_ENABLED=true
- Kompresja zasobów:
gzip_types text/plain text/css application/json application/javascript;
- Indeksowanie bazy danych:
CREATE INDEX CONCURRENTLY page_content_idx ON pages USING gin(to_tsvector('english', content));
Operacje konserwacyjne
Strategia kopii zapasowej:
# Codzienny zrzut bazy danych
docker exec wiki-db pg_dump -U wiki -d wiki > wiki_backup_$(date +%s).sql
# Treść kontrolowana wersjami
docker exec wiki rsync -av /wiki/data /mnt/wiki-snapshots/
Procedura aktualizacji:
docker pull ghcr.io/requarks/wiki:2
docker stop wiki && docker rm wiki
# Odtwórz kontener z zaktualizowanym obrazem
docker compose up -d --force-recreate
Odzyskiwanie po awarii
graph LR
A[Kontener Wiki] --> B[Codzienne zrzuty SQL]
A --> C[Przechowywanie oparte na Gicie]
B --> D(S3 Bucket)
C --> E(Repozytorium GitLab)
Dla wdrożeń przedsiębiorstw wymagających automatycznego skalowania i monitorowania 24/7, rozważ zarządzane hostowanie Dockera od LightNode z wbudowaną zgodnością z bezpieczeństwem i buforowaniem brzegowym.
FAQ dotyczące rozwiązywania problemów
- 502 Bad Gateway: Sprawdź ciągi połączeń z bazą danych
- Wolne ładowanie stron: Zweryfikuj, czy rozszerzenie
pg_trgm
jest włączone - Błędy SSL: Odnów certyfikaty za pomocą
docker exec wiki node /wiki/scripts/refresh-letsencrypt
Ten model wdrożenia skutecznie obsługuje 15k RPM (żądań na minutę) na konfiguracjach 4 vCPU/16GB RAM. Cotygodniowe kontrole stanu za pomocą crawl4ai-doctor --security-check
mogą zapobiec 93% powszechnych problemów.