Move client-map to a directory bind-mount. Editing bind-mounted files (with vim) changes their inode

This commit is contained in:
2026-04-03 15:31:35 +02:00
parent 5f76c7b3b6
commit e2bf619249
5 changed files with 9 additions and 8 deletions

View File

@@ -10,6 +10,7 @@ RUN apk add --no-cache ca-certificates tzdata
WORKDIR /app WORKDIR /app
COPY --from=builder /build/clab-webserver . COPY --from=builder /build/clab-webserver .
COPY docroot/ docroot/ COPY docroot/ docroot/
COPY config/ config/
EXPOSE 80 EXPOSE 80
ENTRYPOINT ["/app/clab-webserver"] ENTRYPOINT ["/app/clab-webserver"]
CMD ["-listen", ":80"] CMD ["-listen", ":80"]

View File

@@ -36,10 +36,10 @@ topology:
kind: linux kind: linux
image: git.ipng.ch/ipng/clab-webserver:latest image: git.ipng.ch/ipng/clab-webserver:latest
binds: binds:
- client-map.yaml:/app/client-map.yaml:ro - config:/app/config:ro
- docroot:/app/docroot:ro - docroot:/app/docroot:ro
env: env:
CLIENT_MAP: /app/client-map.yaml CLIENT_MAP: /app/config/client-map.yaml
DOCROOT: /app/docroot DOCROOT: /app/docroot
LISTEN: ":80" LISTEN: ":80"
ports: ports:
@@ -143,11 +143,11 @@ All options can be set via CLI flag or environment variable. Flags take preceden
```sh ```sh
# Run directly # Run directly
go run . -client-map client-map.yaml go run . -client-map config/client-map.yaml
# Build and run # Build and run
go build -o clab-webserver . go build -o clab-webserver .
./clab-webserver -client-map client-map.yaml -listen :8080 ./clab-webserver -client-map config/client-map.yaml -listen :8080
# Docker # Docker
docker compose build docker compose build
@@ -221,6 +221,6 @@ them and returning a unique token they can record and submit.
### Deployment ### Deployment
- Packaged as a multi-stage Docker image based on Alpine. - Packaged as a multi-stage Docker image based on Alpine.
- `docroot/` is baked into the image; `client-map.yaml` is expected as a bind mount. - `docroot/` is baked into the image; `config/` (containing `client-map.yaml`) is expected as a bind-mounted directory.
- All configuration is available as both CLI flags and environment variables. - All configuration is available as both CLI flags and environment variables.
- Image: `git.ipng.ch/ipng/clab-webserver:latest` - Image: `git.ipng.ch/ipng/clab-webserver:latest`

View File

@@ -5,9 +5,9 @@ services:
ports: ports:
- "80:80" - "80:80"
volumes: volumes:
- ./client-map.yaml:/app/client-map.yaml:ro - ./config:/app/config:ro
environment: environment:
LISTEN: ":80" LISTEN: ":80"
CLIENT_MAP: /app/client-map.yaml CLIENT_MAP: /app/config/client-map.yaml
DOCROOT: /app/docroot DOCROOT: /app/docroot
restart: unless-stopped restart: unless-stopped

View File

@@ -180,7 +180,7 @@ func (lrw *loggingResponseWriter) Write(b []byte) (int, error) {
} }
func main() { func main() {
clientMapPath := flag.String("client-map", getEnv("CLIENT_MAP", "client-map.yaml"), "path to client-map YAML file [$CLIENT_MAP]") clientMapPath := flag.String("client-map", getEnv("CLIENT_MAP", "config/client-map.yaml"), "path to client-map YAML file [$CLIENT_MAP]")
listenAddr := flag.String("listen", getEnv("LISTEN", ":80"), "listen address [$LISTEN]") listenAddr := flag.String("listen", getEnv("LISTEN", ":80"), "listen address [$LISTEN]")
docrootDir := flag.String("docroot", getEnv("DOCROOT", "docroot"), "path to docroot directory [$DOCROOT]") docrootDir := flag.String("docroot", getEnv("DOCROOT", "docroot"), "path to docroot directory [$DOCROOT]")
flag.Parse() flag.Parse()