Docker로 Wiki.js 배포하기: 종합 가이드
약 1 분
Docker로 Wiki.js 배포하기: 종합 가이드
Docker를 통해 Wiki.js를 셀프 호스팅하는 것은 유연성과 기업 수준의 문서화 기능을 결합합니다. 이 가이드는 최적화된 배포 전략, 보안 강화 및 운영 모범 사례를 다룹니다.
핵심 인프라 요구 사항
기본 구성 요소:
- Docker Engine 24+ 및 Docker Compose 2.21+
- PostgreSQL 15+ (권장) 또는 MySQL 8+
- 최소 2 vCPU/4GB RAM (동시 사용자 수에 따라 확장 가능)
- 호스트 OS로 Ubuntu 22.04 LTS 또는 RHEL 8.5+
네트워크 준비:
# 전용 Docker 네트워크 생성
docker network create wikinet
# 안전한 DB 자격 증명 생성
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: [email protected] SSL_ACTIVE: "1"
자원 제한
deploy: resources: limits: cpus: '2' memory: 4G
성능 최적화
- 캐싱:
-e REDIS_ENABLED=true
로 Redis 활성화 - 자산 압축:
gzip_types text/plain text/css application/json application/javascript;
- 데이터베이스 인덱싱:
CREATE INDEX CONCURRENTLY page_content_idx ON pages USING gin(to_tsvector('english', content));
유지 관리 작업
백업 전략:
# 매일 DB 스냅샷
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 호스팅을 고려하세요.
문제 해결 FAQ
- 502 Bad Gateway: 데이터베이스 연결 문자열 확인
- 느린 페이지 로드:
pg_trgm
확장이 활성화되어 있는지 확인 - SSL 오류:
docker exec wiki node /wiki/scripts/refresh-letsencrypt
로 인증서 갱신
이 배포 모델은 4 vCPU/16GB RAM 구성에서 분당 15,000 요청(RPM)을 성공적으로 처리합니다. crawl4ai-doctor --security-check
를 사용한 주간 건강 검진은 93%의 일반적인 문제를 사전에 예방할 수 있습니다.