{"id":19701,"date":"2023-09-12T11:33:26","date_gmt":"2023-09-12T10:33:26","guid":{"rendered":"https:\/\/www.oderland.se\/support\/?post_type=ht_kb&#038;p=19701"},"modified":"2023-09-12T11:33:27","modified_gmt":"2023-09-12T10:33:27","slug":"sa-installerar-du-portainer-med-automatisk-tls-via-caddy-i-oderland-cloud","status":"publish","type":"ht_kb","link":"https:\/\/www.oderland.se\/support\/artikel\/sa-installerar-du-portainer-med-automatisk-tls-via-caddy-i-oderland-cloud\/","title":{"rendered":"S\u00e5 installerar du Portainer med automatisk TLS via Caddy i Oderland Cloud"},"content":{"rendered":"\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">Denna guide \u00e4r baserad p\u00e5 en Debian 12 image, med flavor a1-c2-m4 (2 cores, 4GB ram) och en 50GB boot disk.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">Vi har valt <a href=\"https:\/\/caddyserver.com\/\" data-type=\"link\" data-id=\"https:\/\/caddyserver.com\/\">Caddy<\/a> som proxy med automatisk TLS st\u00f6d, men det finns andra alternativ som t.ex. traefik och nginx.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"487\" src=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-1024x487.png\" alt=\"\" class=\"wp-image-19702\" srcset=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-1024x487.png 1024w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-300x143.png 300w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-768x365.png 768w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-50x24.png 50w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-1536x731.png 1536w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-2048x974.png 2048w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-60x29.png 60w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_1-100x48.png 100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Vad \u00e4r Portainer och varf\u00f6r vill jag installera det?<\/h2>\n\n\n\n<p>Portainer \u00e4r ett webbgr\u00e4nssnitt f\u00f6r hantering av containers. Det kan vara smidigt att f\u00e5 en \u00f6verblick n\u00e4r man har flera containrar och att snabbt kunna se loggar, exekvera kommandon eller att spara egna mallar f\u00f6r att kunna skapa flera av samma typ.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c4r Portainer gratis?<\/h3>\n\n\n\n<p>Portainer finns som en gratis community edition med god funktionalitet. Beh\u00f6ver man fler funktioner eller vill sponsra projektet s\u00e5 g\u00e5r det att byta till betalversionen.<br>Se <a href=\"https:\/\/www.portainer.io\/\">Portainers hemsida<\/a> f\u00f6r mer information.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Var hittar jag mer dokumentation om Portainer?<\/h3>\n\n\n\n<p><a href=\"https:\/\/docs.portainer.io\/\">https:\/\/docs.portainer.io\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Utf\u00f6rande<\/h2>\n\n\n\n<p>Vi skapar en server i Oderland Cloud med Docker och pekar ett v\u00e4rdnamn (t.ex. dom\u00e4n eller subdom\u00e4n) mot serverns nya ip-adress.<\/p>\n\n\n\n<p>D\u00e4refter ssh:ar vi in till servern och byter till root som anv\u00e4ndare. Sedan skapar vi ett docker n\u00e4tverk som vi d\u00f6per till caddy. Det anv\u00e4nds till de containrar man vill f\u00e5 automatisk TLS (https:\/\/). I det h\u00e4r fallet anv\u00e4nder vi det direkt f\u00f6r Portainers webbgr\u00e4nssnitt.<\/p>\n\n\n\n<p>Vi skapar en mappstruktur samt en docker-compose.yml fil som talar om vilka tj\u00e4nster som skall k\u00f6ras och hur de skall konfigureras och anger samma v\u00e4rdnamn som vi pekat till servern.<\/p>\n\n\n\n<p>Sen startar vi upp v\u00e5r nya docker compose stack och surfar in mot Portainers loginsida och skapar en anv\u00e4ndare och kan kort d\u00e4refter se, hantera och skapa nya Containrar, Stacks eller ansluta fler Docker servrar f\u00f6r hantering.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">F\u00f6rberedelser<\/h3>\n\n\n\n<p>Skapa f\u00f6rst en server i Oderland Cloud med Docker, kika p\u00e5 en av guiderna nedan om du beh\u00f6ver hj\u00e4lp.<\/p>\n\n\n\n<p><a href=\"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-en-ny-server-med-docker-engine-i-oderland-cloud\/<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.oderland.se\/support\/artikel\/sa-installerar-du-docker-engine-i-oderland-cloud\/\">https:\/\/www.oderland.se\/support\/artikel\/sa-installerar-du-docker-engine-i-oderland-cloud\/<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Peka v\u00e4rdnamn (dom\u00e4n eller subdom\u00e4n)<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.oderland.se\/support\/artikel\/hur-pekar-jag-mitt-domannamn-mot-min-vps\/\" data-type=\"link\" data-id=\"https:\/\/www.oderland.se\/support\/artikel\/hur-pekar-jag-mitt-domannamn-mot-min-vps\/\">Peka ett l\u00e4mpligt v\u00e4rdnamn<\/a> till serverns ipv4 adress.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Byt till root-anv\u00e4ndaren<\/h3>\n\n\n\n<p>SSH:a in till servern.<\/p>\n\n\n\n<p>Vi kommer att k\u00f6ra samtliga kommandon som root. S\u00e5 byt till root som anv\u00e4ndare om du inte redan \u00e4r det.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo su -<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Skapa Docker n\u00e4tverk och en docker compose fil<\/h3>\n\n\n\n<p>Skapa sedan ett docker n\u00e4tverk som vi anv\u00e4nder f\u00f6r de containers vi vill proxya via Caddy och automatiskt hantera Let&#8217;s Encrypt \/ Zero SSL f\u00f6r att f\u00e5 s\u00e4ker anslutning.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker network create caddy\nmkdir -p \/root\/compose\/portainer\ncat &lt;&lt; EOF &gt; \/root\/compose\/portainer\/docker-compose.yml\nversion: \"3.7\"\n\nservices:\n  caddy:\n    image: lucaslorentz\/caddy-docker-proxy:ci-alpine\n    ports:\n      - 80:80\n      - 443:443\n    environment:\n      - CADDY_INGRESS_NETWORKS=caddy\n    networks:\n      - caddy\n    volumes:\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock\n      - caddy_data:\/data\n    restart: unless-stopped\n  portainer:\n    image: portainer\/portainer-ce:latest\n    command: -H unix:\/\/\/var\/run\/docker.sock\n    restart: unless-stopped\n    ports:\n      - 8000:8000\n    volumes:\n      - \/var\/run\/docker.sock:\/var\/run\/docker.sock\n      - portainer_data:\/data\n    networks:\n      - caddy\n    labels:\n      caddy: HOSTNAME\n      caddy.reverse_proxy: \"{{upstreams 9000}}\"\nvolumes:\n  portainer_data: {}\n  certs: {}\n  acme: {}\n  vhost: {}\n  html: {}\n  caddy_data: {}\n\nnetworks:\n  caddy:\n    external: true\nEOF<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ange ditt v\u00e4rdnamn<\/h3>\n\n\n\n<p>Har du pekat ett v\u00e4rdnamn som du vill anv\u00e4nda f\u00f6r servern eller f\u00f6r Portainer s\u00e5 kan du nu redigera kodsnutten ovan och \u00e4ndra HOSTNAME till ditt valda v\u00e4rdnamn. Du kan ocks\u00e5 g\u00f6ra det i efterhand med sed kommandot som vi visar nedan.<\/p>\n\n\n\n<p>I demo-syfte s\u00e5 skapade vi containers-srv01.demo.oderland.cloud s\u00e5 att vi sedan kan g\u00e5 mot https:\/\/containers-srv01.demo.oderland.cloud f\u00f6r att n\u00e5 Portainer. Exemplet ser d\u00e5 ut f\u00f6ljande med sed kommandot.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sed -i 's\/HOSTNAME\/containers-srv01.demo.oderland.cloud\/g' \/root\/compose\/portainer\/docker-compose.yml<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Starta upp Portainer och Caddy<\/h3>\n\n\n\n<p>Starta sedan v\u00e5r nya docker compose stack.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/root\/compose\/portainer\/\ndocker compose up -d<\/pre>\n\n\n\n<p>D\u00e5 h\u00e4mtas samtliga images\/layers och du borde f\u00e5 en output som liknar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">root@containers-srv01:~\/compose\/portainer# docker compose up -d\n[+] Running 16\/16\n \u2714 portainer 11 layers [\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff\u28ff]      0B\/0B      Pulled                                                                                                                                                                              5.5s \n   \u2714 7bd7f95ed7eb Pull complete                                                                                                                                                                                                          0.6s \n   \u2714 9d019f0c1f3a Pull complete                                                                                                                                                                                                          0.9s \n   \u2714 5171176db7f2 Pull complete                                                                                                                                                                                                          1.0s \n   \u2714 52e9438966a5 Pull complete                                                                                                                                                                                                          1.5s \n   \u2714 43d4775415ac Pull complete                                                                                                                                                                                                          1.6s \n   \u2714 c1cad9f5200f Pull complete                                                                                                                                                                                                          1.6s \n   \u2714 4de43b91ce75 Pull complete                                                                                                                                                                                                          1.9s \n   \u2714 d7c8d69c556b Pull complete                                                                                                                                                                                                          2.3s \n   \u2714 173ea6e5087e Pull complete                                                                                                                                                                                                          2.1s \n   \u2714 90767cd90d02 Pull complete                                                                                                                                                                                                          2.3s \n   \u2714 4f4fb700ef54 Pull complete                                                                                                                                                                                                          2.5s \n \u2714 caddy 3 layers [\u28ff\u28ff\u28ff]      0B\/0B      Pulled                                                                                                                                                                                           3.8s \n   \u2714 c158987b0551 Pull complete                                                                                                                                                                                                          0.5s \n   \u2714 fe528bf0229e Pull complete                                                                                                                                                                                                          1.0s \n   \u2714 8e4f673e7c70 Pull complete                                                                                                                                                                                                          1.3s \n[+] Running 4\/4\n \u2714 Volume \"portainer_portainer_data\"  Created                                                                                                                                                                                            0.0s \n \u2714 Volume \"portainer_caddy_data\"      Created                                                                                                                                                                                            0.0s \n \u2714 Container portainer-caddy-1        Started                                                                                                                                                                                            0.1s \n \u2714 Container portainer-portainer-1    Started  <\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Skapa anv\u00e4ndare<\/h3>\n\n\n\n<p>G\u00e5 nu mot det v\u00e4rdnamn du valt, men se till att du har pekat v\u00e4rdnamnet till din ip-adress innan.<\/p>\n\n\n\n<p>I v\u00e5r demo g\u00e5r vi mot https:\/\/containers-srv01.demo.oderland.cloud och m\u00f6ts d\u00e5 av bilden nedan.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"950\" height=\"1024\" src=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-950x1024.png\" alt=\"\" class=\"wp-image-19707\" srcset=\"https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-950x1024.png 950w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-278x300.png 278w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-768x828.png 768w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-46x50.png 46w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-56x60.png 56w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white-93x100.png 93w, https:\/\/www.oderland.se\/support\/wp-content\/uploads\/2023\/09\/portainer_first_init_white.png 1283w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/figure>\n\n\n\n<p><br>Om allt har g\u00e5tt bra s\u00e5 har du nu en Portainer f\u00f6r att installera och hantera dina containrar p\u00e5 servern och skyddad med automatisk https via webservern Caddy.<\/p>\n\n\n\n<p>Du beh\u00f6ver d\u00e4refter starta om portainer innan du kan logga in.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/root\/compose\/portainer\/\ndocker compose restart portainer<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Vanliga fr\u00e5gor<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c4ndra v\u00e4rdnamn<\/h3>\n\n\n\n<p>Om du editerar docker-compose.yml filen i efterhand och byter ut till annat v\u00e4rdnamn s\u00e5 beh\u00f6ver du starta om stacken och forcera nya configs via:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/root\/compose\/portainer\/\ndocker compose up --force-recreate -d<\/pre>\n\n\n\n<p>Om n\u00e5got strular s\u00e5 kan du kika i loggarna f\u00f6r hela stacken med:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose logs<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Automatisk TLS f\u00f6r fler containers p\u00e5 servern?<\/h3>\n\n\n\n<p>Det har vi f\u00f6rberett genom att skapa Caddy n\u00e4tverket. Du beh\u00f6ver l\u00e4gga till caddy n\u00e4tverket samt via labels styra vilken dom\u00e4n eller s\u00f6kv\u00e4g etc som skall proxyas, samt vilken port den skall till.<\/p>\n\n\n\n<p>Du kan nu via t.ex. docker compose l\u00e4gga till f\u00f6ljande i en service f\u00f6r att f\u00e5 TLS.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">    networks:\n      - caddy\n    labels:\n      caddy: new-container.app.my.domain\n      caddy.reverse_proxy: \"{{upstreams 80}}\"\n\nnetworks:\n  caddy:\n    external: true<\/pre>\n\n\n\n<p>Se dock till att inte ta bort andra networks som kan ing\u00e5, utan endast l\u00e4gga till caddy-n\u00e4tverket och endast till den service som beh\u00f6ver frontas med https.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hur kan man styra Caddy Proxyn<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/lucaslorentz\/caddy-docker-proxy#reverse-proxy-examples\" data-type=\"link\" data-id=\"https:\/\/github.com\/lucaslorentz\/caddy-docker-proxy#reverse-proxy-examples\">L\u00e4s mer om Caddy proxyn<\/a> och hur du kan styra via t.ex. paths eller hur du l\u00e4gger till fler dom\u00e4ner mot samma service.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vad \u00e4r Portainer och varf\u00f6r vill jag installera det? Portainer \u00e4r ett webbgr\u00e4nssnitt f\u00f6r hantering av containers. Det kan vara smidigt att f\u00e5 en \u00f6verblick n\u00e4r man har flera containrar och att snabbt kunna se loggar, exekvera kommandon eller att spara egna mallar f\u00f6r att kunna skapa flera av samma&#8230;<\/p>\n","protected":false},"author":15,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"ht-kb-category":[681],"ht-kb-tag":[],"class_list":["post-19701","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-cloud"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/comments?post=19701"}],"version-history":[{"count":4,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19701\/revisions"}],"predecessor-version":[{"id":19710,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb\/19701\/revisions\/19710"}],"wp:attachment":[{"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/media?parent=19701"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb-category?post=19701"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.oderland.se\/support\/wp-json\/wp\/v2\/ht-kb-tag?post=19701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}