Hoppa till innehåll
Installation

Installera Odoo

Kör Odoo Community i Docker: egen molnserver med HTTPS eller egen dator, färdig compose-fil, svensk lokalisering med kontoplan och rätt momsinställning, och en säkerhetskopia.

Vad ni får ut av det här

När ni är klara har ert företag ett eget affärssystem igång, med kunder, produkter, offerter och fakturor på samma ställe. Ni äger installationen själva, licensen kostar noll kronor, och hela företaget kommer åt systemet från webbläsaren oavsett om de sitter hemma eller på kontoret. Ni lär er dessutom Docker på köpet, vilket är en av de mest gångbara tekniska färdigheterna man kan ha på ett cv.

Var ärlig med er själva innan ni börjar: det här är den svåraste guiden i hela guidesamlingen. Ni ska skriva kommandon i en svart ruta och ni ska hantera lösenord som faktiskt betyder något. Varje kommando förklaras, och ingenting här kräver att ni förstår Linux i förväg. Men om ingen i företaget tycker att det låter kul, ta Bokföring och ett kalkylark i stället. Ett affärssystem som ingen orkar sköta är sämre än ett kalkylark som alla använder.

Det här behöver ni innan ni börjar

  • Ett konto hos DigitalOcean om ni väljer väg A, molnservern.
  • Ett betalkort som får kopplas till DigitalOcean-kontot, även när ni betalar med krediten. Prata med den som sköter ekonomin i företaget först, det är företagets pengar och inte era egna.
  • Docker Desktop om ni väljer väg B och kör på egen dator. Vår guide Installera Docker går igenom installationen steg för steg.
  • En lösenordshanterare eller åtminstone ett delat dokument där företagets lösenord sparas. Ni kommer att skapa fyra stycken och ni kommer att behöva dem igen.
  • Ett domännamn där ni kan lägga in en DNS-post, till exempel odoo.foretaget.se, om ni väljer väg A. Det behövs för att systemet ska nås över krypterad HTTPS. Har ni ingen domän, börja med Domän och mejl.
  • Två personer i företaget som gör det här tillsammans. Den som installerar ensam blir också den som får sitta ensam den dag något krånglar.

Tidsåtgång och svårighetsgrad

Räkna med en eftermiddag, tre till fyra timmar, för hela guiden inklusive grundinställningarna. Själva installationen tar tjugo minuter när det flyter på. Resten går åt till kontot hos molnleverantören, till att ställa in företaget och till att skriva av kommandon rätt. Svårighetsgraden är hög jämfört med allt annat vi publicerat, för ni administrerar en riktig server och en riktig databas. Ingen förkunskap krävs, men tålamod krävs.

Vad ett affärssystem är, och vad Community betyder

Ett affärssystem, på engelska ERP som står för Enterprise Resource Planning, är ett program där företagets olika delar delar samma information. Säljaren lägger in en kund. Samma kund syns när någon skriver en offert. Blir offerten en order finns raderna kvar när fakturan skapas, och när fakturan betalas syns det i bokföringen. Poängen är inte att varje del är avancerad, poängen är att ingen behöver skriva in samma sak två gånger.

Odoo finns i två utgåvor. Community Edition är öppen källkod: koden är fri att läsa, använda och ändra, licensen kostar ingenting, och det finns ingen användaravgift oavsett hur många i företaget som loggar in. I gengäld står ni för driften. Det finns också en molnvariant där Odoo sköter servern åt er mot en månadsavgift, men här kör vi den öppna versionen som ni äger själva.

Kör version 18.0. Den svenska lokaliseringen vi använder, med kontoplan och svenska momskoder, finns för 18.0, och det är den versionen guiden är skriven för. Uppgradera sedan inte i onödan: versionsbyten är den överlägset vanligaste anledningen till att en Odoo-installation går sönder. Sätt versionen en gång, och byt först när ni har ett konkret skäl och en färsk säkerhetskopia.

Väg A: Odoo på en molnserver

Det här är den väg vi rekommenderar. En molnserver, kallad droplet hos DigitalOcean, är en dator som står i ett datacenter och som ni kommer åt via webbläsaren. Ingen behöver ha datorn igång hemma, och alla i företaget når systemet från vilken enhet som helst.

  1. Skapa kontot på digitalocean.com. Får kontot en startkredit läggs den på direkt och dras innan kortet belastas.
  2. Klicka på Create uppe till höger och välj Droplets.
  3. Välj region Frankfurt eller Amsterdam. Båda ligger inom EU, vilket är det enda rimliga när ni ska lagra kunduppgifter, och de är närmast Sverige så systemet känns snabbare.
  4. Välj image Ubuntu och versionen märkt 24.04 (LTS). LTS betyder Long Term Support, alltså en version som underhålls i flera år.
  5. Välj storlek: fliken Basic, processortyp Regular, och planen med 4 GB minne och 2 vCPU. Den kostade 24 USD i månaden när det här skrevs. Serverkrediter av det här slaget har ofta en begränsad giltighetstid, så exakt hur långt krediten räcker ser ni när ni löser in den; räkna med att den täcker uppstarten och budgetera själva för månaderna efter det. Odoo vill ha 4 GB för att gå smidigt, och en mindre server börjar hacka så fort ni lägger in produkter med bilder.
  6. Under Choose Authentication Method, välj Password och hitta på ett långt lösenord för root, alltså serverns administratörskonto. Spara det där företaget sparar sina lösenord. SSH-nycklar är säkrare men lägger till ett moment ni inte behöver just nu.
  7. Ge servern ett namn, till exempel foretag-odoo, och klicka Create Droplet. Efter ungefär en minut står en IP-adress bredvid namnet, fyra tal med punkter emellan. Den adressen är er server.
  8. Klicka på droplet-namnet och sedan på Console. Ett svart fönster öppnas i webbläsaren och frågar efter användarnamn och lösenord. Skriv root och lösenordet ni valde. Nu står ni på servern, utan att ha installerat ett enda program på er egen dator.
  9. Installera Docker med det officiella installationsskriptet:
    curl -fsSL https://get.docker.com | sh
    Kommandot hämtar Dockers eget installationsskript och kör det. Det tar ett par minuter och installerar både Docker och tillägget docker compose, som är det vi använder i nästa avsnitt.
  10. Skapa en mapp för installationen och ställ er i den:
    mkdir -p /opt/odoo/config /opt/odoo/addons
    cd /opt/odoo
    mkdir skapar mappar, flaggan -p gör att den skapar hela kedjan på en gång. cd flyttar er dit.

Väg B: Odoo på egen dator för att testa

Vill ni prova först, eller saknar ni kort och konto just nu, går allt att köra lokalt. Installera Docker Desktop enligt Installera Docker, öppna programmet och låt det ligga igång. Skapa sedan en mapp som heter odoo där ni brukar spara filer, och två mappar inuti den: config och addons. Filerna i nästa avsnitt är exakt desamma, och ni kör kommandona i Terminal på Mac eller Linux Mint, eller i PowerShell på Windows, i stället för i konsolfönstret.

Två skillnader är värda att veta. Systemet nås bara från den datorn, så resten av företaget kommer inte åt det. Och stänger ni av datorn stängs Odoo av. Det duger utmärkt för att lära sig, men inte för att ta emot en riktig kundorder.

Kör ni Linux Mint är vägen kortare, för där behövs ingen Docker Desktop. Installera Docker Engine enligt avsnittet om Linux Mint i Installera Docker, skapa mapparna med mkdir -p ~/odoo/config ~/odoo/addons och kör sedan exakt samma kommandon i Terminal. En sak skiljer: har ni inte lagt er användare i gruppen docker måste varje kommando börja med sudo, och då ägs filerna som Odoo skapar av root i stället för av er. Lägg hellre in användaren i gruppen och logga ut och in en gång, så slipper ni det.

Hämta den svenska lokaliseringen

Odoo har en egen grundläggande svensk lokalisering. Vi använder i stället den kompletta i github.com/vertelab/odoo-l10n_se, med BAS-kontoplan, svenska momskoder och tillägg för bland annat SIE-export och bankfiler. Den läggs i mappen addons, som Odoo läser in vid start.

git clone -b 18.0 --depth 1 https://github.com/vertelab/odoo-l10n_se.git addons/odoo-l10n_se

git clone hämtar koden, -b 18.0 väljer grenen för Odoo 18 och --depth 1 hoppar över historiken så att det går fort. Saknar ni git på en Windowsdator kan ni i stället ladda ner grenen 18.0 som zip-fil från GitHub och packa upp den till addons/odoo-l10n_se.

Grundmodulen klarar sig med det som redan finns i Odoo. Vissa av de andra modulerna i samma repo, till exempel momsrapporten, behöver moduler från OCA och Python-paket; de står i filerna requirements.repo och requirements.txt i repot, och repots README länkar till installationsanvisningen. Vänta med dem tills grunden fungerar.

Filerna ni klistrar in

  1. Skapa inställningsfilen. Skriv nano config/odoo.conf och tryck retur. Nano är en textredigerare som körs i terminalen. Klistra in det här:
    [options]
    addons_path = /mnt/extra-addons/odoo-l10n_se
    data_dir = /var/lib/odoo
    admin_passwd = byt-ut-mig-mot-nagot-langt-och-eget
    list_db = True
    proxy_mode = True
    Raden admin_passwd är huvudlösenordet som skyddar databashanteringen. Standardvärdet i Odoo är ordet admin, vilket varenda person på internet känner till. Byt ut texten mot minst tjugo tecken som ni hittar på själva. list_db = True slår på databashanteraren så att ni kan skapa databasen; den stänger ni av direkt efteråt. proxy_mode = True behövs för att Odoo ska fungera bakom webbservern som sköter HTTPS. Spara med Ctrl och O, retur, och stäng med Ctrl och X.
  2. Skapa startfilen. Skriv nano docker-compose.yml och klistra in:
    services:
      odoo:
        image: odoo:18.0
        depends_on:
          - db
        ports:
          - "127.0.0.1:8069:8069"
        environment:
          - HOST=db
          - USER=odoo
          - PASSWORD=ett-annat-langt-losenord
        volumes:
          - odoo-data:/var/lib/odoo
          - ./config:/etc/odoo
          - ./addons:/mnt/extra-addons
        restart: unless-stopped
      db:
        image: postgres:16
        environment:
          - POSTGRES_DB=postgres
          - POSTGRES_USER=odoo
          - POSTGRES_PASSWORD=ett-annat-langt-losenord
        volumes:
          - db-data:/var/lib/postgresql/data
        restart: unless-stopped
    
    volumes:
      odoo-data:
      db-data:
    Filen beskriver två program som ska köras: Odoo självt, och PostgreSQL som är databasen där all information sparas. ports gör Odoo nåbart på port 8069, men bara från datorn själv: 127.0.0.1 betyder att ingen utifrån kommer åt porten direkt. volumes är lagringsutrymmen som lever kvar även när programmen startas om, och det är där era fakturor faktiskt ligger. restart: unless-stopped gör att allt startar igen av sig självt om servern startas om.
  3. Byt ut båda förekomsterna av ett-annat-langt-losenord mot samma egna lösenord. De två raderna måste vara identiska, annars kommer Odoo inte in i databasen. Spara och stäng med Ctrl och O, retur, Ctrl och X.
  4. Starta alltihop:
    docker compose up -d
    Kommandot laddar ner Odoo och PostgreSQL och startar dem i bakgrunden, vilket är vad -d betyder. Första gången tar det några minuter eftersom filerna hämtas.
  5. Öppna Odoo i webbläsaren. På egen dator skriver ni http://localhost:8069. På molnservern når ni bara Odoo från servern själv, så databasen skapar ni genom en SSH-tunnel från er egen dator. Öppna Terminal på Mac eller Linux Mint, eller PowerShell på Windows, och skriv med serverns IP-adress:
    ssh -L 8069:127.0.0.1:8069 root@123.45.67.89
    Logga in med root-lösenordet och låt fönstret vara öppet. Så länge tunneln är uppe når ni Odoo på http://localhost:8069 i er egen webbläsare, och trafiken går krypterad genom SSH.

Exponera aldrig Odoo direkt mot internet över okrypterad HTTP. Då skickas lösenord och kunduppgifter i klartext, och databashanteraren blir åtkomlig för vem som helst som hittar adressen. Därför är porten bunden till 127.0.0.1, databashanteraren stängs av när databasen är skapad, och resten av företaget når systemet via HTTPS enligt avsnittet längre ner.

Skapa databasen och välj appar

  1. Fyll i formuläret som möter er. Master Password är huvudlösenordet ur odoo.conf. Database Name kan vara företagsnamnet med små bokstäver och utan mellanslag. Mejl och lösenord blir ert inloggningskonto, så använd företagets gemensamma mejladress.
  2. Sätt Language till Svenska och Country till Sverige. Landvalet gör att Odoo installerar den svenska lokaliseringen och lägger in kontoplanen automatiskt. Går ni över till fel land går det att byta under Redovisning, Inställningar, Fiscal Localization, men bara fram tills ni bokfört den första verifikationen, sätt det rätt nu i stället för att lita på det.
  3. Låt rutan Demo data vara omarkerad. Med demodata fylls systemet med påhittade kunder och produkter som ni sedan får rensa bort för hand.
  4. Klicka Create database och vänta. Odoo bygger databasen, vilket tar en minut eller två.
  5. Installera Fakturering i appöversikten som möter er efter inloggningen. Sök upp appen och klicka Aktivera. Det är den app som ger er kunder, produkter, fakturor och bokföringsunderlag.
  6. Installera CRM på samma sätt. CRM står för Customer Relationship Management och är där ni följer varje kundkontakt från första samtalet till avslutad affär. För ett företag är det främst en gemensam att-göra-lista över vilka kunder någon har lovat att höra av sig till.
  7. Kontrollera lokaliseringen. Gå till Appar, ta bort filtret i sökrutan och sök på l10n_se. Modulen l10n_se: Sweden - Accounting ska stå som installerad. Gör den inte det, slå på utvecklarläget längst ner under Inställningar, uppdatera applistan från menyn i Appar och installera modulen.
  8. Stanna där. Odoo har hundratals appar och frestelsen att installera Lager, Tillverkning och Projekt är stor. Varje app ni installerar lägger till menyer och fält som resten av företaget måste förstå. Lägg till fler först när någon konkret saknar något.

Stäng databashanteraren

Databasen finns nu, och databashanteraren behövs inte längre. Öppna config/odoo.conf igen, ändra raden till list_db = False och starta om Odoo:

docker compose restart odoo

Nu går det varken att lista, kopiera, radera eller skapa databaser från webbläsaren. Säkerhetskopior tar ni från terminalen i stället, som längre ner.

HTTPS med certbot (väg A)

För att resten av företaget ska nå Odoo lägger ni en webbserver framför, nginx, och ett gratis certifikat från Let's Encrypt som programmet certbot hämtar och förnyar åt er. Då går all trafik krypterad över HTTPS.

  1. Lägg in en A-post för till exempel odoo.foretaget.se som pekar på serverns IP-adress, där domänens DNS sköts. Vänta tills adressen svarar; det tar från några minuter till några timmar.
  2. Installera nginx och certbot på servern:
    apt update
    apt install -y nginx certbot python3-certbot-nginx
  3. Skapa webbserverns inställning med nano /etc/nginx/sites-available/odoo och klistra in, med er egen adress på raden server_name:
    server {
        listen 80;
        server_name odoo.foretaget.se;
        client_max_body_size 50m;
    
        location / {
            proxy_pass http://127.0.0.1:8069;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        location /websocket {
            proxy_pass http://127.0.0.1:8069;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  4. Slå på inställningen, kontrollera den och ladda om nginx:
    ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
    rm /etc/nginx/sites-enabled/default
    nginx -t
    systemctl reload nginx
    nginx -t ska svara att syntaxen är ok. Gör den inte det, öppna filen igen och leta efter en saknad klammer eller semikolon.
  5. Hämta certifikatet:
    certbot --nginx -d odoo.foretaget.se
    certbot frågar efter en mejladress för påminnelser och om ni godkänner villkoren, hämtar certifikatet och skriver om nginx-inställningen så att all trafik går över HTTPS. Certifikatet gäller i 90 dagar och förnyas automatiskt; certbot renew --dry-run visar att förnyelsen fungerar.
  6. Släpp bara in det som behövs i brandväggen:
    ufw allow OpenSSH
    ufw allow "Nginx Full"
    ufw enable
    OpenSSH först, annars stänger ni ute er själva. Port 8069 behöver inte öppnas, eftersom Odoo bara lyssnar på 127.0.0.1.

Nu når alla i företaget systemet på https://odoo.foretaget.se, med hänglåset i adressfältet.

Ställ in företaget för svensk verksamhet

  1. Gå till Inställningar, sedan Användare och företag, sedan Företag. Klicka på företagsraden och fyll i företagets namn och adress, organisationsnumret och momsregistreringsnumret om företaget har ett. För en enskild firma är organisationsnumret ert personnummer. Lägg in loggan om ni har en, den hamnar på alla fakturor.
  2. Skriv texten som ska stå längst ner på fakturan. Den ställs in under Inställningar, avsnittet Företag, Konfigurera dokumentlayout, fältet Sidfot. Har företaget F-skatt, skriv ”Godkänd för F-skatt” där. Skatteverket anger att uppgiften ska stå på varje faktura, och en kund som ser den behöver inte dra skatt på det den betalar. Ett aktiebolag ska dessutom ha med styrelsens säte på sina fakturor, och sidfoten är ett bra ställe för det.

För UF-företag

Fyll i UF-företagets namn och adress och lämna fältet för organisationsnummer tomt. Ett UF-företag har inget organisationsnummer och inget annat nummer som passar där, och Odoo kräver inte fältet. Skriv ingenting om F-skatt i sidfoten.

Momsen

Landvalet Sverige gjorde att Odoo lade in den svenska kontoplanen med färdiga momsskatter: 25, 12 och 6 procent på försäljning och inköp, uppdelat på varor och tjänster, plus 0 procent för försäljning till andra EU-länder och export. Öppna Fakturering, sedan Konfiguration, sedan Inställningar och titta under rubriken om skatter.

  • Momsregistrerat företag: standardskatten på försäljning ska vara 25 procent och på inköp 25 procent ingående moms. Står något annat där, välj rätt skatt och klicka Spara. Varor med 12 eller 6 procent får sin skatt på produkten.
  • Momsbefriat företag: töm fälten för standardskatt på försäljning och på inköp och klicka Spara. Då läggs ingen moms på fakturorna.

För UF-företag

Töm fälten för standardskatt på försäljning och på inköp och klicka Spara. Ett UF-företag kan inte momsregistreras och lägger ingen moms på sina priser. Vad det betyder för era kunder står i Betalningsgateways.

Momsråden här är vår läsning av reglerna, inte skatterådgivning; vi är inte revisorer. Kontrollera mot Skatteverket vad som gäller för ert företag innan första riktiga fakturan går ut.

  1. Lägg upp era produkter under Fakturering, Kunder, Produkter. Sätt priset ni tar av kunden. Är företaget momsregistrerat ska produkten ha rätt momsskatt; annars lämnar ni skattefältet tomt.
  2. Bjud in företaget. Inställningar, Användare och företag, Användare, Ny. Skriv in namn och mejladress för var och en. I Community Edition kostar användare ingenting, så det finns ingen anledning att dela på ett konto.
  3. Skriv en testfaktura till er själva och skicka den som PDF. Det är enda sättet att se att företagsuppgifter, moms, valuta och layout faktiskt sitter rätt innan en riktig kund får en.

Säkerhetskopiera databasen

Allt ni gjort ligger i databasen, och databasen ligger på en server som kan gå sönder eller raderas av misstag. Ta en säkerhetskopia varje månad, och alltid en extra innan något stort ändras.

Databashanteraren är avstängd, så säkerhetskopian tas i terminalen, i mappen där docker-compose.yml ligger. Byt foretaget mot namnet på er databas.

  1. Kopiera databasen:
    docker compose exec -T db pg_dump -U odoo -Fc foretaget > foretaget-$(date +%F).dump
  2. Kopiera de bifogade filerna, till exempel loggan och sparade PDF-fakturor, som ligger utanför databasen:
    docker compose exec -T odoo tar -czf - -C /var/lib/odoo/filestore foretaget > filer-$(date +%F).tar.gz
  3. Flytta båda filerna från servern till företagets gemensamma lagring, och en kopia till den som sköter ekonomin. Från er egen dator går det med scp root@123.45.67.89:/opt/odoo/foretaget-*.dump . och motsvarande för filarkivet. Bokföringsunderlag ska sparas i sju år enligt bokföringslagen.

Kommandot docker compose down -v raderar era volymer, alltså hela databasen och alla fakturor, utan att fråga. Flaggan -v är hela skillnaden. Vill ni bara stoppa Odoo skriver ni docker compose down utan flaggan, och ni startar igen med docker compose up -d. Tappar ni bort huvudlösenordet går det inte att återställa via webbläsaren, ni får redigera config/odoo.conf på servern igen.

Så här vet ni att det funkade

Kommandot docker compose ps listar båda tjänsterna med status Up. Adressen https://odoo.foretaget.se visar Odoos inloggningsruta med hänglåset i adressfältet från en annan dator än den ni installerade från, och två personer i företaget kan vara inloggade samtidigt. Adressen http:// följd av serverns IP-adress och :8069 svarar inte alls, och /web/database/manager säger att databashanteraren är avstängd. Menyerna står på svenska, valutan är kronor, och en testfaktura går att skapa och ladda ner som PDF med ert företagsnamn högst upp. Är företaget momsregistrerat står momsen på en egen rad; annars finns ingen momsrad. Startar ni om servern från DigitalOcean-panelen är Odoo uppe igen av sig självt inom ett par minuter. Och ni har en säkerhetskopia av databasen och filerna sparad någon annanstans än på servern.

Om det går fel

  • Sidan svarar inte alls efter docker compose up -d: ge det två minuter till, Odoo bygger klart i bakgrunden. Kör docker compose logs odoo för att se vad som händer. Raden HTTP service (werkzeug) running betyder att den är igång.
  • Ett felmeddelande om att databasen inte går att nå: lösenordet under PASSWORD hos odoo och under POSTGRES_PASSWORD hos db är inte identiska. Rätta filen, kör docker compose down och sedan docker compose up -d igen.
  • certbot säger att domänen inte går att verifiera: A-posten pekar inte på servern ännu, eller port 80 är stängd. Kontrollera adressen med ping odoo.foretaget.se, att ufw status visar Nginx Full, och försök igen.
  • Huvudlösenordet godkänns inte när ni ska skapa databasen: mappen config låg inte där ni trodde. Kontrollera med ls config att filen odoo.conf finns, och att ni står i mappen /opt/odoo när ni kör docker compose.
  • Odoo blir långsamt eller stängs av av sig självt: servern har för lite minne. Uppgradera droppleten till 8 GB i DigitalOcean-panelen under Resize, det går att göra i efterhand utan att något försvinner.
  • Fel land eller fel språk valdes när databasen skapades: har ni inte bokfört något ännu går landet att byta under Redovisning, Inställningar, Fiscal Localization. Har ni redan bokfört, skapa en ny databas och börja om: sätt tillfälligt list_db = True, starta om Odoo, skapa databasen genom SSH-tunneln och stäng databashanteraren igen. Det är billigare att göra om nu än senare.
  • Krediten är slut och kortet börjar dras: ta en säkerhetskopia först, sedan kan ni stänga av servern under Destroy. Databasen finns kvar i säkerhetskopian och går att läsa in i en lokal installation enligt väg B med pg_restore.

Vad ni gör härnäst

Med affärssystemet igång är nästa steg att få pengarna att flyta in i det. Betalningsgateways visar hur ni tar betalt av kunder och vad som gäller kring moms. Har ni inte satt upp bokföringen ännu är Bokföring nästa guide att ta, för Odoo ersätter inte den ordningen utan matar den. Ska ni sälja på nätet parallellt finns WordPress och WooCommerce.