1. Hem
  2. Cloud
  3. Så installerar du Portainer med automatisk TLS via Caddy i Oderland Cloud

Så installerar du Portainer med automatisk TLS via Caddy i Oderland Cloud

Denna guide är baserad på en Debian 12 image, med flavor a1-c2-m4 (2 cores, 4GB ram) och en 50GB boot disk.

Vi har valt Caddy som proxy med automatisk TLS stöd, men det finns andra alternativ som t.ex. traefik och nginx.

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?

https://docs.portainer.io/

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-en-ny-server-med-docker-engine-i-oderland-cloud/

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.

Hjälpte den här guiden dig?

Relaterade guider

Behöver du mer hjälp?
Kan du inte hitta lösningen på ditt problem? Då kan du kontakta oss via e-post, chatt och telefon!
Kontakta oss