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