• Så skapar du en Docker-baserad hemmserver: En steg-för-steg-guide

    Att bygga en hemmserver kan låta komplicerat, men med rätt verktyg och några grundläggande Linux-kunskaper är det enklare än du tror. I denna guide visar vi hur du kan använda en äldre dator och en internetanslutning för att sätta upp en hemmserver som kör flera applikationer med hjälp av Docker. Med detta upplägg kan du enkelt hantera och skala dina tjänster, samtidigt som du får full kontroll över dina data och applikationer.

    Låt oss ta en titt på hur du kommer igång med att skapa din egen Docker-server!


    Varför Docker?

    Docker gör det enkelt att köra och hantera flera applikationer isolerat i så kallade containrar. Med containrar kan du köra program oberoende av varandra utan att behöva oroa dig för konflikter mellan olika programvaruberoenden. Detta gör Docker till ett perfekt verktyg för att bygga och hantera en hemmserver.


    Förutsättningar

    För detta projekt behöver du:

    • En äldre dator som kör Debian 12.
    • En internetanslutning med en router som kan vidarebefordra portar.
    • Grundläggande kunskaper i Linux och kommandoraden.

    Vi utgår från att din server är ansluten till ditt hemnätverk via en router och att du kan komma åt den via SSH.

    Förberedelser: Konfigurera din router och Dynamic DNS

    För att din server ska vara tillgänglig utanför ditt hemnätverk behöver du koppla ett domännamn till din server. Problemet är att många internetleverantörer tilldelar dynamiska IP-adresser som ändras över tid. Lösningen på detta är Dynamic DNS.

    Steg 1: Skaffa ett domännamn och konfigurera Dynamic DNS

    Vi använder Namecheap för detta exempel:

    1. Logga in på Namecheap och gå till Domain List.
    2. Klicka på Manage och gå till Advanced DNS.
    3. Skapa en A + Dynamic DNS Record:
      • Typ: A + Dynamic DNS
      • Host: @
      • Värde: 127.0.0.1
      • TTL: Automatic
    4. Aktivera Dynamic DNS och notera lösenordet.

    Installera verktyget ddclient på din server:

    bashKopiera kodsudo apt update
    sudo apt install ddclient
    

    Redigera filen /etc/ddclient.conf:

    confKopiera kodprotocol=namecheap
    use=web, web=dynamicdns.park-your-domain.com/getip
    server=dynamicdns.park-your-domain.com
    login=dittdomännamn.tld
    password=dittlösenord
    @
    

    Starta om tjänsten:

    bashKopiera kodsudo systemctl restart ddclient.service
    

    Nu är din server redo att automatiskt uppdatera din externa IP-adress.


    Installera Docker på din server

    För att kunna köra applikationer i containrar behöver vi installera Docker. Gör så här:

    bashKopiera kodsudo apt update
    sudo apt install docker.io docker-compose
    sudo systemctl enable docker
    sudo systemctl start docker
    

    Skapa en struktur för att organisera dina projekt:

    bashKopiera kodmkdir ~/srv
    cd ~/srv
    

    Automatisera uppdateringar och installera Git

    För att hålla ditt system säkert, installera Git och aktivera automatiska uppdateringar:

    bashKopiera kodsudo apt install git
    sudo apt install unattended-upgrades
    

    Redigera inställningen för automatiska omstarter:

    bashKopiera kodsudo nano /etc/apt/apt.conf.d/50unattended-upgrades
    

    Ändra raden till:

    confKopiera kodUnattended-Upgrade::Automatic-Reboot "true";
    

    Din första Docker-container: En enkel dashboard

    Nu är vi redo att köra vår första applikation. Vi använder Esma, en enkel dashboard som visar dagens bild och väderprognos.

    1. Klona projektet från Git:
    bashKopiera kodgit clone https://codeberg.org/dmpop/esma.git
    cd esma
    
    1. Bygg och kör containern:
    bashKopiera koddocker build -t esma .
    sudo docker run -d --rm -p 8000:8000 --name=esma -v $PWD/data:/usr/src/esma/data esma
    

    Öppna din webbläsare och navigera till http://dittdomännamn.tld:8000.


    Säkerställ tillgång med HTTPS och Caddy

    För att göra din server säkrare och mer professionell kan vi använda Caddy som en omvänd proxy med HTTPS-stöd. Detta gör att dina applikationer blir tillgängliga över en säker anslutning.

    Steg 1: Skapa en docker-compose.yml-fil

    Skapa filen i katalogen ~/srv:

    yamlKopiera kodservices:
      caddy_proxy:
        image: caddy:latest
        restart: unless-stopped
        ports:
          - 80:80
          - 443:443
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
          - caddy_data:/data
          - caddy_config:/config
        networks:
          - caddy_net
    
      esma:
        build:
          context: ./esma
        volumes:
          - ./esma/data:/usr/src/esma/data
        networks:
          - caddy_net
    
    volumes:
      caddy_data:
      caddy_config:
    networks:
      caddy_net:
    

    Steg 2: Skapa en Caddyfile

    Skapa filen i samma katalog:

    confKopiera kod{
        email ditt@example.com
    }
    
    dittdomännamn.tld {
        reverse_proxy esma:8000
    }
    

    Steg 3: Starta tjänsterna

    Kör kommandot:

    bashKopiera kodsudo docker compose up -d
    

    Nu kan du besöka https://dittdomännamn.tld och se din dashboard.


    Lägg till fler tjänster med subdomäner

    För att lägga till ytterligare applikationer, exempelvis CommaFeed för RSS-läsning, uppdatera docker-compose.yml och Caddyfile:

    yamlKopiera kodcommafeed:
      image: athou/commafeed:latest-h2
      volumes:
        - ./commafeed:/commafeed/data
      networks:
        - caddy_net
    

    I Caddyfile:

    confKopiera kodcommafeed.dittdomännamn.tld {
        reverse_proxy commafeed:8082
    }
    

    Automatisera uppstart med systemd

    För att säkerställa att dina containrar startar automatiskt vid omstart kan du skapa en systemd-tjänst:

    bashKopiera kodsudo nano /etc/systemd/system/home-server.service
    

    Innehåll:

    confKopiera kod[Unit]
    Description=Hemmserver
    After=docker.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/bin/bash -c "docker compose -f /home/USER/srv/docker-compose.yml up -d"
    ExecStop=/bin/bash -c "docker compose -f /home/USER/srv/docker-compose.yml down"
    
    [Install]
    WantedBy=multi-user.target
    

    Aktivera tjänsten:

    bashKopiera kodsudo systemctl enable home-server.service
    sudo systemctl start home-server.service
    

    Nästa steg: Utöka och underhåll din server

    När du har satt upp din server kan du överväga att använda verktyg som Portainer för att hantera dina containrar via en webbgränssnitt och Watchtower för att automatiskt uppdatera dina Docker-bilder. Det finns oändliga möjligheter när du väl kommit igång med självhosting!

    Välkommen till den fascinerande världen av självhostade tjänster!

Så skapar du en Docker-baserad hemmserver: En steg-för-steg-guide

Att bygga en hemmserver kan låta komplicerat, men med rätt verktyg och några grundläggande Linux-kunskaper är det enklare än du tror. I denna guide visar vi hur du kan använda en äldre dator och en internetanslutning för att sätta upp en hemmserver som kör flera applikationer med hjälp av Docker. Med detta upplägg kan du enkelt hantera och skala dina tjänster, samtidigt som du får full kontroll över dina data och applikationer.

Låt oss ta en titt på hur du kommer igång med att skapa din egen Docker-server!


Varför Docker?

Docker gör det enkelt att köra och hantera flera applikationer isolerat i så kallade containrar. Med containrar kan du köra program oberoende av varandra utan att behöva oroa dig för konflikter mellan olika programvaruberoenden. Detta gör Docker till ett perfekt verktyg för att bygga och hantera en hemmserver.


Förutsättningar

För detta projekt behöver du:

  • En äldre dator som kör Debian 12.
  • En internetanslutning med en router som kan vidarebefordra portar.
  • Grundläggande kunskaper i Linux och kommandoraden.

Vi utgår från att din server är ansluten till ditt hemnätverk via en router och att du kan komma åt den via SSH.

Förberedelser: Konfigurera din router och Dynamic DNS

För att din server ska vara tillgänglig utanför ditt hemnätverk behöver du koppla ett domännamn till din server. Problemet är att många internetleverantörer tilldelar dynamiska IP-adresser som ändras över tid. Lösningen på detta är Dynamic DNS.

Steg 1: Skaffa ett domännamn och konfigurera Dynamic DNS

Vi använder Namecheap för detta exempel:

  1. Logga in på Namecheap och gå till Domain List.
  2. Klicka på Manage och gå till Advanced DNS.
  3. Skapa en A + Dynamic DNS Record:
    • Typ: A + Dynamic DNS
    • Host: @
    • Värde: 127.0.0.1
    • TTL: Automatic
  4. Aktivera Dynamic DNS och notera lösenordet.

Installera verktyget ddclient på din server:

bashKopiera kodsudo apt update
sudo apt install ddclient

Redigera filen /etc/ddclient.conf:

confKopiera kodprotocol=namecheap
use=web, web=dynamicdns.park-your-domain.com/getip
server=dynamicdns.park-your-domain.com
login=dittdomännamn.tld
password=dittlösenord
@

Starta om tjänsten:

bashKopiera kodsudo systemctl restart ddclient.service

Nu är din server redo att automatiskt uppdatera din externa IP-adress.


Installera Docker på din server

För att kunna köra applikationer i containrar behöver vi installera Docker. Gör så här:

bashKopiera kodsudo apt update
sudo apt install docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker

Skapa en struktur för att organisera dina projekt:

bashKopiera kodmkdir ~/srv
cd ~/srv

Automatisera uppdateringar och installera Git

För att hålla ditt system säkert, installera Git och aktivera automatiska uppdateringar:

bashKopiera kodsudo apt install git
sudo apt install unattended-upgrades

Redigera inställningen för automatiska omstarter:

bashKopiera kodsudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Ändra raden till:

confKopiera kodUnattended-Upgrade::Automatic-Reboot "true";

Din första Docker-container: En enkel dashboard

Nu är vi redo att köra vår första applikation. Vi använder Esma, en enkel dashboard som visar dagens bild och väderprognos.

  1. Klona projektet från Git:
bashKopiera kodgit clone https://codeberg.org/dmpop/esma.git
cd esma
  1. Bygg och kör containern:
bashKopiera koddocker build -t esma .
sudo docker run -d --rm -p 8000:8000 --name=esma -v $PWD/data:/usr/src/esma/data esma

Öppna din webbläsare och navigera till http://dittdomännamn.tld:8000.


Säkerställ tillgång med HTTPS och Caddy

För att göra din server säkrare och mer professionell kan vi använda Caddy som en omvänd proxy med HTTPS-stöd. Detta gör att dina applikationer blir tillgängliga över en säker anslutning.

Steg 1: Skapa en docker-compose.yml-fil

Skapa filen i katalogen ~/srv:

yamlKopiera kodservices:
  caddy_proxy:
    image: caddy:latest
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_net

  esma:
    build:
      context: ./esma
    volumes:
      - ./esma/data:/usr/src/esma/data
    networks:
      - caddy_net

volumes:
  caddy_data:
  caddy_config:
networks:
  caddy_net:

Steg 2: Skapa en Caddyfile

Skapa filen i samma katalog:

confKopiera kod{
    email ditt@example.com
}

dittdomännamn.tld {
    reverse_proxy esma:8000
}

Steg 3: Starta tjänsterna

Kör kommandot:

bashKopiera kodsudo docker compose up -d

Nu kan du besöka https://dittdomännamn.tld och se din dashboard.


Lägg till fler tjänster med subdomäner

För att lägga till ytterligare applikationer, exempelvis CommaFeed för RSS-läsning, uppdatera docker-compose.yml och Caddyfile:

yamlKopiera kodcommafeed:
  image: athou/commafeed:latest-h2
  volumes:
    - ./commafeed:/commafeed/data
  networks:
    - caddy_net

I Caddyfile:

confKopiera kodcommafeed.dittdomännamn.tld {
    reverse_proxy commafeed:8082
}

Automatisera uppstart med systemd

För att säkerställa att dina containrar startar automatiskt vid omstart kan du skapa en systemd-tjänst:

bashKopiera kodsudo nano /etc/systemd/system/home-server.service

Innehåll:

confKopiera kod[Unit]
Description=Hemmserver
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "docker compose -f /home/USER/srv/docker-compose.yml up -d"
ExecStop=/bin/bash -c "docker compose -f /home/USER/srv/docker-compose.yml down"

[Install]
WantedBy=multi-user.target

Aktivera tjänsten:

bashKopiera kodsudo systemctl enable home-server.service
sudo systemctl start home-server.service

Nästa steg: Utöka och underhåll din server

När du har satt upp din server kan du överväga att använda verktyg som Portainer för att hantera dina containrar via en webbgränssnitt och Watchtower för att automatiskt uppdatera dina Docker-bilder. Det finns oändliga möjligheter när du väl kommit igång med självhosting!

Välkommen till den fascinerande världen av självhostade tjänster!