Host a test server for the web app (HTTPS) #71

Closed
opened 2026-10-17 17:56:17 +00:00 by littlefox · 5 comments
Owner

The installable web app (#51) only works over HTTPS (browsers allow service workers only on HTTPS or localhost), and trying it on a real Android phone and a friend's iPhone needs an address they can reach.

User, 2026-10-17: "I can probably figure out hosting of a test server. But that will take some time. Tag it as depending on user and we'll see how far I've come when it comes to that"

What the host needs (to be filled in when it exists):

  • a domain name with a TLS certificate;
  • the static web build, served over HTTPS;
  • kom-relay behind wss:// on the same host, made fit for public use first (#67);
  • the relay's target: kom.lysator.liu.se or a devserver.

Until then, development uses localhost, and the Android phone over USB with Chrome's port forwarding.

Blocks: #51 (the real-device checks). Related: roadmap question 1 (a public NeoKOM at Lysator).

The installable web app (#51) only works over HTTPS (browsers allow service workers only on HTTPS or localhost), and trying it on a real Android phone and a friend's iPhone needs an address they can reach. User, 2026-10-17: "I can probably figure out hosting of a test server. But that will take some time. Tag it as depending on user and we'll see how far I've come when it comes to that" What the host needs (to be filled in when it exists): - a domain name with a TLS certificate; - the static web build, served over HTTPS; - kom-relay behind wss:// on the same host, made fit for public use first (#67); - the relay's target: kom.lysator.liu.se or a devserver. Until then, development uses localhost, and the Android phone over USB with Chrome's port forwarding. Blocks: #51 (the real-device checks). Related: roadmap question 1 (a public NeoKOM at Lysator).
littlefox referenced this issue from a commit 2026-10-18 01:22:46 +00:00
Author
Owner

User (2026-10-18): "Provided that the local docker HTTPS thing works for us, we can remove issue #71 from the 0.2 milestone. It will be needed in the future, but it is not blocking for closing that milestone." Once #98 is verified on a real phone, this leaves the 0.2 milestone and stays open for later (recorded as a D-entry with #98).

User (2026-10-18): "Provided that the local docker HTTPS thing works for us, we can remove issue #71 from the 0.2 milestone. It will be needed in the future, but it is not blocking for closing that milestone." Once #98 is verified on a real phone, this leaves the 0.2 milestone and stays open for later (recorded as a D-entry with #98).
Author
Owner

Moved out of the 0.2 milestone (D-038): the Docker image's HTTPS mode (#98) works on the user's Android phone, so 0.2 doesn't wait for a public server. Stays open for later.

Moved out of the 0.2 milestone (D-038): the Docker image's HTTPS mode (#98) works on the user's Android phone, so 0.2 doesn't wait for a public server. Stays open for later.
Author
Owner

Before a public deployment, the Docker image needs (from a review of the package, 2026-10-18):

  • NEOKOM_DOMAIN: Caddy's automatic Let's Encrypt certificate on 443/80 instead of the local CA.
  • With a domain, publish only 443/80: no plain http on 8080 or ws on 4895.
  • With a domain, default NEOKOM_RELAY_ORIGINS to https://; pin a release version rather than latest.
  • Security headers: CSP, HSTS, X-Content-Type-Options, frame-ancestors.
  • The forwarded-address bug in the issue filed alongside this comment.
    To talk over with Lysator: all users reach lyskomd from the relay's one address; IP addresses in the relay log need a retention policy; the image is x86-64 only.
Before a public deployment, the Docker image needs (from a review of the package, 2026-10-18): - NEOKOM_DOMAIN: Caddy's automatic Let's Encrypt certificate on 443/80 instead of the local CA. - With a domain, publish only 443/80: no plain http on 8080 or ws on 4895. - With a domain, default NEOKOM_RELAY_ORIGINS to https://<domain>; pin a release version rather than latest. - Security headers: CSP, HSTS, X-Content-Type-Options, frame-ancestors. - The forwarded-address bug in the issue filed alongside this comment. To talk over with Lysator: all users reach lyskomd from the relay's one address; IP addresses in the relay log need a retention policy; the image is x86-64 only.
Author
Owner

User's answers (D-040): Let's Encrypt is what Lysator uses (Caddy's automatic HTTPS fits); other relays already run against kom.lysator.liu.se, so one address for many users is fine; logs are kept 24 h for abuse. For the deployment: Docker's log driver rotates by size, not time, so 24 h retention needs the host's logging (journald driver with a retention setting, or a size cap sized for a day).

User's answers (D-040): Let's Encrypt is what Lysator uses (Caddy's automatic HTTPS fits); other relays already run against kom.lysator.liu.se, so one address for many users is fine; logs are kept 24 h for abuse. For the deployment: Docker's log driver rotates by size, not time, so 24 h retention needs the host's logging (journald driver with a retention setting, or a size cap sized for a day).
Author
Owner

Done: NeoKOM runs on Lysator's Kubernetes at https://neokom.lysator.liu.se (D-050, #173), HTTPS by the cluster's gateway, the relay at wss://neokom.lysator.liu.se/relay. Checked from outside: the page with a valid certificate and our security headers, and a logged-out Protocol A handshake through the relay to kom.lysator.liu.se. It follows releases via autoroll on :latest, which only moves when a release's image has passed its checks (#201, D-053).

Done: NeoKOM runs on Lysator's Kubernetes at https://neokom.lysator.liu.se (D-050, #173), HTTPS by the cluster's gateway, the relay at wss://neokom.lysator.liu.se/relay. Checked from outside: the page with a valid certificate and our security headers, and a logged-out Protocol A handshake through the relay to kom.lysator.liu.se. It follows releases via autoroll on :latest, which only moves when a release's image has passed its checks (#201, D-053).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
littlefox/neokom#71
No description provided.