
Instalare Portainer Docker: administreaza containere din browser
Docker e o metoda excelenta de a rula aplicatii pe un VPS, pana in momentul in care ai sase containere, trei fisiere compose in foldere diferite si doar o amintire vaga daca la comanda de loguri era --tail sau -n. Apoi un serviciu o ia razna seara tarziu, esti pe telefon, te uiti chiorat intr-un client SSH si nu mai stii care container e care. Portainer rezolva exact problema asta: e o interfata web pentru Docker care iti arata toate containerele, stack-urile, imaginile si volumele intr-o singura pagina, te lasa sa citesti loguri cu o casuta de cautare, sa repornesti servicii dintr-un click si sa pui aplicatii noi in productie lipind un fisier compose intr-un tab de browser.
In acest tutorial facem o instalare completa Portainer pe un VPS nou, asa cum am face-o pentru un client: Docker din repository-ul oficial, Portainer pornit dintr-un fisier compose, acces de admin care nu e niciodata expus direct in internet, iar apoi treburile de zi cu zi pentru care l-ai instalat de fapt. Portainer Community Edition e open source, sub licenta zlib, dezvoltat pe github.com/portainer/portainer , cu documentatie pe portainer.io .
Ce este Portainer si ce termeni Docker trebuie sa stii inainte
Inainte sa atingem terminalul, hai sa lamurim cativa termeni, pentru ca meniurile din Portainer ii folosesc peste tot:
- Imagine: un pachet read-only care contine o aplicatie si tot ce ii trebuie ca sa ruleze (fisiere, librarii, setari implicite). De exemplu
louislam/uptime-kuma:1e o imagine. Partea de dupa doua puncte e tag-ul, de obicei o versiune. - Container: o copie pornita a unei imagini. Se comporta ca un mini sistem izolat, cu propriul sistem de fisiere si propriile procese, dar foloseste kernelul VPS-ului tau, asa ca porneste in cateva secunde si consuma putina memorie.
- Volum: spatiu de stocare gestionat de Docker care supravietuieste cand un container e sters sau recreat. Bazele de date, fisierele urcate si setarile stau in volume, de aceea poti actualiza o imagine fara sa pierzi datele.
- Port: un numar pe care un program asteapta conexiuni de retea (SSH foloseste 22, HTTPS foloseste 443). A “publica” un port inseamna a lega un port al VPS-ului de un port din interiorul unui container.
- Fisier compose si stack: un fisier YAML care descrie unul sau mai multe containere, cu volumele si porturile lor. Portainer numeste un proiect compose pornit stack.
- Socket-ul Docker: fisierul
/var/run/docker.sock, usa prin care programele vorbesc cu motorul Docker. Cine poate folosi usa asta controleaza toate containerele de pe masina, adica practic are acces root pe server.
Portainer e la randul lui doar un alt container. Monteaza socket-ul Docker, vorbeste cu API-ul Docker si transforma ce vede intr-un dashboard. Nu inlocuieste Docker sau Compose: tot ce face poti face si din linia de comanda, deci te poti intoarce oricand la terminal, nimic nu ramane blocat in interfata.
Community Edition sau Business Edition?
Portainer vine in doua variante. Community Edition (CE) e gratuita si open source si acopera tot ce facem in acest ghid: stack-uri, containere, loguri, consola, imagini, volume, utilizatori si echipe. Business Edition (BE) adauga lucruri precum control detaliat al accesului pe roluri si cateva functii de automatizare, si are un plan gratuit pentru un numar mic de noduri. Pentru un VPS, sau cateva, CE e exact ce iti trebuie, asa ca pe ea o instalam.
De ce ai nevoie
- Un VPS cu Debian 13 sau Ubuntu 24.04. 1 GB de RAM ajunge pentru Portainer plus cateva aplicatii mici. Un VPS KVM e cea mai simpla alegere pentru Docker; intr-un container LXC neprivilegiat Docker merge doar daca nesting (si de obicei keyctl) e activat pentru acel container, deci daca esti pe LXC, cere suportului sa il activeze inainte sa incepi.
- Acces SSH cu un utilizator obisnuit care are drepturi
sudo. - Un client SSH pe calculatorul tau: terminalul pe Linux si macOS, PowerShell pe Windows 10/11 (include
ssh) sau PuTTY. - Optional, doar pentru Pasul 4: un domeniu sau subdomeniu (de exemplu
portainer.example.com) cu o inregistrare A catre IP-ul VPS-ului. - Cam 30 de minute pentru configurare, apoi cateva secunde pentru fiecare treaba zilnica.
Diagrama rezuma tot ghidul. Portainer nu asculta niciodata pe un port public. Ajungi la el fie printr-un tunel SSH (calea A, cea mai simpla si mai sigura, nu ai nimic de configurat spre internet), fie printr-un reverse proxy numit Caddy, care se ocupa de HTTPS cu un certificat gratuit Let’s Encrypt (calea B, comoda cand vrei o adresa normala). Un reverse proxy e pur si simplu un server web care primeste cererile din internet si le trimite mai departe catre o aplicatie care ruleaza in spatele lui.
Instalare Portainer Docker: planul in 7 pasi
Pasul 1: Instaleaza Docker Engine si pluginul Compose
Atat Debian cat si Ubuntu au un pachet docker.io, dar e in urma fata de versiunea oficiala si nu include intotdeauna pluginul modern Compose v2. Folosim in schimb repository-ul oficial Docker, ca sa primesti versiuni actuale si patch-uri de securitate direct de la proiect.
Mai intai actualizam listele de pachete si instalam doua utilitare mici (pe o imagine minimala de Debian 13 lipseste adesea curl):
sudo apt update
sudo apt install -y ca-certificates curl
Apoi adaugam cheia de semnare si repository-ul Docker. Comenzile de mai jos detecteaza automat distributia: pe Debian, $ID e debian si numele de cod e trixie; pe Ubuntu 24.04, $ID e ubuntu si numele de cod e noble. Asta e singura diferenta dintre cele doua sisteme la acest pas, asa ca acelasi bloc merge pe ambele:
sudo install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
sudo curl -fsSL "https://download.docker.com/linux/$ID/gpg" -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$ID $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
Ultimul apt update ar trebui sa afiseze acum o linie care contine download.docker.com. Instalam motorul si pluginurile:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Atat pe Debian cat si pe Ubuntu, serviciul docker e activat si pornit automat dupa instalare. Verificam:
sudo docker run --rm hello-world
docker compose version
Prima comanda descarca o imagine minuscula de test si ar trebui sa afiseze Hello from Docker!, urmat de o scurta explicatie. A doua ar trebui sa afiseze ceva de genul Docker Compose version v2.x.x. Daca le vezi pe amandoua, Docker e gata.
O observatie despre grupul docker: poti rula sudo usermod -aG docker $USER ca sa folosesti Docker fara sudo, dar apartenenta la acest grup e echivalenta cu acces root. In ghidul asta ramanem la sudo, varianta mai cinstita pe un server.
Pasul 2: Porneste Portainer cu Docker Compose
Tinem fisierul compose al lui Portainer in folderul lui, /opt/portainer, ca sa il gasesti usor mai tarziu. Comanda de mai jos creeaza folderul si scrie fisierul dintr-o data, ceea ce e mai sigur decat sa lipesti text intr-un editor:
sudo mkdir -p /opt/portainer
sudo tee /opt/portainer/compose.yaml > /dev/null <<'EOF'
services:
portainer:
image: portainer/portainer-ce:lts
container_name: portainer
restart: unless-stopped
ports:
- "127.0.0.1:9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
EOF
Linie cu linie, iata ce spune fisierul:
image: portainer/portainer-ce:ltsfoloseste Community Edition din linia LTS (suport pe termen lung). Trece doar la versiuni stabile si suportate, un compromis mai bun pentru un server decat:latest, care urmeaza fiecare versiune de scurta durata. Daca vrei control total, inlocuiesteltscu numarul exact de versiune de pe pagina de release-uri a proiectului si schimba-l constient cand faci upgrade.restart: unless-stoppedporneste Portainer din nou dupa un reboot sau o cadere, exceptand cazul in care l-ai oprit tu."127.0.0.1:9443:9443"publica portul HTTPS doar pe localhost. Asta e cea mai importanta linie. Nimeni din internet nu poate ajunge la el, doar programele de pe VPS, inclusiv tunelul SSH pe care il deschidem la pasul urmator.- Montarea socket-ului ii da lui Portainer controlul asupra Docker. Volumul
portainer_datapastreaza baza de date a lui Portainer, utilizatorii, setarile si fisierele compose ale stack-urilor pe care le creezi.
Observa ca nu exista linia version: sus. E depasita in Compose v2 si genereaza doar un avertisment. Pornim containerul:
cd /opt/portainer
sudo docker compose up -d
Ar trebui sa vezi ceva asemanator cu Network portainer_default Created, Volume portainer_portainer_data Created si Container portainer Started. Volumul primeste prefixul portainer_ pentru ca Compose numeste proiectele dupa folder. Verificam ca portul e legat doar de localhost:
sudo docker compose ps
sudo ss -tlnp | grep 9443
Linia din ss trebuie sa arate 127.0.0.1:9443, nu 0.0.0.0:9443. Daca arata 0.0.0.0, verifica din nou linia ports:, pentru ca Portainer ar fi vizibil pentru tot internetul.
Pasul 3: Deschide un tunel SSH si creeaza contul de admin
Iata un detaliu care ii prinde pe multi: o instanta noua de Portainer asteapta doar 5 minute sa creezi contul de admin. Dupa aceea se blocheaza din motive de securitate, ca un Portainer proaspat instalat si uitat sa nu poata fi revendicat de un strain. Daca l-ai pornit la Pasul 2 acum mai mult de 5 minute, ruleaza sudo docker restart portainer inainte sa continui.
Un tunel SSH trimite un port de pe calculatorul tau, prin conexiunea SSH criptata, catre un port de pe VPS. Pe calculatorul tau (nu pe VPS), ruleaza:
ssh -L 9443:127.0.0.1:9443 utilizator@IP_VPS
Te autentifici pe VPS ca de obicei si, cat timp fereastra ramane deschisa, localhost:9443 de pe calculatorul tau duce la Portainer de pe server. Pe Windows, PowerShell accepta exact aceeasi comanda. In PuTTY mergi la Connection, SSH, Tunnels, pui 9443 ca source port si 127.0.0.1:9443 ca destinatie, apesi Add, apoi te conectezi. Daca portul 9443 e deja ocupat pe calculatorul tau, foloseste -L 19443:127.0.0.1:9443 si deschide portul 19443.
Acum deschide https://localhost:9443 in browser. Vei primi un avertisment de certificat. E normal: Portainer genereaza un certificat self-signed, care cripteaza traficul, dar nu e semnat de o autoritate publica. Cum conexiunea trece deja prin tunelul SSH, poti accepta linistit avertismentul pentru aceasta adresa.
Pe pagina de configurare:
- Alege un nume de utilizator. Evita
admin, e primul nume pe care il incearca orice atacator. - Seteaza o parola de minim 12 caractere (Portainer impune acest minim). Foloseste un manager de parole si genereaza ceva lung.
- Optional, debifeaza statisticile anonime daca preferi sa nu trimiti date de utilizare.
- Apasa Create user.
Portainer te intreaba apoi cum sa se conecteze la un environment. Un environment e o gazda Docker pe care o administreaza Portainer. Apasa Get Started ca sa folosesti environment-ul local, adica motorul Docker de pe acelasi VPS, accesat prin socket-ul montat. Ajungi pe pagina Home, unde apare un environment numit local. Da click pe el si vezi dashboard-ul cu contoare pentru stack-uri, containere, imagini, volume si retele.
Pasul 4: Optional, pune Portainer in spatele HTTPS cu Caddy
Tunelul SSH e perfect pentru un singur administrator. Daca preferi o adresa normala precum https://portainer.example.com, poate pentru ca lucrezi de pe o tableta sau imparti accesul cu un coleg, adauga Caddy ca reverse proxy. Caddy obtine si reinnoieste automat certificate Let’s Encrypt, aproape fara configurare. Inainte sa incepi, asigura-te ca inregistrarea DNS A a subdomeniului indica deja spre VPS, altfel cererea de certificat esueaza.
Mai intai o vorba despre firewall, pentru ca e des inteles gresit. UFW (Uncomplicated Firewall) filtreaza traficul pentru serviciile care ruleaza direct pe gazda, cum e SSH. Porturile publicate de Docker ocolesc regulile UFW, pentru ca Docker isi scrie propriile reguli iptables. De aceea protectia reala pentru Portainer nu e o regula de firewall, ci faptul ca nu publicam niciodata portul 9443 public. UFW merita totusi activat pentru gazda. Pe Ubuntu 24.04 e instalat dar inactiv; pe Debian 13 de obicei nu e instalat, asa ca prima comanda il adauga:
sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
Permite intotdeauna SSH inainte sa activezi UFW, altfel te blochezi singur afara. Daca daemonul SSH foloseste alt port, permite acel port in loc de 22. Porturile 80 si 443 sunt necesare pentru Caddy: 80 pentru verificarea certificatului si redirectionari, 443 pentru HTTPS.
Acum inlocuieste fisierul compose cu o versiune care adauga Caddy. Portainer isi pastreaza portul pe localhost, deci tunelul SSH ramane o cale de rezerva:
sudo tee /opt/portainer/compose.yaml > /dev/null <<'EOF'
services:
portainer:
image: portainer/portainer-ce:lts
container_name: portainer
restart: unless-stopped
ports:
- "127.0.0.1:9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
portainer_data:
caddy_data:
caddy_config:
EOF
Tag-ul caddy:2 urmeaza linia majora Caddy 2, care primeste corecturi fara schimbari incompatibile. Apoi creeaza fisierul Caddyfile. Inlocuieste portainer.example.com cu subdomeniul tau:
sudo tee /opt/portainer/Caddyfile > /dev/null <<'EOF'
portainer.example.com {
reverse_proxy https://portainer:9443 {
transport http {
tls_insecure_skip_verify
}
}
}
EOF
Caddy ajunge la Portainer dupa numele serviciului, portainer, prin reteaua privata pe care Compose o creeaza pentru proiect. Pentru ca certificatul intern al lui Portainer e self-signed, tls_insecure_skip_verify ii spune lui Caddy sa il accepte doar pentru acest drum intern. Vizitatorii primesc in continuare un certificat public valid de la Caddy. Aplica schimbarile si urmareste logurile:
cd /opt/portainer
sudo docker compose up -d
sudo docker compose logs -f caddy
In cel mult un minut ar trebui sa vezi o linie de log care spune ca certificatul a fost obtinut cu succes. Apasa Ctrl+C ca sa opresti urmarirea logurilor, apoi deschide https://portainer.example.com. Datele si contul de admin sunt tot acolo, pentru ca stau in volumul portainer_data, nu in container.
Pasul 5: Fa deploy la primul stack din browser
E momentul sa folosim Portainer pe bune. Ca exemplu punem Uptime Kuma, un mic instrument de monitorizare a disponibilitatii, dar procesul e identic pentru orice aplicatie bazata pe compose.
In Portainer, deschide environment-ul local, apasa Stacks in meniul din stanga, apoi Add stack. Da-i un nume: numele de stack trebuie sa fie cu litere mici si poate contine litere, cifre, cratime si underscore, deci foloseste uptime-kuma. Lasa metoda pe Web editor si lipeste:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- uptime_kuma_data:/app/data
volumes:
uptime_kuma_data:
Aceleasi principii ca mai devreme: versiune majora fixata (:1), politica de restart, port doar pe localhost si volum cu nume pentru date. Sub editor exista sectiunea Environment variables. Cand o aplicatie are nevoie de secrete, de exemplu parola unei baze de date, defineste-le acolo si foloseste-le in YAML ca ${DB_PASSWORD}, in loc sa le scrii direct in fisier.
Apasa Deploy the stack. Portainer descarca imaginea si porneste containerul, apoi arata stack-ul in lista cu nivelul de control Total, adica Portainer l-a creat si il poate administra complet. Ca sa deschizi aplicatia, adauga un al doilea forward la comanda SSH (poti pune mai multe optiuni -L in aceeasi conexiune):
ssh -L 9443:127.0.0.1:9443 -L 3001:127.0.0.1:3001 utilizator@IP_VPS
Apoi intra pe http://localhost:3001. Vei observa ca stack-ul lui Portainer, creat din terminal la Pasul 2, apare cu control Limited. E normal: Portainer ii vede si ii poate reporni containerele, dar nu detine fisierul compose, asa ca pe acela il editezi din terminal.
Sfat: publica si aplicatia prin Caddy
Daca ai urmat Pasul 4 si vrei status.example.com pentru aplicatie, Caddy trebuie sa fie in aceeasi retea cu ea. Creeaza o data o retea comuna cu sudo docker network create proxy. In editorul stack-ului, adauga networks: [proxy] sub serviciul uptime-kuma si, la final, o sectiune networks: care declara proxy cu external: true. Fa la fel pentru serviciul caddy din /opt/portainer/compose.yaml, trecand atat default cat si proxy, ca sa ajunga in continuare la Portainer. La final adauga in Caddyfile blocul status.example.com { reverse_proxy uptime-kuma:3001 } si ruleaza in /opt/portainer comanda sudo docker compose up -d, apoi sudo docker compose restart caddy.
Pasul 6: Citeste loguri si reporneste containere
Logurile sunt primul lucru la care te uiti cand ceva se strica, si aici Portainer economiseste cel mai mult timp. Apasa Containers, apoi pe numele unui container. Pe pagina de detalii, butonul Logs deschide vizualizatorul de loguri, care iti ofera:
- Auto-refresh, ca liniile noi sa apara live, ca la
docker logs -f. - Lines pentru cate linii sa aduca si Display timestamps ca sa vezi cand s-a intamplat fiecare eveniment.
- O casuta Search care filtreaza liniile pe masura ce scrii, perfecta ca sa gasesti
errorsau o anumita adresa IP. - Download logs, util cand vrei sa trimiti rezultatul unui dezvoltator sau echipei noastre de suport.
In lista de containere, iconitele mici din coloana Quick Actions te duc direct la Logs, Inspect (configuratia completa in JSON), Stats (grafice live de CPU, memorie si retea) si Console. Console iti da un shell in interiorul containerului: apasa Connect cu /bin/sh selectat, pentru ca multe imagini mici nu includ bash.
Ca sa repornesti, bifeaza casuta din dreptul unuia sau mai multor containere si apasa Restart. Aceeasi bara mai ofera Start, Stop, Kill, Pause si Remove. Pentru o aplicatie intreaga, deschide Stacks, alege stack-ul si foloseste Stop this stack si Start this stack, care se ocupa de toate containerele lui in ordinea corecta. Un restart nu atinge volumele, deci datele sunt in siguranta.
Pasul 7: Actualizeaza imaginile (si Portainer insusi)
A actualiza inseamna a descarca o versiune mai noua a imaginii si a recrea containerul din ea, in timp ce volumele pastreaza datele. Pentru un stack, deschide Stacks, apasa pe stack, mergi in tab-ul Editor si apasa Update the stack. In fereastra care apare, activeaza Re-pull image and redeploy, apoi confirma. Portainer descarca cea mai noua imagine pentru tag-ul fixat (de exemplu ultima versiune 1.x de Uptime Kuma) si recreeaza doar ce s-a schimbat. Cand esti pregatit pentru o versiune majora noua, schimba tag-ul in editor, dar citeste intai notele de release ale aplicatiei si pastreaza un backup al volumului.
Pentru un container de sine statator, care nu face parte dintr-un stack, deschide-l si apasa Recreate, activeaza Re-pull image si confirma. Pentru containerele dintr-un stack, prefera intotdeauna editorul de stack, ca fisierul compose sa ramana sursa de adevar. Versiunile vechi de imagini raman pe disc dupa actualizari. Curata-le din Images: filtreaza imaginile nefolosite, selecteaza-le si apasa Remove.
Portainer nu ar trebui sa se actualizeze din propria interfata, pentru ca ar trebui sa opreasca exact containerul care serveste pagina pe care o folosesti. Mai intai fa un backup al configuratiei: deschide Settings (grupat sub Administration in versiunile recente) si foloseste sectiunea de backup ca sa descarci un fisier de backup, optional protejat cu parola. Apoi actualizeaza din terminal:
cd /opt/portainer
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -f
pull descarca cea mai noua imagine pentru tag-ul lts, up -d recreeaza containerul doar daca imaginea s-a schimbat, iar prune sterge imaginile vechi ramase fara eticheta. Da refresh in browser si autentifica-te din nou.
Cat consuma, de fapt?
O grija frecventa e ca un dashboard web mananca memoria de care au nevoie aplicatiile. In practica Portainer e usor, cum arata graficul.
Portainer munceste efectiv doar cat timp ai pagina deschisa, asa ca in repaus consumul de CPU e aproape zero. Pe disc ocupa cateva sute de MB pentru imagine, plus o baza de date mica in volum.
Probleme frecvente si greseli comune
“Your Portainer instance timed out for security purposes”
Nu ai creat contul de admin in primele 5 minute dupa prima pornire. Ruleaza sudo docker restart portainer si fa imediat Pasul 3.
Browserul nu se poate conecta la localhost:9443
Verifica daca fereastra SSH cu tunelul e inca deschisa si daca ai scris -L 9443:127.0.0.1:9443 pe calculatorul tau, nu pe VPS. Pe server, sudo docker compose ps rulat in /opt/portainer trebuie sa arate containerul pornit, iar sudo ss -tlnp | grep 9443 trebuie sa arate portul in ascultare.
“Port is already allocated” la deploy-ul unui stack
Alt container publica deja acel port pe gazda. Schimba partea de gazda a maparii, de exemplu "127.0.0.1:3002:3001", sau opreste celalalt container.
Permission denied pe /var/run/docker.sock
Ai rulat o comanda docker fara sudo si nu esti in grupul docker. Pune sudo in fata comenzii.
Caddy nu obtine certificatul
De obicei inregistrarea DNS nu indica inca spre VPS sau portul 80 e blocat undeva. Verifica cu sudo docker compose logs caddy. Let’s Encrypt limiteaza incercarile esuate repetate, asa ca repara intai DNS-ul si apoi reporneste Caddy, in loc sa reincerci in bucla.
Un stack apare cu control “Limited”
A fost creat in afara lui Portainer, cu docker compose intr-un terminal. Poti in continuare sa vezi loguri si sa repornesti containere, dar fisierul compose il editezi acolo unde sta pe disc.
Am uitat parola de admin
Portainer ofera o imagine oficiala de ajutor. Din /opt/portainer ruleaza sudo docker compose stop portainer, apoi sudo docker run --rm -v portainer_portainer_data:/data portainer/helper-reset-password, noteaza parola noua afisata si porneste Portainer din nou cu sudo docker compose start portainer.
Docker nu porneste pe un VPS LXC
Intr-un container LXC neprivilegiat, Docker are nevoie de nesting activat de gazda. Erorile legate de sisteme de fisiere overlay sau “permission denied” la crearea containerelor sunt semnul tipic. Cere suportului sa activeze nesting sau foloseste un VPS KVM.
Note de securitate
- Accesul la Portainer inseamna acces root. Prin socket-ul Docker, un admin Portainer poate porni un container care monteaza sistemul de fisiere al gazdei. Trateaza parola Portainer ca pe parola de root.
- Nu publica niciodata public porturile 9443, 9000 sau 8000. Tine minte ca porturile publicate de Docker ocolesc UFW. Pastreaza prefixul
127.0.0.1:, foloseste tunelul SSH sau Caddy si nu activa portul 8000 pentru Edge agent decat daca folosesti efectiv Edge agents. - Restrictioneaza adresa HTTPS daca poti. Daca folosesti Pasul 4 de pe un IP fix, adauga o lista de IP-uri permise in Caddyfile, in blocul site-ului, inainte de
reverse_proxy:@outside not remote_ip 203.0.113.10sirespond @outside 403. Community Edition nu ofera autentificare in doi pasi integrata la momentul scrierii, deci restrictiile de retea sunt un strat suplimentar valoros. - Scurteaza durata sesiunii din Settings, Authentication, ca un tab de browser uitat sa nu ramana autentificat ore intregi.
- Da colegilor conturi de utilizator standard, nu de admin, si pune-i in echipe cu acces doar la stack-urile de care au nevoie.
- Tine secretele in afara YAML-ului. Foloseste variabilele de mediu ale stack-ului si nu lipi niciodata parole de productie in fisiere compose puse in repository-uri publice.
- Fa backup la doua lucruri: configuratia Portainer (fisierul de backup din Settings) si volumele aplicatiilor. Backup-ul Portainer nu include datele aplicatiilor tale.
- Actualizeaza regulat: Portainer prin Pasul 7, gazda prin
sudo apt update && sudo apt upgrade. Pe Ubuntu, o actualizare de kernel creeaza fisierul/var/run/reboot-requiredcand e nevoie de reboot; Debian nu creeaza implicit acest fisier, asa ca dupa actualizari de kernel planifica tu un reboot. Containerele curestart: unless-stoppedrevin singure.
Deci, merita Portainer?
Daca rulezi mai mult de doua-trei containere pe un VPS, da. Instalarea Portainer pe Docker dureaza cam douazeci de minute, consuma in jur de 45 MB de RAM si transforma treburile zilnice (citit loguri, repornit un serviciu blocat, actualizat o imagine, pus in productie o aplicatie noua dintr-un fisier compose) in cateva click-uri, fara sa ascunda ce face Docker dedesubt. Tine-l departe de internetul public, cu un tunel SSH sau un proxy Caddy bine restrictionat, si va fi la fel de sigur ca accesul tau SSH.
Poti incerca tot ce e in acest ghid pe un VPS din data center-ul nostru propriu din Romania, gata in cateva minute. Daca preferi ca altcineva sa instaleze Docker, sa securizeze serverul si sa tina la zi Portainer si stack-urile tale, echipa noastra de administrare servere se poate ocupa de toate.
Intrebari frecvente
Portainer e gratuit?
Portainer Community Edition e gratuit si open source si acopera tot ce e in acest tutorial. Business Edition adauga functii enterprise si are licentiere proprie, inclusiv un plan gratuit pentru un numar mic de noduri.
Portainer inlocuieste Docker Compose?
Nu. Portainer foloseste Compose in spate cand face deploy la un stack. Stack-urile tale sunt fisiere compose obisnuite, deci le poti muta oricand inapoi in linia de comanda.
Daca sterg Portainer, se opresc containerele?
Nu. Containerele sunt gestionate de motorul Docker, nu de Portainer. Stergerea containerului Portainer elimina doar dashboard-ul. Fisierele stack-urilor create in Portainer stau in volumul lui, asa ca pastreaza volumul (sau un backup) daca s-ar putea sa il reinstalezi.
Pot administra mai multe servere dintr-un singur Portainer?
Da. Instalezi Portainer Agent pe celelalte servere si le adaugi ca environments. Agentul asculta pe portul 9001, pe care il deschizi doar pentru IP-ul serverului cu Portainer sau printr-o retea privata, niciodata pentru toata lumea.
Merge Portainer pe un VPS LXC?
Portainer merge oriunde merge Docker. Intr-un container LXC neprivilegiat, Docker are nevoie de nesting activat; pe un VPS KVM totul functioneaza din prima.