Установка Coolify: Развёртывание приложений с Self-Hosted PaaS
Установка Coolify, интеграция Docker и Git, развёртывание приложений, управление базами данных, SSL-сертификаты, переменные окружения и self-hosted PaaS как альтернатива Heroku/Netlify.
Установка Nextcloud с Docker, настройка Apache/Nginx, установка базы данных, SSL-сертификат, синхронизация файлов, магазин приложений и оптимизация производительности.
Nextcloud — это open-source, self-hosted альтернатива облачным хранилищам, таким как Google Drive, Dropbox и OneDrive. Помимо хранения и синхронизации файлов, он предлагает календарь, контакты, видеоконференции, редактирование документов и многое другое. В этом руководстве рассматривается установка Nextcloud с Docker Compose, настройка Nginx reverse proxy и оптимизация производительности.
Nextcloud — платформа для совместной работы, дающая вам полный контроль над данными:
mkdir -p /opt/nextcloud/{data,db,redis}
cd /opt/nextcloud
version: '3.8'
services:
db:
image: postgres:16-alpine
container_name: nextcloud-db
restart: unless-stopped
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: надёжный-пароль-бд
volumes:
- ./db:/var/lib/postgresql/data
networks:
- nextcloud-net
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
command: redis-server --requirepass пароль-redis
volumes:
- ./redis:/data
networks:
- nextcloud-net
app:
image: nextcloud:28-fpm-alpine
container_name: nextcloud-app
restart: unless-stopped
depends_on:
- db
- redis
environment:
POSTGRES_HOST: db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: надёжный-пароль-бд
NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: пароль-администратора
NEXTCLOUD_TRUSTED_DOMAINS: cloud.example.com
REDIS_HOST: redis
REDIS_HOST_PASSWORD: пароль-redis
PHP_MEMORY_LIMIT: 512M
PHP_UPLOAD_LIMIT: 10G
volumes:
- ./data:/var/www/html
networks:
- nextcloud-net
nginx:
image: nginx:alpine
container_name: nextcloud-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./data:/var/www/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/ssl/nextcloud:ro
depends_on:
- app
networks:
- nextcloud-net
cron:
image: nextcloud:28-fpm-alpine
container_name: nextcloud-cron
restart: unless-stopped
volumes:
- ./data:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
- redis
networks:
- nextcloud-net
networks:
nextcloud-net:
driver: bridge
# Сертификат Let's Encrypt с Certbot
apt install certbot -y
certbot certonly --standalone -d cloud.example.com
# Копирование сертификатов
mkdir -p /opt/nextcloud/ssl
cp /etc/letsencrypt/live/cloud.example.com/fullchain.pem /opt/nextcloud/ssl/
cp /etc/letsencrypt/live/cloud.example.com/privkey.pem /opt/nextcloud/ssl/
# Автоматическое обновление через cron
echo "0 3 * * * certbot renew --quiet && cp /etc/letsencrypt/live/cloud.example.com/*.pem /opt/nextcloud/ssl/ && docker restart nextcloud-nginx" | crontab -
cd /opt/nextcloud
docker compose up -d
# Следить за логами
docker compose logs -f app
# После установки откройте:
# https://cloud.example.com
Управляйте Nextcloud с помощью инструмента командной строки occ:
# Выполнение команды occ
docker exec -u www-data nextcloud-app php occ [команда]
# Проверка статуса системы
docker exec -u www-data nextcloud-app php occ status
# Переключение режима обслуживания
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
docker exec -u www-data nextcloud-app php occ maintenance:mode --off
# Добавление отсутствующих индексов
docker exec -u www-data nextcloud-app php occ db:add-missing-indices
# Сканирование файлов (обнаружение новых файлов)
docker exec -u www-data nextcloud-app php occ files:scan --all
# Очистка кэша
docker exec -u www-data nextcloud-app php occ cache:clear
# Список пользователей
docker exec -u www-data nextcloud-app php occ user:list
# Список доступных приложений
docker exec -u www-data nextcloud-app php occ app:list
# Установка приложений
docker exec -u www-data nextcloud-app php occ app:install calendar
docker exec -u www-data nextcloud-app php occ app:install contacts
docker exec -u www-data nextcloud-app php occ app:install talk
docker exec -u www-data nextcloud-app php occ app:install onlyoffice
Redis уже настроен в docker-compose.yml. Добавьте в конфигурацию Nextcloud:
docker exec -u www-data nextcloud-app php occ config:system:set redis host --value="redis"
docker exec -u www-data nextcloud-app php occ config:system:set redis port --value=6379 --type=integer
docker exec -u www-data nextcloud-app php occ config:system:set redis password --value="пароль-redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.distributed --value="\\OC\\Memcache\\Redis"
docker exec -u www-data nextcloud-app php occ config:system:set memcache.locking --value="\\OC\\Memcache\\Redis"
# Добавление доверенного домена
docker exec -u www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="cloud.example.com"
# Защита от брутфорса
docker exec -u www-data nextcloud-app php occ config:system:set auth.bruteforce.protection.enabled --value=true --type=boolean
# Принудительное использование 2FA
docker exec -u www-data nextcloud-app php occ twofactorauth:enforce --on
Рекомендуем использовать SSD-хранилище для Nextcloud на серверах REXE. Производительность NVMe SSD имеет критическое значение при передаче больших файлов.
Эта ошибка возникает, потому что домен, к которому вы обращаетесь, не находится в списке доверенных доменов Nextcloud. Добавьте домен командой: 'docker exec -u www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="cloud.example.com"'. Или отредактируйте /opt/nextcloud/data/config/config.php и добавьте его в массив trusted_domains.
Увеличьте значения PHP_UPLOAD_LIMIT и PHP_MEMORY_LIMIT в docker-compose.yml. Также обновите значение client_max_body_size в конфигурации Nginx. Установите fastcgi_read_timeout на 3600 или выше. Перезапустите контейнеры после внесения изменений.
Убедитесь, что кэширование Redis активно. Включите APCu. Добавьте индексы базы данных с помощью 'occ db:add-missing-indices'. Если используете PostgreSQL (быстрее MySQL), выполните VACUUM ANALYZE. Проверьте, что cron-задание для генерации превью работает регулярно.
Обновите версию образа в docker-compose.yml (например, nextcloud:28 → nextcloud:29). Выполните 'docker compose pull && docker compose up -d'. После обновления запустите 'occ upgrade' и 'occ db:add-missing-indices'. Всегда делайте резервную копию перед обновлением основных версий.
Приложению Talk требуется TURN/STUN-сервер. Настройте Coturn или используйте бесплатный STUN-сервер Nextcloud. Настройте адрес STUN/TURN-сервера в настройках Talk. Убедитесь, что порты 3478 (UDP/TCP) и 5349 (TLS) открыты.
Включите приложение 'External Storage Support' в Nextcloud. Перейдите в Settings → Administration → External Storages в панели администратора. Вы можете добавить типы хранилищ: S3, FTP, SFTP, SMB/CIFS, WebDAV. Для каждого пользователя или группы можно определить разное внешнее хранилище.
Установка Coolify, интеграция Docker и Git, развёртывание приложений, управление базами данных, SSL-сертификаты, переменные окружения и self-hosted PaaS как альтернатива Heroku/Netlify.
Установка Portainer CE, управление Docker и Kubernetes, развёртывание стеков, управление томами/сетями, авторизация пользователей, вебхуки и интеграция GitOps.
Установка Uptime Kuma с Docker, мониторинг HTTP/TCP/DNS/ping, интеграции уведомлений (Telegram, Discord, email), создание страницы статуса и настройка оповещений.