
Vad är Portainer och varför vill jag installera det?
Portainer är ett webbgränssnitt för hantering av containers. Det kan vara smidigt att få en överblick när man har flera containrar och att snabbt kunna se loggar, exekvera kommandon eller att spara egna mallar för att kunna skapa flera av samma typ.
Är Portainer gratis?
Portainer finns som en gratis community edition med god funktionalitet. Behöver man fler funktioner eller vill sponsra projektet så går det att byta till betalversionen.
Se Portainers hemsida för mer information.
Var hittar jag mer dokumentation om Portainer?
Utförande
Vi skapar en server i Oderland Cloud med Docker och pekar ett värdnamn (t.ex. domän eller subdomän) mot serverns nya ip-adress.
Därefter ssh:ar vi in till servern och byter till root som användare. Sedan skapar vi ett docker nätverk som vi döper till caddy. Det används till de containrar man vill få automatisk TLS (https://). I det här fallet använder vi det direkt för Portainers webbgränssnitt.
Vi skapar en mappstruktur samt en docker-compose.yml fil som talar om vilka tjänster som skall köras och hur de skall konfigureras och anger samma värdnamn som vi pekat till servern.
Sen startar vi upp vår nya docker compose stack och surfar in mot Portainers loginsida och skapar en användare och kan kort därefter se, hantera och skapa nya Containrar, Stacks eller ansluta fler Docker servrar för hantering.
Förberedelser
Skapa först en server i Oderland Cloud med Docker, kika på en av guiderna nedan om du behöver hjälp.
https://www.oderland.se/support/artikel/sa-installerar-du-docker-engine-i-oderland-cloud/
Peka värdnamn (domän eller subdomän)
Peka ett lämpligt värdnamn till serverns ipv4 adress.
Byt till root-användaren
SSH:a in till servern.
Vi kommer att köra samtliga kommandon som root. Så byt till root som användare om du inte redan är det.
sudo su -
Skapa Docker nätverk och en docker compose fil
Skapa sedan ett docker nätverk som vi använder för de containers vi vill proxya via Caddy och automatiskt hantera Let’s Encrypt / Zero SSL för att få säker anslutning.
docker network create caddy mkdir -p /root/compose/portainer cat << EOF > /root/compose/portainer/docker-compose.yml version: "3.7" services: caddy: image: lucaslorentz/caddy-docker-proxy:ci-alpine ports: - 80:80 - 443:443 environment: - CADDY_INGRESS_NETWORKS=caddy networks: - caddy volumes: - /var/run/docker.sock:/var/run/docker.sock - caddy_data:/data restart: unless-stopped portainer: image: portainer/portainer-ce:latest command: -H unix:///var/run/docker.sock restart: unless-stopped ports: - 8000:8000 volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data networks: - caddy labels: caddy: HOSTNAME caddy.reverse_proxy: "{{upstreams 9000}}" volumes: portainer_data: {} certs: {} acme: {} vhost: {} html: {} caddy_data: {} networks: caddy: external: true EOF
Ange ditt värdnamn
Har du pekat ett värdnamn som du vill använda för servern eller för Portainer så kan du nu redigera kodsnutten ovan och ändra HOSTNAME till ditt valda värdnamn. Du kan också göra det i efterhand med sed kommandot som vi visar nedan.
I demo-syfte så skapade vi containers-srv01.demo.oderland.cloud så att vi sedan kan gå mot https://containers-srv01.demo.oderland.cloud för att nå Portainer. Exemplet ser då ut följande med sed kommandot.
sed -i 's/HOSTNAME/containers-srv01.demo.oderland.cloud/g' /root/compose/portainer/docker-compose.yml
Starta upp Portainer och Caddy
Starta sedan vår nya docker compose stack.
cd /root/compose/portainer/ docker compose up -d
Då hämtas samtliga images/layers och du borde få en output som liknar:
root@containers-srv01:~/compose/portainer# docker compose up -d [+] Running 16/16 ✔ portainer 11 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 5.5s ✔ 7bd7f95ed7eb Pull complete 0.6s ✔ 9d019f0c1f3a Pull complete 0.9s ✔ 5171176db7f2 Pull complete 1.0s ✔ 52e9438966a5 Pull complete 1.5s ✔ 43d4775415ac Pull complete 1.6s ✔ c1cad9f5200f Pull complete 1.6s ✔ 4de43b91ce75 Pull complete 1.9s ✔ d7c8d69c556b Pull complete 2.3s ✔ 173ea6e5087e Pull complete 2.1s ✔ 90767cd90d02 Pull complete 2.3s ✔ 4f4fb700ef54 Pull complete 2.5s ✔ caddy 3 layers [⣿⣿⣿] 0B/0B Pulled 3.8s ✔ c158987b0551 Pull complete 0.5s ✔ fe528bf0229e Pull complete 1.0s ✔ 8e4f673e7c70 Pull complete 1.3s [+] Running 4/4 ✔ Volume "portainer_portainer_data" Created 0.0s ✔ Volume "portainer_caddy_data" Created 0.0s ✔ Container portainer-caddy-1 Started 0.1s ✔ Container portainer-portainer-1 Started
Skapa användare
Gå nu mot det värdnamn du valt, men se till att du har pekat värdnamnet till din ip-adress innan.
I vår demo går vi mot https://containers-srv01.demo.oderland.cloud och möts då av bilden nedan.

Om allt har gått bra så har du nu en Portainer för att installera och hantera dina containrar på servern och skyddad med automatisk https via webservern Caddy.
Du behöver därefter starta om portainer innan du kan logga in.
cd /root/compose/portainer/ docker compose restart portainer
Vanliga frågor
Ändra värdnamn
Om du editerar docker-compose.yml filen i efterhand och byter ut till annat värdnamn så behöver du starta om stacken och forcera nya configs via:
cd /root/compose/portainer/ docker compose up --force-recreate -d
Om något strular så kan du kika i loggarna för hela stacken med:
docker compose logs
Automatisk TLS för fler containers på servern?
Det har vi förberett genom att skapa Caddy nätverket. Du behöver lägga till caddy nätverket samt via labels styra vilken domän eller sökväg etc som skall proxyas, samt vilken port den skall till.
Du kan nu via t.ex. docker compose lägga till följande i en service för att få TLS.
networks: - caddy labels: caddy: new-container.app.my.domain caddy.reverse_proxy: "{{upstreams 80}}" networks: caddy: external: true
Se dock till att inte ta bort andra networks som kan ingå, utan endast lägga till caddy-nätverket och endast till den service som behöver frontas med https.
Hur kan man styra Caddy Proxyn
Läs mer om Caddy proxyn och hur du kan styra via t.ex. paths eller hur du lägger till fler domäner mot samma service.