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.