====== Полное руководство по развертыванию Wiki.js с HTTPS через Nginx (самоподписанные сертификаты) ====== ===== 1. Подготовка сервера ===== ==== 1.1. Обновление системы ==== sudo apt update && sudo apt dist-upgrade -y sudo reboot ==== 1.2. Установка зависимостей ==== sudo apt install -y docker docker-compose nginx openssl ===== 2. Настройка Wiki.js ===== ==== 2.1. Создание секрета для БД ==== sudo mkdir -p /etc/wiki sudo openssl rand -base64 32 > /etc/wiki/.db-secret sudo chmod 600 /etc/wiki/.db-secret ==== 2.2. Создание Docker-сети и тома ==== docker network create wikinet docker volume create pgdata ==== 2.3. Запуск контейнеров Wiki.js ==== docker run -d --name=db \ -e POSTGRES_DB=wiki \ -e POSTGRES_USER=wiki \ -e POSTGRES_PASSWORD_FILE=/etc/wiki/.db-secret \ -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro \ -v pgdata:/var/lib/postgresql/data \ --restart=unless-stopped \ --network=wikinet \ postgres:17-alpine docker run -d --name=wiki \ -e DB_TYPE=postgres \ -e DB_HOST=db \ -e DB_PORT=5432 \ -e DB_PASS_FILE=/etc/wiki/.db-secret \ -v /etc/wiki/.db-secret:/etc/wiki/.db-secret:ro \ -e DB_USER=wiki \ -e DB_NAME=wiki \ -e UPGRADE_COMPANION=1 \ --restart=unless-stopped \ --network=wikinet \ ghcr.io/requarks/wiki:2 docker run -d --name=wiki-update-companion \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --restart=unless-stopped \ --network=wikinet \ ghcr.io/requarks/wiki-update-companion:latest ===== 3. Настройка Nginx + HTTPS ===== ==== 3.1. Генерация SSL-сертификатов ==== sudo mkdir -p /etc/nginx/ssl/wiki.test sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/wiki.test/key.pem \ -out /etc/nginx/ssl/wiki.test/cert.pem \ -subj "/CN=wiki.test" \ -addext "subjectAltName=DNS:wiki.test" sudo chmod 644 /etc/nginx/ssl/wiki.test/* ==== 3.2. Создание конфига Nginx ==== sudo tee /etc/nginx/conf.d/wiki.test.conf << 'EOF' server { listen 80; server_name wiki.test; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name wiki.test; ssl_certificate /etc/nginx/ssl/wiki.test/cert.pem; ssl_certificate_key /etc/nginx/ssl/wiki.test/key.pem; location / { proxy_pass http://wiki:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } EOF ==== 3.3. Запуск Nginx в Docker ==== docker run -d --name=nginx-proxy \ -p 80:80 \ -p 443:443 \ -v /etc/nginx/conf.d:/etc/nginx/conf.d \ -v /etc/nginx/ssl:/etc/nginx/ssl \ --network=wikinet \ --restart=unless-stopped \ nginx:alpine ===== 4. Проверка работы ===== ==== 4.1. Добавление домена в hosts (если нужно) ==== echo "127.0.0.1 wiki.test" | sudo tee -a /etc/hosts ==== 4.2. Проверка доступности ==== curl -vk https://wiki.test ==== 4.3. Проверка логов ==== docker logs nginx-proxy docker logs wiki ===== 5. Дополнительные настройки ===== ==== 5.1. Открытие портов в Firewall (если используется) ==== sudo ufw allow 80/tcp sudo ufw allow 443/tcp ==== 5.2. Настройка автоматического обновления сертификатов ==== sudo crontab -e Добавить строку: @monthly openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/wiki.test/key.pem -out /etc/nginx/ssl/wiki.test/cert.pem -subj "/CN=wiki.test" -addext "subjectAltName=DNS:wiki.test" && docker restart nginx-proxy ===== 7. Готово! ===== ---- >Wiki.js теперь доступен по: >HTTP: http://wiki.test (автоматически перенаправляет на HTTPS) >HTTPS: https://wiki.test ---- >Для доступа с других устройств добавьте запись в их файл `hosts`: > wiki.test