Skip to content

Domain and HTTPS

Before your instance faces the internet, give it a domain and HTTPS. The installer can do this for you, or you can put Railhook behind a reverse proxy you already run.

  1. Point the domain at the server

    Create an A record for the domain with the server’s public IP. Ports 80 and 443 must be free and open to the internet.

  2. Install with the domain

    Terminal window
    curl -fsSL https://railhook.io/install.sh | bash -s -- --domain hooks.example.com --email [email protected]
Setting Value
TLS terminator Caddy runs on 80 and 443, and obtains and renews a Let’s Encrypt certificate itself
Dashboard nginx Moves to 127.0.0.1:8080, behind Caddy
APP_ENV production, so the platform refuses to start on unsafe configuration
APP_BASE_URL, CORS_ALLOWED_ORIGINS https://<your domain>
Source ingress and CLI tunnel URLs Follow APP_BASE_URL, so providers get https://<your domain>/ingress/…
DB_SSL_MODE require
LOG_LEVEL WARN
WEBHOOK_TRUSTED_PROXIES 172.16.0.0/12, so real client IPs reach the audit log

With APP_ENV=production the API refuses to start, rather than run, when:

  • a secret still holds a placeholder or a shipped default,
  • WEBHOOK_ALLOW_PRIVATE_IPS=true,
  • SWAGGER_ENABLED=true,
  • CORS_ALLOWED_ORIGINS still contains localhost.

./railhook doctor checks these ahead of time. It also warns if APP_BASE_URL still points at localhost, or if EMAIL_ENABLED is off: with email off, accounts are created already verified and nobody can be invited.