Files
Archivum/README.md

201 lines
5.2 KiB
Markdown

# Archivum
Archivum är ett självhostat wiki- och dokumenthanteringssystem. Det är tänkt att användas för allt från enkla anteckningar och teknisk dokumentation till världsbyggande inför rollspelskampanjer. Alla dokument lagras som **AsciiDoc**-filer (`.adoc`) på disk, vilket innebär att du kan läsa och redigera dem direkt med valfritt predikat — utan att öppna webbgränssnittet. Applikationen renderar dokumenten till HTML i webbläsaren och hanterar automatisk **versionshantering via Git**, så att varje sparning skapar ett commit och alla ändringar kan rullas tillbaka.
> Se [ARCHITECTURE.md](ARCHITECTURE.md) för detaljerad dokumentation om arkitektur, exekveringsflöden och komponentstruktur.
---
## Användningsområden
- **Anteckningar** — snabbanteckningar och personliga kunskapsbaser
- **Wiki** — team-wiki med dokumentträd och historik
- **Teknisk dokumentation** — API-dokumentation, systembeskrivningar, runbooks
- **Rollspelskampanjer** — världsbyggande, NPC-register, kartor och händelseloggar
---
## Krav
### För att köra med Docker (rekommenderat)
- [Docker](https://docs.docker.com/get-docker/) ≥ 24
- [Docker Compose](https://docs.docker.com/compose/) v2
### För lokal utveckling
- [Go](https://go.dev/dl/) ≥ 1.22
- [Node.js](https://nodejs.org/) ≥ 20 + npm
- [Git](https://git-scm.com/) (används av backenden för versionshantering)
---
## Snabbstart med Docker Compose
### Alternativ A — Hämta image från privat registry (rekommenderat)
Det enklaste sättet att köra Archivum är att hämta en färdigbyggd image från ett privat registry, utan att behöva källkoden.
**1. Logga in mot ditt registry (om det kräver autentisering):**
```bash
docker login ditt-registry.example.com
```
**2. Skapa en `docker-compose.yml`:**
```yaml
services:
archivum:
image: ditt-registry.example.com/archivum:latest
container_name: archivum
restart: unless-stopped
ports:
- "${HOST_PORT:-8080}:4000"
environment:
DOCKER_PATH: /config
UI_DIR: /srv/archivum/ui
PUID: ${PUID:-1000}
PGID: ${PGID:-1000}
TZ: ${TZ:-Europe/Stockholm}
volumes:
- ${DOCKER_PATH:-./local}/config:/config
- ${DOCKER_PATH:-./local}/data:/data
networks:
- archivum-net
networks:
archivum-net:
driver: bridge
```
> Om du kör en **reverse proxy** (t.ex. Nginx Proxy Manager eller Traefik) i en separat compose-stack kan du låta dem dela nätverk istället för att exponera porten direkt. Deklarera då det externa nätverket:
>
> ```yaml
> networks:
> proxy-net:
> external: true
> ```
>
> Och byt ut `archivum-net` mot `proxy-net` i service-definitionen. Ta även bort `ports`-sektionen om proxyn hanterar all trafik.
**3. Skapa en `.env`-fil i samma katalog som `docker-compose.yml`:**
```env
# Sökväg på hosten där config/ och data/ skapas
DOCKER_PATH=/opt/archivum
# Port som exponeras på hosten
HOST_PORT=8080
# Kör containern som denna användare/grupp (kör `id` för att se dina värden)
PUID=1000
PGID=1000
# Tidszon
TZ=Europe/Stockholm
```
**4. Starta:**
```bash
docker compose up -d
```
**5. Öppna** `http://localhost:8080` i webbläsaren. Installationsguiden startar automatiskt vid första körningen.
---
### Alternativ B — Bygg imagen lokalt från källkod
Klona repot och använd den medföljande compose-filen som också bygger imagen:
```bash
docker compose -f docker/docker-compose.yml up -d --build
```
---
## Lokal utveckling
### Backend
```bash
cd backend
go run ./cmd/server
# Servern lyssnar på :4000
# config.json i backend/ används som konfiguration
```
### Frontend
```bash
cd frontend
npm install
npm run dev
# Dev-server på :5173 med proxy till :4000
```
Öppna `http://localhost:5173`. API-anrop proxyas automatiskt till backend-servern.
### Bygga frontend för produktion
```bash
cd frontend
npm run build
# Utdata i frontend/dist/
```
---
## Konfiguration
Konfigurationen lagras i `config.json`. Filen skapas automatiskt av installationsguiden.
| Fält | Beskrivning |
|----------------|-----------------------------------------------------|
| `storage_path` | Sökväg till katalogen där .adoc-filer och Git-repot lagras |
| `db_path` | Sökväg till SQLite-databasen (användarkonton) |
| `jwt_secret` | Hemlig nyckel för session-tokens |
| `listen_addr` | TCP-adress att lyssna på, t.ex. `:4000` |
| `ldap` | Valfri LDAP-konfiguration för företagsinloggning |
---
## Dokumentformat
Alla dokument skrivs i [AsciiDoc](https://asciidoc.org/). Exempeldokument:
```asciidoc
= Mitt dokument
:author: Anna Andersson
:date: 2026-04-12
== Introduktion
Det här är ett *fetstilt* stycke med en https://example.com[länk].
== Kodexempel
[source,go]
----
fmt.Println("Hello, Archivum!")
----
```
Filen sparas som `mitt-dokument.adoc` i `storage_path` och versionshanteras automatiskt.
---
## Docker: Multi-arch build
För att bygga och pusha en image som stöder både AMD64 och ARM64 (Raspberry Pi):
```bash
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t ditt-registry/archivum:latest \
-f docker/Dockerfile --push .
```