Rasmus Lindroth

En blogg om Linux & teknik

Proxmox istället for Docker

Mitt äventyr började med att jag inte fick Proxmox att fungera för att jag endast hade en hårddisk. Jag valde därför att använda mig av Docker och containrar som går att läsa mer om här.

Jag tröttnade dock ganska snabbt på Docker, för jag tyckte det krånglade mer än vad det gjorde det smidigare för mig. Vissa saker gick jättesnabbt att sätta upp, medan andra saker krånglade orimligt mycket. Jag ville exempelvis att mina torrents skulle laddas ner via Wireguard i en container. Jag fick lägga timmar på att få det att fungera. Det berodde självklart delvis på att jag inte är helt insatt i hur Docker fungerar, men i efterhand kan jag inte påstå att det var särskilt smidigt ens efter jag fick det att fungera.

Nu när jag har börjat använda mig av Proxmox istället kom glädjen tillbaka. Jag använder mig forfarande av containrar eftersom att de är mer lättviktiga än en VM, men nu körs LXC istället. Den största fördelen för mig är att det känns mer som att använda en “vanlig” server. Jag kan använda SSH för att göra ändringar och de kommer att finnas kvar, så inte som i Docker där ändringarna inte sparas utan du hänvisad till din dockerfil. Det som är tradigt med att hantera servern själv är installationen av en Linuxdistribution, men här använder jag Ansible som hjälper till att automatisera uppgifter.

Så här ser min Playbook ut för att installera en server som innehåller mina git repositories. Det är alltså så här en fil för Ansible kan se ut.

- hosts: 127.0.0.1
  tasks:
      - name: Create git lxc
        proxmox:
            vmid: '106'
            node: chernobyl
            api_host: 192.168.0.1:8006
            api_user: root@pam
            api_password: hunter2
            password: hunter2
            hostname: git
            ostemplate: 'local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz'
            storage: nvme
            cores: 1
            cpuunits: 1024
            disk: '8'
            onboot: yes
            memory: 512
            swap: 512
            unprivileged: yes
            state: present
            netif: '{"net0":"name=eth0,gw=192.168.1.1,ip=192.168.0.9/24,bridge=vmbr0"}'
            pubkey: "{{ lookup('file', '/home/rasmus/.ssh/id_rsa.pub') }}"

      - name: Start vm
        proxmox:
            vmid: '106'
            node: chernobyl
            api_host: 192.168.0.1:8006
            api_user: root@pam
            api_password: hunter2
            password: hunter2
            state: started

      - name: Boot vm
        pause:
            seconds: 120

- hosts: git
  tasks:

      - import_tasks: ~/ansible/playbooks/common/install-base.yml

      - name: Upload repos
        synchronize:
            src: ~/ansible/git/rasmus
            dest: ~/

Alla mina servrar har med filen install-base.yml som innehåller instruktioner för att lägga till SSH-nycklar, dotfiler och de program jag vill ha tillgång till på alla servrar.

När jag skapa en ny server skapar jag bara en ny container och samtidigt som jag installerar allting skriver jag ner vad jag gör för att få det att fungera. När det är klart är det bara att lägga till alla utförda kommandon i en playbbok för ansible. På det sättet är det lätt för mig att återskapa servern. Jag tycker att det här arbetsflödet passar mig bättre eftersom jag känner mig mer hemma, samtidigt lär jag mig troligtvis mer när jag inte använder färdiga containrar.


Ett avslutande sidospår är att jag testar att köra en git-server utan något webbgränssnitt. Anledningen till att jag har en git-server är för att kunna synkronisera mina repositories mellan mina datorer, så jag använder inte det grafiska gränssnittet mer än för att skapa nya repositories eller hitta adressen till det för att klona. Det återstår att se om det räcker eller om jag kommer sakna något.