feat: add Docker setup for documentation site

- Dockerfile.docs for building docs container
- nginx.conf for serving static Starlight site
- docker-compose.yml updated with docs service (--profile docs)
- Updated docs installation/deployment pages
This commit is contained in:
lotherk
2026-03-27 02:29:27 +00:00
parent 0bdd71a4ed
commit 5c8ebc9a03
5 changed files with 84 additions and 0 deletions

18
Dockerfile.docs Normal file
View File

@@ -0,0 +1,18 @@
FROM oven/bun:1.1-alpine AS builder
WORKDIR /app/docs
COPY docs/package.json ./
RUN bun install
COPY docs ./
RUN bun run build
FROM nginx:alpine
COPY --from=builder /app/docs/dist /usr/share/nginx/html
COPY docs/nginx.conf /etc/nginx/http.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -25,5 +25,15 @@ services:
timeout: 10s
retries: 3
docs:
build:
context: .
dockerfile: Dockerfile.docs
ports:
- "4000:80"
restart: unless-stopped
profiles:
- docs
volumes:
deardiary_data:

28
docs/nginx.conf Normal file
View File

@@ -0,0 +1,28 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Starlight static site
location / {
try_files $uri $uri/ $uri.html =404;
}
# SPA fallback for client-side routing
location ~ ^/[^.]+$ {
try_files $uri $uri.html =404;
}
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
}

View File

@@ -91,3 +91,20 @@ DATABASE_URL="postgresql://user:pass@host:5432/deardiary"
### Backup
Regularly backup `./data/` directory.
## Documentation Site
Run the documentation site with Docker:
```bash
# Start just the docs site
docker compose --profile docs up -d
# Access at http://localhost:4000
```
Build the docs Docker image separately:
```bash
docker build -f Dockerfile.docs -t deardiary-docs .
```

View File

@@ -47,6 +47,17 @@ Change these credentials immediately after first login!
|---------|------|-------------|
| App | 8080 | Main application (nginx) |
| API | 3000 | Backend API (internal) |
| Docs | 4000 | Documentation site (optional, run with `--profile docs`) |
## Documentation Site
Run the documentation site separately:
```bash
docker compose --profile docs up -d
```
Access at `http://localhost:4000`
## Data Storage