Dokploy: Полный гайд по самостоятельному хостингу альтернативы Vercel, Netlify, Heroku
Узнайте, как установить и настроить Dokploy — открытую самостийную платформу для хостинга приложений. Гайд по развертыванию, CI/CD и безопасности для homelab.
Подготовка сервера
Обновите системные пакеты и установите необходимые утилиты. Убедитесь, что порты 80 и 443 свободны для веб-сервера Traefik.
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git
sudo ss -tuln | grep -E ':(80|443)'Установка Docker и Docker Compose
Установите Docker через официальный репозиторий, чтобы получить актуальные версии. Добавьте текущего пользователя в группу docker для выполнения команд без sudo.
sudo apt remove -y docker docker-engine docker.io containerd runc
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
# Выйдите из системы и войдите снова для применения изменений
docker --version
docker compose versionУстановка Dokploy
Используйте официальный скрипт установки, который автоматически настроит все необходимые компоненты (Dokploy, Traefik, базы данных).
curl -sSL https://get.dokploy.com | bashПервоначальная настройка панели управления
Откройте веб-интерфейс Dokploy по IP-адресу сервера (http://<IP-адрес>). Используйте логин 'admin' и пароль, который был сгенерирован или установлен по умолчанию (проверьте логи контейнера или скрипта установки, если не меняли вручную). Рекомендуется сразу настроить домен для панели в разделе Settings -> Domain, чтобы получить SSL-сертификат Let's Encrypt.
Добавление базы данных
В интерфейсе Dokploy перейдите в раздел Databases и создайте необходимую БД (например, PostgreSQL). Укажите имя, версию, пользователя и пароль. Dokploy автоматически создаст контейнер и настроит внутреннюю сеть.
Развертывание приложения из Git
Создайте новое приложение (Applications -> Create Application). Укажите репозиторий Git, ветку, команды сборки и запуска. Dokploy автоматически определит технологический стек, если в корне репозитория есть package.json, requirements.txt и т.д. Добавьте домен и переменные окружения (например, строку подключения к БД).
# Пример настроек для Node.js приложения
Build Command: npm install
Start Command: npm start
Port: 3000
# Пример настроек для Python (Django/Flask)
Build Command: pip install -r requirements.txt
Start Command: gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
Port: 8000Настройка CI/CD (Автодеплой)
В настройках приложения (Settings -> Git) включите Auto Deploy. Получите Deploy Token и App ID в разделе API. Добавьте секреты в репозиторий GitHub (DOKPLOY_DEPLOY_TOKEN, DOKPLOY_APP_ID) и создайте workflow файл для автоматического развертывания при пуше в ветку main.
# .github/workflows/deploy.yml
name: Deploy to Dokploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to Dokploy
uses: dokploy/github-action@v1
with:
deploy_token: ${{ secrets.DOKPLOY_DEPLOY_TOKEN }}
app_id: ${{ secrets.DOKPLOY_APP_ID }}Настройка резервного копирования
Настройте автоматические бэкапы баз данных и томов Docker через cron. Создайте скрипт для дампа PostgreSQL и очистки старых файлов, а также скрипт для архивации томов. Пример настройки бэкапа базы данных через cron (ежедневно в 02:00).
# Скрипт /usr/local/bin/backup-db.sh
#!/bin/bash
BACKUP_DIR="/backup/db"
DATE=$(date +%Y%m%d_%H%M%S)
DB_CONTAINER=$(docker ps -q --filter "name=dokploy_postgres")
if [ ! -z "$DB_CONTAINER" ]; then
docker exec $DB_CONTAINER pg_dumpall -U postgres > $BACKUP_DIR/postgres_$DATE.sql
gzip $BACKUP_DIR/postgres_$DATE.sql
fi
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
# Добавление в cron
sudo crontab -e
0 2 * * * /usr/local/bin/backup-db.shБезопасность (Firewall)
Настройте UFW (Uncomplicated Firewall) для разрешения только необходимых портов: SSH, HTTP (80) и HTTPS (443). Порты баз данных должны быть закрыты для внешнего доступа.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable