Dokku: Полный гайд по self-host PaaS на базе Docker для вашей домашней серверной

Узнайте, как установить и настроить Dokku — собственный аналог Heroku/Netlify для управления и деплоя приложений в домашней лаборатории. Пошаговая инструкция для новичков и продвинутых хостинг-энтузиастов.

Не указано

Подготовка системы

Обновите систему и установите необходимые пакеты для работы с репозиториями.

sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common

Добавление официального репозитория Dokku

Импортируйте GPG ключ и добавьте репозиторий Dokku в источники apt. Для Ubuntu 22.04 (Jammy) используйте ссылку ниже.

wget -qO- https://get.dokku.com/key.gpg | sudo gpg --dearmor --output /usr/share/keyrings/dokku-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/dokku-archive-keyring.gpg] https://packages.dokku.com/ubuntu-jammy stable main" | sudo tee /etc/apt/sources.list.d/dokku.list
sudo apt update

Установка Dokku

Установите пакет Dokku. Во время установки может потребоваться подтвердить действие (нажать Y).

sudo apt install -y dokku

Настройка пользователя

Добавьте пользователя для управления Dokku. Это можно сделать через командную строку.

sudo dokku plugin:install https://github.com/dokku/dokku-user
sudo dokku user:add myusername myemail@example.com

Настройка сетевого доступа

Разрешите порты 80 (HTTP), 443 (HTTPS) и 22 (SSH) в брандмауэре (UFW).

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable

Установка плагинов

Установите базовые плагины для работы с базами данных (PostgreSQL, Redis, MariaDB) и SSL-сертификатами (Let's Encrypt).

sudo dokku plugin:install https://github.com/dokku/dokku-postgres
sudo dokku plugin:install https://github.com/dokku/dokku-redis
sudo dokku plugin:install https://github.com/dokku/dokku-mariadb
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt

Настройка SSH-доступа

Сгенерируйте SSH-ключ (если его нет) и добавьте публичный ключ на сервер для управления приложениями.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
cat ~/.ssh/id_rsa.pub | dokku sshkeys:add

Создание тестового приложения

Создайте простое Node.js приложение для проверки работы Dokku.

mkdir -p ~/apps
cd ~/apps
echo "const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, Dokku!\n');
});
server.listen(8080, () => {
  console.log('Server running on port 8080');
});" > app.js
echo "{
  \"name\": \"hello-dokku\",
  \"version\": \"1.0.0\",
  \"main\": \"app.js\",
  \"scripts\": {\"start\": \"node app.js\"},
  \"dependencies\": {\"express\": \"^4.18.2\"}
}" > package.json

Инициализация Git и создание приложения в Dokku

Инициализируйте Git-репозиторий, сделайте коммит и создайте приложение через командную строку Dokku.

git init
git add .
git commit -m "Initial commit"
dokku create hello-dokku

Развертывание приложения

Добавьте удаленный репозиторий Dokku и разверните приложение командой push.

git remote add dokku dokku@<IP-адрес-сервера>:hello-dokku
git push dokku master

Создание базы данных и подключение

Создайте базу данных PostgreSQL и свяжите её с приложением.

dokku postgres:create myapp-db
dokku postgres:link myapp-db hello-dokku

Настройка SSL (Let's Encrypt)

Настройте домен (если есть) и включите автоматическое получение SSL-сертификата.

dokku domains:add hello-dokku myapp.example.com
dokku letsencrypt:set hello-dokku email your-email@example.com
dokku letsencrypt:enable hello-dokku

Масштабирование и управление

Запустите несколько копий приложения (дrones) и управляйте процессами.

dokku ps:scale hello-dokku web=2
dokku ps:restart hello-dokku