Установка Coolify: Развёртывание приложений с Self-Hosted PaaS
Установка Coolify, интеграция Docker и Git, развёртывание приложений, управление базами данных, SSL-сертификаты, переменные окружения и self-hosted PaaS как альтернатива Heroku/Netlify.
Установка Ghost через Docker, Nginx reverse proxy, SSL-сертификат, настройка темы, система подписок и членства, email-рассылка и production-конфигурация.
Ghost — это CMS-платформа с открытым исходным кодом для современного блоггинга и публикации контента. По сравнению с WordPress, Ghost быстрее, безопаснее и ориентирован на контент. Поддерживает монетизацию контента через систему членства, рассылку и интеграцию с платёжными системами.
Ghost — это headless CMS и платформа публикации на базе Node.js. Ключевые особенности:
# docker-compose.yml
version: '3.8'
services:
ghost:
image: ghost:5-alpine
container_name: ghost
restart: unless-stopped
depends_on:
- db
environment:
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: strong-password
database__connection__database: ghost
url: https://blog.example.com
mail__transport: SMTP
mail__options__host: smtp.mailgun.org
mail__options__port: 587
mail__options__auth__user: postmaster@mg.example.com
mail__options__auth__pass: mailgun-api-key
mail__from: noreply@example.com
volumes:
- ./ghost-content:/var/lib/ghost/content
ports:
- "127.0.0.1:2368:2368"
db:
image: mysql:8.0
container_name: ghost-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root-password
MYSQL_DATABASE: ghost
MYSQL_USER: ghost
MYSQL_PASSWORD: strong-password
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
# Запустить контейнеры
docker compose up -d
# Проверить логи
docker logs ghost -f
Ghost автоматически создаёт базу данных при первом запуске. Доступ к панели администратора: https://blog.example.com/ghost.
server {
listen 80;
server_name blog.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name blog.example.com;
ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:2368;
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_buffering off;
}
}
Settings → Membership
- Разрешить бесплатных участников: Включено
- Платные подписки: Через Stripe
- Доступ к записям по умолчанию: Публичный / Только для участников / Платный
Settings → Membership → Stripe
1. Создайте аккаунт Stripe
2. Введите API-ключи
3. Добавьте webhook endpoint:
https://blog.example.com/members/webhooks/stripe
environment:
mail__transport: SMTP
mail__options__service: Mailgun
mail__options__host: smtp.mailgun.org
mail__options__port: 587
mail__options__auth__user: postmaster@mg.example.com
mail__options__auth__pass: mailgun-smtp-password
mail__from: "Blog Name <noreply@example.com>"
# Резервное копирование директории контента Ghost
tar -czf ghost-backup-$(date +%Y%m%d).tar.gz ./ghost-content/
# Резервное копирование базы данных MySQL
docker exec ghost-db mysqldump -u ghost -pstrong-password ghost > \
ghost-db-$(date +%Y%m%d).sql
Ghost — мощная современная альтернатива WordPress для публикации контента. Встроенная система членства, возможности рассылки и чистый редактор делают его идеальным для профессиональных блогеров и издателей. С развёртыванием через Docker на серверах REXE вы можете запустить production-ready Ghost за считанные минуты.
Проверьте, что контейнер Ghost запущен командой docker ps. Убедитесь, что переменная окружения URL установлена правильно. Проверьте конфигурацию Nginx proxy. Просмотрите логи Ghost: docker logs ghost. При первой настройке перейдите по пути /ghost: https://blog.example.com/ghost.
Проверьте настройки SMTP. При использовании Mailgun убедитесь, что домен верифицирован. Отправьте тестовое письмо из Ghost admin Settings → Email. В sandbox-режиме Mailgun можно отправлять только на верифицированные адреса. Активируйте домен Mailgun для production.
Проверьте правильность API-ключей Stripe (live-ключ, не test-ключ). Убедитесь, что webhook endpoint добавлен в панели Stripe. URL Ghost должен быть HTTPS (Stripe отклоняет HTTP). Проверьте события webhook в логах Stripe.
Перед обновлением сделайте резервную копию (директория контента + база данных). Загрузите новый образ: docker compose pull. Перезапустите контейнер: docker compose up -d. Ghost автоматически выполняет миграции базы данных. При крупных обновлениях (например, 4.x → 5.x) прочитайте release notes.
Убедитесь, что .zip-файл темы имеет правильную структуру (package.json и index.hbs обязательны). Активируйте тему через Settings → Design → Activate. Проверьте логи Ghost на ошибки темы. Тема должна быть совместима с вашей версией Ghost.
При использовании MySQL оптимизируйте подключение к базе данных. Добавьте gzip-сжатие и кэширование браузера в Nginx. Включите кэширование в Ghost Settings → Labs. Рассмотрите использование CDN (бесплатный план Cloudflare). Увеличьте RAM сервера (рекомендуется минимум 2 ГБ).
Установка Coolify, интеграция Docker и Git, развёртывание приложений, управление базами данных, SSL-сертификаты, переменные окружения и self-hosted PaaS как альтернатива Heroku/Netlify.
Установка Nextcloud с Docker, настройка Apache/Nginx, установка базы данных, SSL-сертификат, синхронизация файлов, магазин приложений и оптимизация производительности.
Установка Portainer CE, управление Docker и Kubernetes, развёртывание стеков, управление томами/сетями, авторизация пользователей, вебхуки и интеграция GitOps.