Skip to content

Commit 3bc48ee

Browse files
marcarlclaude
andcommitted
Add ADR-005 for GitHub Pages hosting decision
Dokumenterar beslutet att använda GitHub Pages som primär hosting-lösning för den genererade HTML-webbplatsen. Fördelar: - Helt gratis för publika repositories - Enkel integration med befintlig GitHub-baserad workflow - Automatisk deployment via GitHub Actions - Inbyggd CDN och HTTPS - URL-rewrites fungerar automatiskt Alternativ som övervägdes: - Cloudflare R2 (finns som backup, men URL-rewrites fungerar inte) - Cloudflare R2 + Workers (löser rewrites men kostar $5/månad) - Docker Container (flexibelt men kräver hosting och mer komplexitet) - Traditionell hosting (kostnad och underhåll) - Netlify/Vercel (ingen fördel för statiska filer) Migration är enkel tack vare att det bara är statiska HTML-filer. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 0ce3ebb commit 3bc48ee

2 files changed

Lines changed: 228 additions & 1 deletion

File tree

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
# ADR-005: GitHub Pages som hosting för webbplatsen
2+
3+
## Status
4+
5+
Accepterad
6+
7+
## Kontext och problembeskrivning
8+
9+
För att publicera de genererade HTML-filerna av SFS-författningar behövde vi välja en hosting-lösning. Projektet genererar statiska HTML-filer som behöver vara publikt tillgängliga på webben.
10+
11+
Huvudalternativen var:
12+
13+
1. **GitHub Pages**: Hosting direkt via GitHub
14+
2. **Cloudflare R2**: Object storage med HTTP-access
15+
3. **Cloudflare R2 + Workers**: Object storage med serverless rewrites
16+
4. **Docker Container**: Containeriserad webserver (nginx/Apache)
17+
5. **Traditionell hosting**: VPS eller shared hosting
18+
19+
Utmaningarna var:
20+
21+
- **Kostnad**: Projektet har ingen budget för hosting
22+
- **Enkelhet**: Lösningen ska vara enkel att sätta upp och underhålla
23+
- **Integration**: Bör fungera smidigt med befintlig GitHub-baserad workflow
24+
- **Suveränitet**: Beroende av externa tjänster
25+
- **URL-hantering**: Behov av att `example.com/folder/` automatiskt servar `index.html`
26+
- **Migrering**: Möjlighet att flytta till annan lösning om behov uppstår
27+
28+
## Beslut
29+
30+
Vi använder **GitHub Pages** som primär hosting-lösning för den genererade HTML-webbplatsen.
31+
32+
### Arkitektur
33+
34+
```text
35+
GitHub Actions Workflow
36+
37+
Genererar HTML-filer
38+
39+
Publicerar till gh-pages branch
40+
41+
GitHub Pages
42+
43+
Publik webbplats (https://[org].github.io/[repo])
44+
```
45+
46+
### Backup-lösning
47+
48+
Cloudflare R2 används som backup och alternativ hosting:
49+
50+
- HTML-filer synkas även till R2 bucket
51+
- Kan aktiveras som fallback vid problem med GitHub Pages
52+
- Begränsning: Kräver Cloudflare Workers för fullständig funktionalitet (rewrites)
53+
54+
## Konsekvenser
55+
56+
### Positiva
57+
58+
- **Helt gratis**: GitHub Pages är kostnadsfritt för publika repositories
59+
- **Enkel integration**: Seamless integration med GitHub-baserad workflow
60+
- Same platform som source code, issues, och pull requests
61+
- Automatisk deployment via GitHub Actions (redan konfigurerat)
62+
- Inget behov av externa credentials eller API-nycklar
63+
- **Ingen infrastruktur**: Ingen server att underhålla eller uppdatera
64+
- **Inbyggd CDN**: GitHub Pages använder CDN för snabb leverans globalt
65+
- **HTTPS automatiskt**: SSL/TLS-certifikat hanteras automatiskt
66+
- **URL-rewrites fungerar**: `example.com/1999/1/` servar automatiskt `index.html`
67+
- **Custom domain-stöd**: Möjlighet att använda egen domän
68+
- **Versionshistorik**: All publicerad content finns i `gh-pages` branch
69+
- **Enkel att förstå**: Lågtröskel för bidragsgivare att förstå deployment
70+
71+
### Negativa
72+
73+
- **Suveränitetsberoende**: Projektet är beroende av GitHubs tillgänglighet och villkor
74+
- Mitigering: GitHub är en stabil plattform med hög uptime
75+
- Mitigering: Enkel migrering (se nedan)
76+
77+
- **Begränsad kontroll**: Mindre flexibilitet än egen hosting
78+
- Kan inte köra server-side logic
79+
- Begränsade HTTP-headers och caching-policies
80+
- Mitigering: Statiska HTML-filer kräver inte server-side logic
81+
82+
- **GitHub-specifikt**: Lösningen är kopplad till GitHub som plattform
83+
- Mitigering: Projektet använder redan GitHub för allt annat
84+
- Mitigering: Automatiserad deployment gör migrering enkel
85+
86+
### Migrering är enkel
87+
88+
Eftersom vi bara publicerar statiska HTML-filer är migrering trivial:
89+
90+
- Kopiera alla filer från `gh-pages` branch
91+
- Ladda upp till ny hosting-lösning
92+
- Uppdatera DNS (om custom domain används)
93+
- Cloudflare R2 backup finns redan som färdig alternativ lösning
94+
95+
Migreringstid: < 1 timme
96+
97+
## Alternativ som övervägdes
98+
99+
### 1. Cloudflare R2 (utan Workers)
100+
101+
**Fördelar**:
102+
103+
- Extremt billig storage (~$0.015/GB/månad)
104+
- Ingen vendor lock-in till GitHub
105+
- Egen kontroll över filer
106+
- Redan implementerad som backup-lösning
107+
108+
**Varför inte valt som primär lösning**:
109+
110+
- **URL-rewrites fungerar inte**: `/folder/` servar inte automatiskt `index.html`
111+
- Problem: Användare måste besöka `/folder/index.html` explicit
112+
- Problemet gäller även för root: `example.com/` fungerar inte
113+
- Kräver manuell upload-process eller separat CI/CD
114+
- Mer komplext att sätta upp än GitHub Pages
115+
- Kräver hantering av Cloudflare-credentials
116+
117+
### 2. Cloudflare R2 + Workers
118+
119+
**Fördelar**:
120+
121+
- Löser URL-rewrite problemet via Workers
122+
- Full kontroll över HTTP-routing och headers
123+
- Kraftfull om avancerad logik behövs
124+
125+
**Varför inte valt**:
126+
127+
- **Kostnad**: Workers kostar $5/månad (minimum)
128+
- Projektet har ingen budget
129+
- **Komplexitet**: Kräver Worker-kod för URL-rewrites
130+
- **Overkill**: Statiska HTML-filer behöver inte serverless compute
131+
- **Underhåll**: Ytterligare kod att underhålla
132+
133+
### 3. Docker Container med nginx/Apache
134+
135+
**Fördelar**:
136+
137+
- Full kontroll över konfiguration och deployment
138+
- Portabelt - kan köras var som helst (lokalt, VPS, cloud)
139+
- Standard webserver (nginx/Apache) hanterar URL-rewrites automatiskt
140+
- Ingen vendor lock-in
141+
- Kan köras gratis på många plattformar (Fly.io free tier, Railway, etc.)
142+
143+
**Varför inte valt**:
144+
145+
- **Hosting krävs fortfarande**: Container måste köras någonstans
146+
- Gratis alternativ finns men ofta med begränsningar
147+
- Kräver egen server eller cloud-plattform för produktion
148+
- **Mer komplext deployment**: Container registry, orchestration, deployment
149+
- **Underhåll**: Container images måste uppdateras och hanteras
150+
- **CI/CD komplexitet**: Kräver byggsteg för container + push till registry + deployment
151+
- **Overkill**: Container-infrastruktur är onödigt komplext för enbart statiska filer
152+
- **Kostnad över tid**: Även "gratis" tiers har begränsningar, kan kräva betalning senare
153+
154+
### 4. Traditionell hosting (VPS/Shared hosting)
155+
156+
**Varför inte valt**:
157+
158+
- **Kostnad**: VPS kostar $5-20/månad, shared hosting $3-10/månad
159+
- **Underhåll**: Kräver serveradministration, säkerhetsuppdateringar
160+
- **Komplexitet**: Overkill för statiska filer
161+
- **CI/CD**: Kräver SSH-credentials och deployment-scripts
162+
163+
### 5. Netlify/Vercel
164+
165+
**Fördelar**:
166+
167+
- Liknande fördelar som GitHub Pages
168+
- Fler features (serverless functions, forms)
169+
170+
**Varför inte valt**:
171+
172+
- Ingen fördel för vårt användningsfall (bara statiska filer)
173+
- Ytterligare extern tjänst att hantera
174+
- GitHub Pages är enklare när allt redan finns på GitHub
175+
176+
## Relaterade beslut
177+
178+
- [ADR-001](001-markdown-som-mellanformat.md) - Markdown som mellanformat (genererar HTML-output)
179+
- Workflow-konfiguration: `.github/workflows/github-pages-workflow.yml`
180+
181+
## Noteringar
182+
183+
- **Deployment-process**:
184+
185+
```yaml
186+
# GitHub Actions workflow
187+
1. Checkout code
188+
2. Generera HTML-filer (exporters/html/)
189+
3. Publicera till gh-pages branch
190+
4. GitHub Pages servar automatiskt från gh-pages
191+
```
192+
193+
- **URL-struktur**:
194+
- Format: `https://[org].github.io/[repo]/[path]/`
195+
- Custom domain möjlig: `https://custom-domain.se/[path]/`
196+
197+
- **Cloudflare R2 backup**:
198+
- Filer synkas till R2 parallellt
199+
- Script: `tools/upload_to_cloudflare.py`
200+
- Kan aktiveras manuellt vid behov
201+
- Begränsning: URL-rewrites fungerar inte utan Workers
202+
203+
- **Framtida möjligheter**:
204+
- Custom domain kan adderas utan kod-ändringar
205+
- Kan byta till R2+Workers om budget tillkommer
206+
- Migrering till annan plattform är trivial (kopiera filer)
207+
208+
- **Performance**:
209+
- GitHub Pages använder Fastly CDN
210+
- Bra global latency
211+
- Automatisk gzip-kompression
212+
213+
- **Begränsningar** (GitHub Pages limits):
214+
- Max 1 GB repository size (långt ifrån vår användning)
215+
- Max 100 GB bandwidth/månad (mer än tillräckligt)
216+
- Max 10 builds/timme (vi bygger vid code changes)
217+
218+
- **Exempel på GitHub Pages URL-rewrites**:
219+
220+
```text
221+
/1999/1/ → /1999/1/index.html
222+
/1999/1/kapitel-1 → /1999/1/kapitel-1/index.html
223+
/ → /index.html
224+
```
225+
226+
Detta fungerar automatiskt utan konfiguration.

docs/adr/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ Vi använder [MADR](https://adr.github.io/madr/) (Markdown Any Decision Records)
1919
## Index över ADR:er
2020

2121
| ADR | Titel | Status |
22-
|-----|-------|--------|
22+
| --- | ----- | ------ |
2323
| [ADR-001](001-markdown-som-mellanformat.md) | Markdown som mellanformat | Accepterad |
2424
| [ADR-002](002-import-fran-regeringskansliet.md) | Import från Regeringskansliet istället för PDF-crawling | Accepterad |
2525
| [ADR-003](003-git-commits-historiska-datum.md) | Git-commits med historiska datum för versionshistorik | Accepterad |
2626
| [ADR-004](004-semantiska-temporal-taggar.md) | Semantiskt val av taggar för temporal data | Accepterad |
27+
| [ADR-005](005-github-pages-hosting.md) | GitHub Pages som hosting för webbplatsen | Accepterad |
2728

2829
## Skapa en ny ADR
2930

0 commit comments

Comments
 (0)