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