---
title: Installation
url: 'https://groovy.simplo.dev/handbok/drift/installation'
updated: '2026-10-30'
description: 'En ny server från grunden: Grav och dess plugin med pluginhanteraren, temat och Groovys plugin ur paket, konfigen och det första kontot.'
---

# Installation

En ny server från grunden: Grav och dess plugin med pluginhanteraren, temat och Groovys plugin ur paket, konfigen och det första kontot.

En ny installation byggs av en ren Grav, Gravs egna plugin från Gravs pluginhanterare (`bin/gpm`) och Groovys fyra delar ur paket: temat *groovy-docs* och pluginen *subsites*, *mail-auth* och *mcp*. Ingen kod behöver kopieras från repot.

Alla kommandon på servern körs från webbroten, som den användare som äger filerna där. Annars kan sajten inte skriva i sina egna mappar.

## Det som behövs

- **PHP** i den version Grav kräver (Grav 2.2: 8.3 eller senare), med tilläggen `zip`, `dom`, `xmlwriter`, `mbstring` och `gd`. `pdo_sqlite`behövs för sökning på servern.
- **nginx**, om installationen ska ha fler än en sajt. Regeln för flera sajter finns bara för nginx. Med Apache fungerar grundsajten, men inga subsajter.
- **En SMTP-server** för inloggningsmejlen. Alla utom super-admin loggar in med en länk i ett mejl.
- **Utgående HTTPS från PHP** är valfritt: webbfonter och förhandsbilder för inbäddade videor. Utan det används systemfonter och en vanlig spelare.

## Paketen

Paketen byggs från en klon av repot och hamnar i mappen `dist/`, som inte checkas in:

```
bin/setup
bin/package
```

Det ger:

| Fil | Vad |
|---|---|
| `groovy-docs-<version>.zip` | temat |
| `subsites-<version>.zip`, `mail-auth-<version>.zip`, `mcp-<version>.zip` | pluginen |
| `groovy-multisite.zip` | `setup.php` och nginx-regeln, för flera sajter |
| `skill-groovy-docs-super-admin.zip`, `skill-groovy-docs-editor.zip` | temats skills för en AI-klient (sidan AI-klient) |
| `VERSIONS.txt` | den Grav och de plugin delarna är provade med |

Paketen byggs från det som är incheckat. Bygg dem på nytt efter en ändring i temat eller pluginen. Kopiera dem till servern.

## Steg för steg

1. **Grav.** Hämta Grav i versionen i `VERSIONS.txt` från Gravs sida på GitHub (*Releases*, filen `grav-v<version>.zip`). Packa upp den så att mappen blir webbroten.
2. **Gravs plugin**, i versionerna i `VERSIONS.txt`. Ett plugin i taget, med adressen till just den versionen:

    ```
    php bin/gpm direct-install -y https://getgrav.org/download/plugins/form/<version>
    ```

    Gör så för `form`, `email`, `login`, `api`, `admin2`, `flex-objects` och `tntsearch`. Med `bin/gpm install` kan ett plugin bli nyare än det provade, eftersom ett annat plugin kräver det.

    `error`, `problems`, `shortcode-core` och `github-markdown-alerts`följer med Grav. Jämför deras versioner med `VERSIONS.txt`(`php bin/gpm version <namn>`).
3. **Temat och Groovys plugin**, ett paket i taget:

    ```
    php bin/gpm direct-install -y /sökväg/till/groovy-docs-<version>.zip
    php bin/gpm direct-install -y /sökväg/till/subsites-<version>.zip
    php bin/gpm direct-install -y /sökväg/till/mail-auth-<version>.zip
    php bin/gpm direct-install -y /sökväg/till/mcp-<version>.zip
    ```

    Utan tillgång till serverns filer: ladda upp paketen i Admin2 (på `/admin`, efter steg 6) under **Tools → Direct Install**. Temat är ungefär 6 MB. PHP tillåter ofta bara 2 MB per uppladdning, och Admin2 svarar då *Either a "url" field or an uploaded "file" is required*. Höj gränsen i PHP:s inställningar först:

    ```ini
    upload_max_filesize = 64M
    post_max_size = 64M
    ```

    Starta sedan om PHP. I imagen `linuxserver/grav` hör raderna hemma i `/config/php/php-local.ini`. Med Easypanel kan filen läggas dit utan terminal: tjänsten → **Storage** → **Add File Mount**, med sökvägen ovan och raderna som innehåll, och sedan **Deploy**.
4. **Konfigen.** Allt i det här steget går att göra i Admin2 (på `/admin`, efter steg 6). Inställningarna för bilagor, skyddade grenar, sessionen och CSS sätter temat och `subsites` själva.

    - **Temat:** Themes → **Groovy Docs** → *Activate*. Det skriver `pages.theme: groovy-docs` i `user/config/system.yaml`.
    - **Felsidor:** Configuration → System → *Error handler* → *Display errors*: **Simple Error**. Besökare ser då inga sökvägar eller kod. Felen skrivs till loggen.
    - **Inloggningen:** Plugins → Login → *Site host*: serverns adress, utan avslutande snedstreck, till exempel `https://docs.example.com`. Utan den skickas inga inloggningsmejl. Lämna Configuration → System → Advanced → *Custom base URL* tom. Med flera sajter tar den bort subsajternas prefix ur länkarna. Bakom en proxy som sköter `https` (Easypanel) räcker *Reverse proxy setup*och *Site host*.
    - **tntsearch:** Plugins → TNT Search → avstängt. Pluginet ska vara installerat men avstängt: temat använder bara dess bibliotek, och pluginets egen sökning visar skyddade sidor.
    - **E-post:** Plugins → Email: *Mail engine* SMTP, serverns adress, port, kryptering och inloggning, och avsändaren (*From*). Prova med ett testmejl från webbroten: `php bin/plugin email test-email -t <adress>`.
    - **Språket:** en svensk installation sätter *Interface language* till *Svenska* under *Alla sajter*: **System-Admin** → *Temainställningar*, fliken General → *Language* (efter steg 6). Mejlen har en egen inställning: Plugins → Mail Auth → *Mail language*, `sv`. Se [Temainställningar → Gränssnittets språk](https://groovy.simplo.dev/handbok/utseende/installningar).

    Utan Admin2 skrivs samma värden i `user/config/system.yaml`(`pages.theme`, `errors.display: 0`), i `user/config/themes/groovy-docs.yaml` (`ui_language: sv`) och i `user/config/plugins/`: `login.yaml` (`site_host`), `tntsearch.yaml`(`enabled: false`), `email.yaml` (`from`, `mailer`) och `mail-auth.yaml`(`mail_language: sv`).
5. **Flera sajter.** Packa upp `groovy-multisite.zip`:

    - `setup.php` läggs i webbroten, bredvid `index.php`;
    - `nginx-multisite.conf` tas med i nginx-konfigurationens `server`-block med `include`. Den ska stå **efter** Gravs egna spärrar (`location`-raderna i `webserver-configs/nginx.conf`) och **före** `location /`. nginx använder den första regel som passar. Ändra `fastcgi_pass` i filen till serverns PHP-FPM.

    Kör `nginx -t` och ladda om nginx.
6. **Super-admin.** Det första kontot är super-admin och det enda med lösenord:

    ```
    php bin/plugin login new-user -u <namn> -e <adress> -l en -P b --admin-type=api -N "<Namn>" -t Admin
    ```

    Kommandot frågar efter lösenordet. Utan konto skickar Grav i stället den första besökaren till `/admin` för att skapa det.
7. **Schemalagda jobb.** Lägg in raden i crontab (sidan Schemalagda jobb).
8. **Töm cachen:** `php bin/grav cache`.

## Kontrollera

1. Öppna sajten. Den visas med temat, med Gravs exempelsida som startsida.
2. Logga in som super-admin på `/login`.
3. Öppna hälsokontrollen (sidan Hälsokontroll). Rätta det som står som *Warning*.
4. **System-Admin** → *Sites* → **Ny sajt** skapar en provsajt. Den första editorn får ett inloggningsmejl med en länk till sajten. Följ länken: editorn är inloggad i den nya sajten. Saknas `setup.php` eller nginx-regeln står det i *Sites* vad som saknas.

Ta bort provsajten i registret efteråt.

## Senare

- **Uppdatera temat eller ett av Groovys plugin:** bygg nya paket och installera dem som i steg 3. Töm cachen.
- **Grav och dess plugin** uppdateras enligt sidan Uppdatering av Grav och plugins.
- **Spärren mot installation i Admin** är av. Slå på den när installationen ska skötas enligt uppdateringsrutinen: Admin2 på grundsajten → Plugins → Subsites → *No installs or updates through Admin*. Med spärren på fungerar inte *Direct Install*.
- **MCP-servern** är avstängd. Hur den slås på står i sidan [AI-klient](https://groovy.simplo.dev/handbok/atkomst/ai-klient), under *För den som driftar*.

---

## Navigation

- Parent: [Drift](https://groovy.simplo.dev/handbok/drift.md)
- Previous: [Drift](https://groovy.simplo.dev/handbok/drift.md)
- Next: [Hälsokontroll](https://groovy.simplo.dev/handbok/drift/halsokontroll.md)
