No description
Find a file
2025-07-30 20:29:16 +02:00
.vscode Some update 2025-07-19 18:40:55 +02:00
certificates Initial commit 2025-07-11 14:48:23 +02:00
control-server Fix certificate uploading 2025-07-30 20:29:16 +02:00
docker-entrypoint.d Some update 2025-07-19 18:40:55 +02:00
nginx Some update 2025-07-19 18:40:55 +02:00
scripts Some update 2025-07-19 18:40:55 +02:00
.dockerignore Some update 2025-07-19 18:40:55 +02:00
.gitignore Some update 2025-07-19 18:40:55 +02:00
Containerfile Reorder Containerfile to make builds faster 2025-07-30 20:28:14 +02:00
docker-compose.yml Some update 2025-07-19 18:40:55 +02:00
README.md Some update 2025-07-19 18:40:55 +02:00

This is a container that helps host a static website.

Configuration

Requires the following mounts:

  • /etc/ssl/certs/$DOMAIN: For certificates (fullchain.pem and privkey.pem)
  • /var/www/html/$DOMAIN: Website files, index.html goes right here

Requires the following environment variables:

  • DOMAIN: The domain
  • ACME_CHALLENGE_HOST: The source of .well-known/acme-challenge
  • CONTROL_TOKEN: Token to access the control server

You're also encouraged to provide your own:

  • /etc/ssl/dhparam.pem, generated with:
    openssl dhparam -out dhparam.pem 4096
    
  • /etc/ssl/snakeoil.key & /etc/ssl/snakeoil.pem, generated with:
    openssl req -new -x509 -days 398 -noenc -out snakeoil.pem -keyout snakeoil.key -subj "/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd"
    
  • SERVER_ID: How to call this server (for info)
  • Mount /var/run/nginx-reload: modify this file to reload nginx

Control server

Authorize as you normally would with a Bearer token.

If you get an empty response, watch the status code!

Response format:

{
   "status": "ok|client_error|server_error",
   "message": "Optional, human-readable feedback message"
}

Endpoints:

  • /: Health check
  • /reload: Reloads nginx
  • /certificate/<domain>: Uploads a certificate (POST, upload like a form with field names certificate and private_key)

TODO

  • support for multiple domains