Files
RenewCMS/features/docker-deployment.feature

46 lines
1.9 KiB
Gherkin

Feature: Docker deployment
RenewCMS can run in a container built from the repository. The container
reuses the existing configuration contract in cmd/server/main.go
(requiredEnvVars, envDefaults); no new variables are introduced.
Background:
Given the image is built with the default build, without the nofrontend tag
And the container runs the binary directly as PID 1 under a non-root user
And the environment sets DB_FILE and UPLOAD_DIR to paths on a named volume
And the required variables PUBLIC_URL, JWT_SECRET, SMTP_LOGIN, SMTP_SENDER, SMTP_PASSWORD, SMTP_HOST and SMTP_PORT come from an env file at runtime
Scenario: Healthy start
When the container starts with every required variable set
Then it logs "RenewCMS <version> (production) listening on :8080"
And GET /healthz on the published port returns 200 with the body "ok"
Scenario: Frontend and API are both served
When the container is running
Then GET / returns 200 with the SPA index.html
And GET /v1/auth/registration returns 200 with a JSON body
Scenario Outline: A missing required variable stops the container
When the container starts without <variable>
Then the process exits with a non-zero status
And the log contains "Environment variable <variable> is not set"
Examples:
| variable |
| PUBLIC_URL |
| JWT_SECRET |
| SMTP_LOGIN |
| SMTP_SENDER |
| SMTP_PASSWORD |
| SMTP_HOST |
| SMTP_PORT |
Scenario: Data survives container recreation
Given an account was registered while the container was running
When the container is removed and recreated on the same named volume
Then the same account can log in
Scenario: Graceful shutdown on SIGTERM
When the container receives SIGTERM
Then the log contains "shutting down..."
And the container exits with status 0 within 10 seconds