diff --git a/.env.example b/.env.example index 1a00f606..2521ea30 100644 --- a/.env.example +++ b/.env.example @@ -32,3 +32,5 @@ EN_DB_BIN_DIR="" # Example: postgresql://gocanto-user:gocanto-password@api-db:5432/oullin_db?sslmode=require ENV_DB_URL="" +# --- The logs directory for Caddy to persists its logs. +CADDY_LOGS_PATH="./storage/logs/caddy" diff --git a/.gitignore b/.gitignore index 4272630e..8247a93d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ storage/media/*.* storage/media/posts/*.* storage/media/users/*.* !storage/logs/.gitkeep +!storage/logs/caddy +!storage/logs/caddy/.gitkeep !storage/media/.gitkeep !storage/media/posts/.gitkeep !storage/media/users/.gitkeep diff --git a/caddy/Caddyfile.prod b/caddy/Caddyfile.prod index 464500f0..ca41dd7e 100644 --- a/caddy/Caddyfile.prod +++ b/caddy/Caddyfile.prod @@ -17,7 +17,22 @@ oullin.io { Referrer-Policy "strict-origin-when-cross-origin" } + log { + output file /var/log/caddy/oullin.io.log { + roll_size 10mb # Rotate logs after they reach 10MB + roll_keep 5 # Keep the last 5 rotated log files + } + + format json + } + # Reverse proxy all requests to the Go application service. # 'api' is the service name defined in docker-compose.yml. - reverse_proxy api:8080 + reverse_proxy api:8080 { + # Set timeouts to prevent slow backends from holding up resources. + transport http { + dial_timeout 10s + response_header_timeout 30s + } + } } diff --git a/docker-compose.yml b/docker-compose.yml index 78ad4857..80a1d127 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,6 +46,7 @@ services: - caddy_data:/data - caddy_config:/config - ./caddy/Caddyfile.prod:/etc/caddy/Caddyfile + - ${CADDY_LOGS_PATH}:/var/log/caddy networks: - caddy_net diff --git a/storage/logs/caddy/.gitkeep b/storage/logs/caddy/.gitkeep new file mode 100644 index 00000000..e69de29b