Det här sätter du upp
Portainer är ett webbgränssnitt för containrar. Det visar dina containrar, avbilder, volymer och nätverk, visar deras loggar, startar och stoppar dem, och driftsätter Compose-filer, som Portainer kallar stackar, från en textruta, en uppladdad fil eller ett Git-repo.
Portainer används oftast med Docker, men här körs det i Podman utan root, under en egen användare som heter portainer, och hanterar den användarens containrar via Podmans Docker-kompatibla socket. Med Docker styr den som styr Portainer hela servern, som root. Med en socket utan root får en administratör i Portainer, och varje stack, inte fler rättigheter än användaren portainer har. Portainer skriver att Podman utan root kan fungera men inte stöds officiellt, så allt nedan har testats just så.
Varje steg nedan har körts på en nyinstallerad VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13:
- Portainer CE 2.45.1 LTS startade i Podman utan root, hittade Podman-socketen som sin miljö local och svarade bakom Caddy med ett certifikat från Let's Encrypt, över IPv4 och IPv6. IPv6 testades från själva servern.
- Administratörskontot gick bara att skapa med installationstoken från Portainers logg, och en ny Portainer utan administratör låste sig själv efter 5 minuter tills den startades om.
- En stack som driftsattes från webbredigeraren svarade på sitt eget namn över HTTPS och såg varje besökares riktiga adress.
- Port 8000, 9000 och 9443 var stängda mot internet, och en säkerhetskopia lästes tillbaka till en tom Portainer.
- Podmans automatiska uppdatering tog Portainer från 2.45.0 till 2.45.1, och allt startade igen av sig självt efter en omstart av servern.
Portainer använde omkring 30 MB minne, och hela servern omkring 550 MB.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång;
- brandväggen från steg 4 i säkerhetsguiden. Podman utan root öppnar inte portar förbi ufw som Docker gör, så en port som en stack publicerar förblir stängd tills du tillåter den;
- A- och AAAA-poster för
portainer.example.com, och förapp.example.com, appen du driftsätter i steg 5, som pekar på din server.
Exemplen använder portainer.example.com för Portainer och app.example.com för appen. Byt ut dem genomgående.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash portainer
loginctl enable-linger portainer
machinectl shell portainer@
Allt fram till steg 3 körs som portainer. Slå på användarens Podman-socket, som Portainer pratar med, och tjänsten som startar användarens containrar när servern startar:
systemctl --user enable --now podman.socket podman-restart.service
podman-restart.service startar varje container med omstartsregeln always efter en omstart av servern. Stackarna du driftsätter från Portainer behöver den.
2. Beskriv containern
mkdir -p ~/.config/containers/systemd
Skapa ~/.config/containers/systemd/portainer.container:
[Unit]
Description=Portainer
Requires=podman.socket
After=podman.socket
[Container]
ContainerName=portainer
Image=docker.io/portainer/portainer-ce:lts
# Portainer manages this user's containers through its Podman socket.
Volume=%t/podman/podman.sock:/var/run/docker.sock
Volume=portainer-data:/data
# Only Caddy, on this server, can reach Portainer: the port is not open to the internet.
PublishPort=127.0.0.1:8097:9000
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
%t är användarens körkatalog, /run/user/ följt av användarens id, där Podman-socketen ligger. Inne i containern hamnar den där Portainer förväntar sig Dockers. Portainers vanliga HTTP-port, 9000, publiceras bara på 127.0.0.1, för Caddy. De två andra portarna publiceras inte alls: 9443 visar samma gränssnitt med ett självsignerat certifikat, och 8000 är till för Edge-agenter på andra servrar, som den här guiden inte använder.
Taggen lts följer Portainers versioner med långtidsstöd. Starta den och slå på den dagliga kontrollen av uppdateringar:
systemctl --user daemon-reload
systemctl --user start portainer
systemctl --user enable --now podman-auto-update.timer
3. Sätt Caddy framför
Gå tillbaka till root med exit, byt till machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:
portainer.example.com {
reverse_proxy 127.0.0.1:8097
}
Starta om Caddy med systemctl --user restart caddy. Inom en minut visar https://portainer.example.com sidan New Portainer installation.
4. Skapa administratörskontot
En ny Portainer kan tas över av den som först når den, så Portainer skyddar installationssidan på två sätt. Den skriver en ny installationstoken i sin logg vid varje start, tills ett konto finns, och kontot går inte att skapa utan den. Och om inget konto har skapats inom 5 minuter efter starten låser den sig själv tills den startas om.
Visa token som portainer:
podman logs portainer 2>&1 | grep setup_token
setup_token=0bcc52044f09d245edc160a14da611c58f5599c187b0381148feff1b26a94dbd
Öppna https://portainer.example.com och fyll i:
- Username: från början
admin. Ett eget namn, till exempelanna, är svårare att gissa. - Password och Confirm password: minst 12 tecken.
- Setup token: värdet efter
setup_token=.
Välj Create user. Välj Skip på Set up Edge Compute, och Get Started på Welcome to Portainer. Portainer har redan anslutit Podman-socketen: Home visar en miljö, local, som Up, med Podman 5.4.2.
Om sidan visar Your Portainer instance timed out for security purposes startar du om Portainer som portainer med systemctl --user restart portainer. Visa sedan token igen, eftersom den är ny efter varje start, och skapa kontot inom 5 minuter.
5. Driftsätt en stack
Öppna local på Home, sedan Stacks i menyn, och välj Add stack:
- Ange
appsom Name och behåll Web editor som Build method. - Klistra in Compose-filen nedan i redigeraren. Den kör whoami, en liten webbserver som visar förfrågan den tog emot.
- Välj Deploy the stack.
services:
web:
image: docker.io/traefik/whoami
restart: always
ports:
- "127.0.0.1:8100:80"
Två rader spelar roll för varje stack du driftsätter på det här sättet:
127.0.0.1:före porten håller den till Caddy. Utan det lyssnar porten på alla adresser, och ufw håller den stängd tills du tillåter den.restart: alwaysgör attpodman-restart.servicestartar stacken igen efter en omstart av servern. Den startar bara containrar medalways, inteunless-stopped.
Ge sedan appen ett namn. Lägg till det här blocket i ~/Caddyfile som caddy och starta om Caddy:
app.example.com {
reverse_proxy 127.0.0.1:8100
}
https://app.example.com visar whoamis sida. Besökarens egen adress står på raden X-Forwarded-For, som Caddy skickar vidare.
För att ändra en stack öppnar du den, väljer Editor, ändrar filen och väljer Update the stack. Slå på Re-pull image and redeploy i frågan som följer för att samtidigt hämta nyare avbilder.
Containrarna i varje stack körs som användaren portainer. En stack som monterar en katalog på servern, till exempel /etc, kan bara läsa och ändra det som den användaren kan.
6. Vad Portainer kontaktar
Portainer CE 2.45 har ingen inställning för anonym statistik längre: äldre guider nämner Allow collection of anonymous statistics, som är borttagen, och Portainers egen kod innehåller ingen statistik längre. Portainer gör fortfarande de här förfrågningarna, och ingen av dem skickar data om dina containrar:
- Servern frågar GitHub efter den senaste versionen av Portainer, för att kunna tala om när en uppdatering finns.
- Servern hämtar nyheterna som visas på Home från Portainers filserver, och listan under Templates från GitHub när du öppnar den.
- Din webbläsare laddar bilder till nyheterna och mallarnas logotyper från Portainers filserver.
7. Säkerhetskopiera
Portainers egen säkerhetskopia innehåller användare, miljöer, inställningar och dina stackars Compose-filer. Öppna Settings och gör så här under Back up Portainer:
- Slå på Password Protect och ange ett Password. Säkerhetskopian innehåller stackarnas miljövariabler och eventuella lösenord till registries, så hoppa inte över det.
- Välj Download backup. Webbläsaren sparar en fil som heter
portainer-backup_följt av datum och.tar.gz.encrypted.
Förvara filen och lösenordet säkert, utanför servern. För att läsa tillbaka den, på en ny server eller efter att Portainer har startats med en tom volym, väljer du Restore Portainer from backup på första sidan i stället för att skapa ett konto. Välj Select file, ange säkerhetskopians Password och Setup token från loggen, och välj Restore Portainer. Logga sedan in med ett konto från säkerhetskopian.
Säkerhetskopian innehåller inte data i dina stackars volymer. Som portainer listar podman volume ls dem, och podman volume export sparar en av dem till en fil, som i Uptime Kuma-guiden. Stoppa stacken under Stacks först, så att kopian blir hel.
8. Uppdateringar
En gång om dagen kontrollerar Podman om det finns en nyare lts-avbild av Portainer, och startar om den i så fall. Kör podman auto-update --dry-run som portainer för att se vad den skulle göra just nu. Efter en uppdatering, eller varje annan omstart av Portainer, loggar du in igen. Versionen du kör står längst ner i menyn.
Den automatiska uppdateringen gäller Portainer själv. Dina stackars avbilder uppdateras när du driftsätter dem igen med Re-pull image and redeploy, som i steg 5.
Felsökning
Sidan visar att din Portainer har låst sig (timed out). Inget konto skapades inom 5 minuter efter starten. Starta om Portainer med systemctl --user restart portainer som portainer och använd den nya installationstoken.
Installationstoken godtas inte. Portainer startades om efter att du kopierade den, och varje start skapar en ny. Kör kommandot podman logs från steg 4 igen.
En stack körs inte efter en omstart av servern. Dess Compose-fil behöver restart: always, och podman-restart.service måste vara påslagen: som portainer ska systemctl --user is-enabled podman-restart.service visa enabled.
Portainer ber dig logga in igen. Portainer har startats om, av en uppdatering eller en omstart av servern. Det avslutar alla sessioner.