Navigation

Att installera Odoo 18 CE på en hemmaserver

Docker, PostgreSQL och en eftermiddag med nginx

Att installera Odoo 18 CE är inte raketforskning. Men det är inte heller en one-click-install. Räkna med en eftermiddag första gången, och ha terminalen öppen – du kommer behöva den.

Jag kör allt i Docker på en Ubuntu 24-server med 32 GB RAM och 16 trådar. Det är en gammal workstation som fått nytt liv som server. Inga molntjänster, bara ren hårdvara hemma i Linköping.

Docker Compose – grunden

Odoo i Docker innebär minst två containers: en för Odoo själv och en för PostgreSQL. Jag kör dem via Docker Compose för att hålla det hanterbart. Min compose-fil ser ut ungefär så här i sin enklaste form:

services:
  web:
    image: odoo:18.0
    depends_on:
      - db
    ports:
      - "8074:8069"
    volumes:
      - ./addons:/mnt/extra-addons
      - ./config:/etc/odoo
    environment:
      - HOST=db
      - USER=odoo
      - PASSWORD=odoo

  db:
    image: postgres:16
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
    volumes:
      - ./pgdata:/var/lib/postgresql/data

Port 8074 externt mappar till Odoos interna 8069. Jag kör flera Odoo-instanser på samma server (PlastShop, ARC Gruppen, HeartPro) så varje instans får sin egen port.

PostgreSQL separat – alltid

Kör alltid PostgreSQL i en egen container med en volym som pekar ut till host-filsystemet. Om Odoo-containern kraschar vill du inte att databasen försvinner med den. Postgres 16 fungerar felfritt med Odoo 18.

En sak jag lärde mig den hårda vägen: pipe:a aldrig en dump via gunzip direkt in i docker exec psql. Det ser smart ut men det hänger sig. Gör docker cp av dump-filen in i containern först, sen kör psql -f inuti containern. Sparar dig en timmes felsökning.

nginx som reverse proxy

Jag exponerar inte Odoo direkt mot internet. Istället kör jag nginx som reverse proxy med Let’s Encrypt-certifikat. Varje Odoo-instans får sin egen subdomain: utv.plastshop.se, arcgruppen.se, heartpro.se.

Viktigt att veta: nginx blockerar XML-RPC-anrop från utsidan som standard i min setup. Det är ett medvetet val – RPC-anrop ska bara komma inifrån servern. Så om du kör scripts mot Odoo, peka mot 127.0.0.1:8074, inte mot den publika URL:en.

Första inloggningen

När du startar Odoo första gången möts du av en databas-setup-skärm. Välj databasnamn, admin-lösenord och språk. Jag valde svenska direkt, men ändrade senare till att köra engelska som basspråk med svenska översättningar. Det gör det enklare att följa dokumentation och felsöka.

Admin-panelen i Odoo 18 är ren och modern. Du installerar moduler direkt från webgränssnittet. Sales, Inventory, Website, CRM – allt finns ett klick bort. Men undvik att installera allt på en gång. Varje modul drar med sig beroenden och det blir snabbt rörigt om du inte vet vad du faktiskt behöver.

Addons-mappen

Den viktiga volymen i Docker Compose är addons-mappen. Det är där dina egna moduler hamnar. Strukturen är enkel: varje modul är en mapp med en __manifest__.py och de filer modulen behöver.

Jag pekar ./addons till /mnt/extra-addons i containern. Odoo scannar den mappen vid start och visar alla moduler den hittar i app-listan. För att uppdatera en modul efter kodändringar lägger du till -u modulnamn i docker-compose command-raden och startar om. Ta bort -u igen efter lyckad uppgradering, annars kör den uppgradering varje gång containern startar.

Config-filen

Odoo styrs av en konfigurationsfil som du monterar in via Docker. De viktigaste inställningarna:

[options]
admin_passwd = ditt-master-lösenord
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
list_db = False

list_db = False döljer databasväljaren på inloggningssidan. Du vill inte att vem som helst ser vilka databaser som finns på servern.

Saker som bet mig

Brotli-komprimering. Om din webbläsare skickar med br i Accept-Encoding-headern och du inte har Brotli-stöd konfigurerat kan saker gå snett. Jag stängde av det i nginx-konfigurationen.

Asset-kompilering. Första gången du laddar Odoo efter installation kompileras alla JavaScript- och CSS-filer. Det kan ta flera minuter. Sitt inte och klicka refresh – vänta ut det.

Tidszon. Sätt rätt tidszon i både Docker och Odoo. Annars blir det kaos med schemalagda uppgifter och logg-tidsstämplar.

Är det värt det?

Absolut. Men det är inte för alla. Du behöver vara bekväm med Linux, Docker och terminalkommandon. Om du inte kan SSH:a in till en server och läsa loggar bör du antingen lära dig det först eller välja Odoo Online istället.

Min setup har kört stabilt i åtta månader nu med i princip noll downtime. Servern är överspecad för vad den gör, men det ger marginaler. Och känslan av att ha full kontroll över sitt affärssystem – det är svårt att sätta ett pris på.

Vad tycker du?

Jag vill gärna höra dina tankar. Kommentera nedan eller nå mig på LinkedIn.

0 0 röster
Article Rating
Prenumerera
Meddela vid
guest
0 Kommentarer
Äldsta
Senaste Mest omröstade
Inline feedback
Visa alla kommentarer

Relaterade inlägg

Vad är ett förlossningsbrev och varför är det bra att ha?
Vård
Vad är ett förlossningsbrev?

Inför en förlossning är det en strålande iidé att skriva ett förlossningsbrev! En förlossning är en av livets mest intensiva upplevelser. Det är också en

Chrille Hedberg logotyp
Chrille Hedberg

Använd gärna detta formulär för att komma i kontakt med mig.

0
Lämna gärna en kommentarx
()
x