Situatie
Dokku transforma un singur server Debian intr-o platforma mica de aplicatii condusa de Git, dar calea de instalare conteaza deoarece Dokku detine Docker, rutarea Nginx, accesul SSH pentru deploy si datele aplicatiilor pe host. Pentru a instala Dokku pe Debian, folositi scriptul oficial de bootstrap pentru un server nou sau metoda manuala DEB822 APT doar cand Docker Engine, Buildx si Compose sunt deja gestionate separat.
Pachetele curente Dokku suporta Debian 13 (Trixie), Debian 12 (Bookworm) si Debian 11 (Bullseye) pe amd64 si arm64.
Confirmarea versiunii Debian, arhitecturii si hostname-ului
Verificati codename-ul Debian, arhitectura si hostname-ul complet calificat inainte de a adauga pachete. Scriptul de bootstrap Dokku necesita un hostname functional, iar sursa de pachete trebuie sa corespunda versiunii Debian:
. /etc/os-releaseprintf '%s %s\n' "$PRETTY_NAME" "$VERSION_CODENAME"
dpkg --print-architecture
hostname -f
Codename-urile Debian suportate sunt trixie, bookworm si bullseye. Arhitecturile suportate sunt amd64 si arm64.
NOTA: Daca hostname -f esueaza, setati un hostname corespunzator si o intrare /etc/hosts corespunzatoare inainte de a rula instalatorul.
Planificarea DNS, memoriei si accesului la retea
Dokku functioneaza cel mai bine cu cel putin 1 GB de memorie pentru build-urile bazate pe Docker. Un domeniu real sau o inregistrare DNS wildcard este de asemenea puternic recomandata deoarece Dokku foloseste numele aplicatiei si domeniul global pentru a genera rute precum app.example.com.
| Cerinta | Stare recomandata | De ce conteaza |
|---|---|---|
| Versiune Debian | Debian 13, 12 sau 11 | Scriptul curent de pachete Dokku si sursa packagecloud suporta aceste versiuni |
| Arhitectura CPU | amd64 sau arm64 | Dokku publica indexe curente de pachete Debian pentru aceste arhitecturi |
| Memorie | 1 GB sau mai mult | Build-urile buildpack si imaginile Docker pot esua sau folosi swap intens pe servere mai mici |
| DNS | Wildcard *.example.com sau un singur domeniu de aplicatie | DNS wildcard permite fiecarei aplicatii sa primeasca un subdomeniu predictibil |
| Porturi | SSH, HTTP si HTTPS accesibile dupa necesitate | SSH primeste push-uri Git, iar HTTP si HTTPS servesc aplicatiile deployate |
NOTA: Pentru un setup wildcard, pointati *.apps.example.com si apps.example.com catre serverul Debian. Pentru un host de laborator fara DNS, o adresa precum 203.0.113.10.sslip.io poate furniza testare in stil subdomeniu prin serviciul public sslip.io.
Alegerea metodei de instalare Dokku
| Metoda | Sursa sau canalul | Comportament actualizari | Potrivit pentru | Compromisuri |
|---|---|---|---|---|
| Script oficial bootstrap | Instalator Dokku plus repository packagecloud Dokku | Actualizari Dokku gestionate APT dupa instalare | Servere Debian noi si majority prime instalari | Ruleaza un instalator root care bootstrappeaza de asemenea Docker si scrie propriile fisiere de sursa APT |
| Setup manual DEB822 APT | Acelasi repository packagecloud Dokku cu un keyring cu scope | Actualizari Dokku gestionate APT | Gestiunea configuratiei, imagini golden si servere unde Docker este deja instalat |
Solutie
Pasi de urmat
Metoda 1: Instalarea Dokku cu scriptul oficial de bootstrap
Instalati instrumentele mici necesare pentru a rezolva cel mai recent tag de release si a descarca scriptul prin HTTPS:
sudo apt update
sudo apt install ca-certificates curl jq
Rezolvati cel mai recent release stabil Dokku de pe GitHub Releases, apoi descarcati scriptul de bootstrap corespunzator. Mentineti aceeasi sesiune de terminal deschisa deoarece comanda de instalare reutilizeaza DOKKU_VERSION:
bash
DOKKU_VERSION="$(curl -fsSL https://api.github.com/repos/dokku/dokku/releases/latest | jq -r '.tag_name')"
case "$DOKKU_VERSION" in
v[0-9]*)
curl -fsSLo bootstrap.sh "https://dokku.com/install/${DOKKU_VERSION}/bootstrap.sh"
;;
*)
printf 'Could not resolve the latest Dokku release tag.\n' >&2
false
;;
esac
Daca Docker este deja instalat, confirmati plugin-urile Buildx si Compose inainte de a rula scriptul de bootstrap:
if command -v docker >/dev/null 2>&1; then
docker --version
docker buildx version
docker compose version
fi
Inspectati scriptul inainte de a-l rula ca root:
less bootstrap.shRulati instalatorul bootstrap cu acelasi tag Dokku. Scriptul instaleaza Docker cand comanda docker lipseste, adauga sursa packagecloud Dokku, instaleaza pachetul dokku si ruleaza configurarea dependentelor de plugin core:
sudo DOKKU_TAG="$DOKKU_VERSION" bash bootstrap.shMetoda 2: Instalarea Dokku cu o sursa APT manuala DEB822
Folositi metoda manuala cand Docker Engine, Buildx si Compose sunt deja instalate. Verificati mai intai Docker:
docker --version
docker buildx version
docker compose version
Instalati pachetele helper pentru download-uri HTTPS si inspectarea cheilor:
sudo apt update
sudo apt install ca-certificates curl gpg
Descarcati cheia de semnare packagecloud a Dokku, inspectati amprenta, apoi instalati cheia ca keyring APT cu scope:
curl -fsSLo dokku.asc https://packagecloud.io/dokku/dokku/gpgkey
gpg --quiet --show-keys --with-fingerprint dokku.asc
sudo install -m 0644 dokku.asc /usr/share/keyrings/dokku-archive-keyring.asc
rm -f dokku.asc
Cheia curenta identifica repository-ul packagecloud Dokku si foloseste aceasta amprenta:
pub rsa4096 2018-10-08 [SCEA]
0027 A6FC E4DE B304 104D 2D13 F1FF 6851 288B 3315
uid https://packagecloud.io/dokku/dokku (...)
Adaugati sursa APT a Dokku in format DEB822. Comanda scrie sursa doar pentru combinatiile de versiune si arhitectura Debian suportate:
bash
. /etc/os-release
codename="${VERSION_CODENAME:-}"
arch="$(dpkg --print-architecture)"
case "${codename}:${arch}" in
trixie:amd64|trixie:arm64|bookworm:amd64|bookworm:arm64|bullseye:amd64|bullseye:arm64)
printf '%s\n' \
'Types: deb' \
'URIs: https://packagecloud.io/dokku/dokku/debian/' \
"Suites: ${codename}" \
'Components: main' \
"Architectures: ${arch}" \
'Signed-By: /usr/share/keyrings/dokku-archive-keyring.asc' \
| sudo tee /etc/apt/sources.list.d/dokku.sources > /dev/null
;;
*)
printf 'Dokku packages in this workflow are documented for Debian 13, 12, or 11 on amd64 or arm64. Detected %s on %s.\n' "$codename" "$arch" >&2
;;
esac
Opriti-va daca apare mesajul de versiune nesuportata. Altfel, reimprospatati metadatele APT si confirmati ca dokku provine din sursa packagecloud pentru codename-ul Debian vostru:
sudo apt update
apt-cache policy dokku
Un candidat valid afiseaza URL-ul packagecloud Dokku, codename-ul Debian si componenta main:
dokku:
Installed: (none)
Candidate: 0.38.5
Version table:
0.38.5 500
500 https://packagecloud.io/dokku/dokku/debian trixie/main amd64 Packages
Pentru build-uri nesupraveghate, preseedati valorile debconf inainte de a instala Dokku. Inlocuiti hostname-ul cu domeniul sau baza wildcard pe care planificati sa o folositi:
sudo debconf-set-selections <<'EOF'
dokku dokku/vhost_enable boolean true
dokku dokku/hostname string apps.example.com
dokku dokku/nginx_enable boolean true
EOF
Instalati Dokku, apoi rulati instalatorul de dependente de plugin core:
sudo apt install dokku
sudo
dokku plugin:install-dependencies --core
Verificarea Dokku pe Debian
Verificati comanda Dokku instalata, plugin-urile core, accesul Docker si serviciul Nginx pe care Dokku il foloseste pentru rutarea HTTP:
dokku version
dokku plugin:list
docker --version
docker compose version
sudo systemctl is-active nginx
Comanda version trebuie sa afiseze release-ul Dokku instalat, plugin:list trebuie sa listeze plugin-urile core, Docker trebuie sa raporteze o versiune Engine si Compose, iar Nginx trebuie sa raporteze active.
Daca Nginx este inactiv, verificati statusul sau inainte de a deploya aplicatii:
sudo systemctl status nginx --no-pagerConfigurarea Dokku dupa instalare
Adaugarea unei chei SSH de deploy in Dokku
Dokku primeste push-uri Git prin utilizatorul SSH dokku. Adaugati o cheie publica pentru contul de administrator care va deploya aplicatii. Numele admin este conventional si acorda acelei chei permisiunea de a gestiona alte chei Dokku:
sudo dokku ssh-keys:add admin < ~/.ssh/id_rsa.pub
Listati cheile configurate dupa adaugarea uneia:
dokku ssh-keys:list
Setarea domeniului global Dokku
Setati domeniul global cand majoritatea aplicatiilor trebuie sa foloseasca subdomenii sub aceeasi baza. Folositi un domeniu care pointeaza deja catre serverul Debian, sau folositi un hostname sslip.io pentru testare temporara:
dokku domains:set-global apps.example.com
Pentru un domeniu de laborator temporar bazat pe IP, inlocuiti adresa de exemplu cu IP-ul public al serverului:
dokku domains:set-global 203.0.113.10.sslip.io
Verificati configuratia curenta a domeniului global:
dokku domains:report --global
Deschiderea porturilor web prin UFW cand este activat
Dokku serveste traficul HTTP si HTTPS prin Nginx. Verificati starea UFW inainte de a schimba regulile, apoi permiteti SSH inainte de a deschide porturile web cand UFW este activ:
sudo ufw status verbose
Daca statusul raporteaza active, adaugati regulile SSH, HTTP si HTTPS:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status numbered
Deployarea primei aplicatii Dokku pe Debian
Un deployment de baza are doua parti: creati aplicatia pe hostul Dokku, apoi faceti push la un repository Git de pe workstation-ul sau alt shell de dezvoltare.
Crearea aplicatiei pe hostul Dokku
Creati o aplicatie si atribuiti un domeniu inainte de primul push. Inlocuiti sample-app si domeniul cu numele real al aplicatiei si intrarea DNS:
dokku apps:create sample-app
dokku domains:set sample-app sample-app.apps.example.com
dokku apps:list
Push-ul codului catre Dokku cu Git
Din repository-ul local al aplicatiei, adaugati remote-ul Git Dokku si faceti push la ramura pe care doriti ca Dokku sa o compileze. Inlocuiti apps.example.com cu hostul care rezolva catre serverul Debian:
git remote add dokku dokku@apps.example.com:sample-appgit push dokku main:master
Verificarea statusului si jurnalelor aplicatiei
Dupa primul push, folositi comenzile Dokku pentru a confirma starea procesului si a inspecta erorile de pornire:
dokku ps:report sample-app
dokku logs sample-app --tail
Gestionarea Dokku pe Debian
Dokku este un framework de comenzi, nu un daemon Dokku cu rulare lunga. Docker si Nginx furnizeaza principalele servicii runtime, in timp ce comenzile Dokku gestioneaza aplicatiile, domeniile, plugin-urile si configuratia de deployment.
| Comanda | Utilizare |
|---|---|
| dokku apps:list | Listeaza aplicatiile pe host |
| dokku apps:create APP | Creeaza o aplicatie inainte de deployment |
| dokku domains:report APP | Afiseaza rutarea domeniului pentru o aplicatie |
| dokku ps:report APP | Inspecteaza starea procesului pentru o aplicatie |
| dokku logs APP –tail | Streameaza jurnalele recente ale aplicatiei |
| dokku plugin:list | Listeaza plugin-urile Dokku instalate |
| sudo systemctl status docker | Verifica daemonul Docker care ruleaza containerele aplicatiilor |
| sudo systemctl status nginx | Verifica serviciul Nginx care ruteaza traficul aplicatiilor |
Actualizarea Dokku pe Debian
Dokku instalat din scriptul bootstrap sau sursa APT manuala se actualizeaza prin APT. Cititi notele oficiale de upgrade Dokku inainte de upgrade-uri majore, mai ales cand actualizarea schimba si Docker, Herokuish sau comportamentul buildpack.
Pentru o reimprospatare normala a pachetelor, actualizati metadatele APT si instalati setul de pachete Dokku:
sudo apt-get update
sudo apt-get --no-install-recommends install dokku herokuish sshcommand plugn gliderlabs-sigil dokku-update dokku-event-listener
Cand Docker sau Herokuish se schimba in aceeasi fereastra de mentenanta, opriti mai intai aplicatiile si recompilati dupa upgrade astfel incat containerele sa foloseasca imaginea de baza si instrumentele de build reimprospatate:
dokku ps:stop --all
sudo apt-get update
sudo apt-get --no-install-recommends install dokku herokuish sshcommand plugn gliderlabs-sigil dokku-update dokku-event-listener
dokku ps:rebuild --all
Eliminarea Dokku din Debian
Faceti backup la aplicatii, baze de date, volume, variabile de mediu si fisiere incarcate inainte de a elimina Dokku.
Oprirea aplicatiilor si curatarea containerelor Dokku
Opriti aplicatiile gestionate de Dokku si lasati Dokku sa curete containerele si imaginile neutilizate inainte de eliminarea pachetelor:
dokku ps:stop --all
dokku cleanup
Purificarea pachetelor Dokku
Purificati pachetele Dokku si Herokuish, apoi eliminati dependentele pe care niciun pachet ramas nu le mai necesita. Revizuiti tranzactia autoremove inainte de a confirma pe un server partajat:
sudo apt-get purge dokku herokuish
sudo apt-get autoremove
Confirmati ca inregistrarile de pachete au disparut:
dpkg-query -W -f='${db:Status-Abbrev} ${binary:Package}\n' dokku herokuish 2>/dev/null || true
Eliminarea fisierelor de sursa APT Dokku
Eliminati fisierele de sursa si incredere create de oricare metoda de instalare, apoi reimprospatati metadatele pachetelor:
sudo rm -f /etc/apt/sources.list.d/dokku.list
sudo rm -f /etc/apt/sources.list.d/dokku.sources
sudo rm -f /etc/apt/trusted.gpg.d/dokku.asc
sudo rm -f /usr/share/keyrings/dokku-archive-keyring.asc
sudo apt update
Verificati ca niciun fisier sursa Dokku nu ramane sub /etc/apt/sources.list.d/:
sudo find /etc/apt/sources.list.d -maxdepth 1 \( -name 'dokku.list' -o -name 'dokku.sources' \) -print
Confirmati ca sursa packagecloud nu mai furnizeaza un candidat:
apt-cache policy dokku
Stergerea datelor Dokku doar cand sunteti gata
sudo find /home/dokku /var/lib/dokku /var/log/dokku -maxdepth 0 -print 2>/dev/null
sudo rm -rf /home/dokku /var/lib/dokku /var/log/dokku
Depanare probleme Dokku pe Debian
Scriptul de bootstrap raporteaza o distributie Linux nesuportata
Scriptul de bootstrap verifica /etc/os-release si suporta Debian 11, 12 si 13. Confirmati identitatea hostului si evitati rularea scriptului din containere sau derivative care raporteaza un ID de versiune diferit:
cat /etc/os-release
APT nu poate instala dependentele Dokku
Erorile de dependente inseamna de obicei ca sursele de pachete activate nu furnizeaza un set complet Docker, Buildx si Compose pentru lantul de dependente Dokku. Verificati candidatul Dokku si alternativele pachetelor Docker inainte de a reincerca instalarea:
apt-cache policy dokku docker-buildx-plugin docker-buildx docker-compose-plugin docker-compose
Push-urile SSH esueaza cu Permission Denied
Deploy-urile Git Dokku folosesc utilizatorul SSH dokku si cheile stocate de plugin-ul de chei SSH al Dokku. Verificati ca cheia intentionata este prezenta, apoi adaugati cheia publica corecta daca lipseste:
dokku ssh-keys:list
sudo dokku ssh-keys:add admin < ~/.ssh/id_rsa.pub
De pe masina de deployment, testati ruta SSH cu acelasi hostname folosit in remote-ul Git:
ssh dokku@apps.example.com
Domeniul aplicatiei nu se rezolva sau nu se incarca
Esuarile de domeniu se afla de obicei in DNS, configuratia domeniului Dokku, rutarea Nginx sau firewall-ul hostului. Verificati raportul domeniului aplicatiei si serviciul Nginx inainte de a modifica codul aplicatiei:
dokku domains:report sample-app
sudo systemctl is-active nginx
sudo ss -tulpn | grep -E ':(80|443)\b'
Daca raportul domeniului este corect si Nginx este activ, confirmati ca DNS pointeaza catre server si ca firewall-ul permite porturile 80/tcp si 443/tcp.
Leave A Comment?