Установка Nextcloud AIO с Let's Encx
Categories:
Предварительные требования
- Сервер с Ubuntu/Debian
- Docker и Docker Compose установлены
- Домен, указывающий A-записью на IP сервера
- Порт 80 открыт на файерволе (для HTTP-01 проверки Let’s Encrypt)
Этап 1: Подготовка Nginx для валидации Let’s Encrypt
Первым делом настроим Nginx только на порт 80, чтобы certbot мог пройти HTTP-01 проверку.
1.1 Создайте временную конфигурацию Nginx
nano /etc/nginx/sites-available/yoursite.com
server {
listen 80;
server_name yoursite.com;
# Корень для Let's Encrypt валидации
root /var/www/html;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 200 "Domain is ready for Nextcloud AIO setup";
}
}
1.2 Активируйте и проверьте
# Создайте символическую ссылку
ln -s /etc/nginx/sites-available/yoursite.com /etc/nginx/sites-enabled/yoursite.com
# Проверьте конфигурацию
nginx -t
# Перезагрузите Nginx
systemctl reload nginx
1.3 Создайте директорию для сертификатов
mkdir -p /etc/nginx/ssl/yoursite.com
Этап 2: Получение Let’s Encrypt сертификатов до установки Nextcloud
2.1 Установите certbot
apt update
apt install -y certbot
2.2 Выпустите сертификаты (варианты)
Вариант A: Certbot в ручном режиме (рекомендуется для точного контроля)
certbot certonly --webroot -w /var/www/html -d yoursite.com --non-interactive --agree-tos --email your@email.com
Вариант B: С плагином nginx (автоматически изменит конфиг)
apt install -y python3-certbot-nginx
certbot --nginx -d yoursite.com --non-interactive --agree-tos --email your@email.com
Вариант C: Если нужно и для основного домена и для www
certbot certonly --webroot -w /var/www/html -d yoursite.com -d www.yoursite.com --non-interactive --agree-tos --email your@email.com
2.3 Проверьте, что сертификаты созданы
ls -la /etc/letsencrypt/live/yoursite.com/
Этап 3: Обновление конфигурации Nginx для Nextcloud AIO
3.1 Замените конфиг на полноценный
nano /etc/nginx/sites-available/yoursite.com
Замените содержимое на:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# HTTP → HTTPS редирект
server {
listen 80;
server_name yoursite.com;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$server_name$request_uri;
}
}
# Основной HTTPS сервер
server {
listen 443 ssl http2;
server_name yoursite.com;
# Let's Encrypt сертификаты
ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem;
# Современные настройки SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Заголовки безопасности
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
# Максимальный размер загрузки
client_max_body_size 0;
client_body_timeout 3600s;
client_header_timeout 3600s;
# Проксирование к Apache Nextcloud AIO
location / {
proxy_pass http://127.0.0.1:11000;
proxy_http_version 1.1;
# Прокси-заголовки
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# WebSocket поддержка (для Talk, Notify Push)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Таймауты
proxy_read_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
# Буферизация
proxy_buffering off;
proxy_request_buffering off;
}
}
3.2 Проверьте и перезагрузите
nginx -t && systemctl reload nginx
Этап 4: Настройка Docker Compose для Nextcloud AIO
4.1 Создайте директорию и конфигурацию
mkdir -p /opt/nextcloud-aio
cd /opt/nextcloud-aio
nano docker-compose.yml
name: nextcloud-aio
services:
nextcloud-aio-mastercontainer:
image: ghcr.io/nextcloud-releases/all-in-one:latest
init: true
restart: always
container_name: nextcloud-aio-mastercontainer
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: bridge
ports:
- "127.0.0.1:8080:8080" # AIO интерфейс только локально
environment:
APACHE_PORT: 11000
APACHE_IP_BINDING: 127.0.0.1
volumes:
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer
4.2 Запустите мастер-контейнер
docker compose up -d
4.3 Проверьте логи
docker logs nextcloud-aio-mastercontainer --tail 30
Должны увидеть:
Initial startup of Nextcloud All-in-One complete!
You should be able to open the Nextcloud AIO Interface now on port 8080 of this server!
Этап 5: Инициализация Nextcloud AIO
5.1 Подключитесь к AIO интерфейсу через SSH-туннель
С вашего локального компьютера:
ssh -L 8080:127.0.0.1:8080 root@<IP-вашего-сервера>
Откройте в браузере: https://localhost:8080
5.2 Сохраните пароль AIO
На открывшейся странице скопируйте passphrase (12 случайных слов). Это пароль для входа в панель управления AIO.
Нажмите “Open Nextcloud AIO login” и войдите.
5.3 Введите домен
- В поле “Domain” введите:
yoursite.com - Нажмите Submit
5.4 Дождитесь проверки домена
Теперь у вас настоящий Let’s Encrypt сертификат, и проверка должна пройти успешно с первого раза!
Если вдруг не пройдёт — используйте SKIP_DOMAIN_VALIDATION: true в docker-compose.yml.
5.5 Сохраните пароль администратора Nextcloud
После проверки появится блок с учётными данными:
Username: admin
Password: **********
Скачайте файл с паролем или скопируйте его.
5.6 Запустите контейнеры
Нажмите “Start containers” и дождитесь, пока все контейнеры перейдут в статус Running (5-15 минут).
Этап 6: Автонастройка Let’s Encrypt для автообновления
6.1 Настройте автообновление сертификатов
Создайте systemd-таймер или cron-задачу:
# Создайте скрипт для обновления
nano /usr/local/bin/renew-cert.sh
#!/bin/bash
certbot renew --quiet --post-hook "systemctl reload nginx"
chmod +x /usr/local/bin/renew-cert.sh
6.2 Добавьте в cron
crontab -e
Добавьте:
0 3 * * * /usr/local/bin/renew-cert.sh
Этап 7: Финальная проверка
7.1 Проверьте, что всё работает
# Все контейнеры должны быть Running
docker ps --filter "name=nextcloud-aio"
# Проверьте доступность
curl -I https://yoursite.com
7.2 Войдите в Nextcloud
Откройте в браузере: https://yoursite.com
Логин: admin
Пароль: из шага 5.5
Восстановление пароля администратора Nextcloud (если потеряли)
docker exec -it --user www-data nextcloud-aio-nextcloud php occ user:resetpassword admin
Дополнительные рекомендации
Бэкап сертификатов
tar -czf /root/ssl-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
Мониторинг сертификатов
# Проверить срок действия
certbot certificates
Обновление Nextcloud AIO
Всё обновляется через AIO интерфейс автоматически, включая все контейнеры.