Skip to content

Deployment notes #2007

@WilliamDEdwards

Description

@WilliamDEdwards

Some generic deployment notes from a user who:

  1. Has no particular knowledge or background in DISP / Internet.nl
  2. Uses configuration management

Here we go!

  • The deployment documentation (e.g.
    /opt/Internet.nl/docker/compose.sh down
    ) refers to /opt/Internet.nl/docker/compose.sh, but that script does not exist. Specifically ran into this to create indexes as instructed in https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment-batch.md#application-setup. Workaround: /usr/bin/docker compose --env-file=docker/defaults.env --env-file=docker/host.env --env-file=docker/local.env exec -ti app ./manage.py api_create_db_indexes
  • On start, one of the containers writes a release line (like RELEASE='1.10.8' # deploy Sat Apr 4 09:28:35 UTC 2026) to local.env. This is impractical when using configuration management, as it can cause restarts to be triggered seeing as how the file is changed.
  • When running /opt/Internet.nl/docker/user_manage.sh from a random directory, I get: couldn't find env file: /root/docker/defaults.env. When switching to the /opt/Internet.nl working directory, the env file is found. Makes sense, but should probably be documented.
  • /opt/Internet.nl/docker/user_manage.sh is not executable (permissions 0444)
  • /opt/Internet.nl/docker/user_manage.sh is interactive, which makes auto-creating users more difficult than it needs to be. Preferred solution: allow taking password as arg
  • /opt/Internet.nl/docker/user_manage.sh calls docker compose with --env-file. On modern Debian installs (not sure about Ubuntu), this arg is only available when installing Compose as a plugin (apt install docker-compose-plugin). Should probably be documented.
  • When invoking ./manage.py (in the app container) - which user_manage.sh does as well - the following is printed: WARN[0000] The "MI" variable is not set. Defaulting to a blank string.. It's unclear what "The "MI" variable" is.
  • It's not (easily) possible to make api_create_db_indexes idempotent when using configuration management, as there's no way to determine whether indexes were created, re-created or whether the action was a NOOP (the output is deterministic).
  • The usage instructions for /opt/Internet.nl/docker/user_manage.sh add_update say <username> is required, but it is not asked for when specified, and the htpasswd file simply contains no username. The arg should be made required.
  • The auto-generated Let's Encrypt certificate has no OSCP responder URL, which is fine by me, but not by the nginx config: 2026/04/04 09:46:13 [warn] 166#166: "ssl_stapling" ignored, no OCSP responder URL in the certificate "/etc/letsencrypt/live/cyberfusion-disp.nl/fullchain.pem" & nginx: [warn] "ssl_stapling" ignored, no OCSP responder URL in the certificate "/etc/letsencrypt/live/cyberfusion-disp.nl/fullchain.pem"
  • Following either deployment instruction (https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment.md / https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment-batch.md), the first thing one sees when accessing the self-hosted instance is "Bad Request (400)". Looking in the app container logs reveals: django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'cyberfusion-disp.nl'. You may need to add 'cyberfusion-disp.nl' to ALLOWED_HOSTS.. That is not documented.
  • For MONITORING_AUTH_RAW, the documentation says the password is "htpasswd hash". Easy to generate with apache2-utils; for less experienced users, probably helpful to add a pointer.
  • MONITORING_AUTH_RAW does not work; access is always denied. The password value of /etc/nginx/htpasswd/monitoring.htpasswd is always the same: a hash starting with $4Mpr. No idea where it comes from.
  • I set ENABLE_HOF=False, but there is still a 'Hall of Fame' menu item, and the website test says: "Congratulations, your domain will be added to the Hall of Fame soon!"
  • There's a bunch of filler (menu item called "base about custom", "article article title" under 'News', etc.) - and no instructions on how to set/customise. Not on https://github.com/internetstandards/Internet.nl/blob/main/documentation/Customize.md either.
  • I would expect it's possible to add the Internet.nl instance to an external Prometheus server, but https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-metrics.md only touches on using the built-in Grafana dashboard.
  • https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment.md#application-setup touches on configuring Sentry, and references SENTRY_DSN, with no further explanation of the format or the level of integration provided. Sentry is not mentioned at all on https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment-batch.md
  • https://github.com/internetstandards/Internet.nl/blob/main/documentation/Docker-deployment-batch.md says: "This deployment does not include the "Test your connection" test". But while there are no indeed no setup instructions for the connectivity test (e.g. the conn subdomain), there is a "Test your connection" tile on the frontpage, which's 'Start test' button does link to that subdomain.
  • For batch mode, it is not clear whether the dashboard (dashboard.internet.nl) is self-hostable / included.

That said, I shared elaborate feedback on the pretty confusing deployment instructions during one of the Jitsi meetings a couple months ago, and they have tremendously improved since then. Good going!

Metadata

Metadata

Assignees

Labels

documentationIssues that require improvements to our documentation

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions