====== Полное руководство по развертыванию 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