diff --git a/.beads/config.yaml b/.beads/config.yaml index 07342c6..f719449 100644 --- a/.beads/config.yaml +++ b/.beads/config.yaml @@ -6,7 +6,7 @@ # Issue prefix for this repository (used by bd init) # If not set, bd init will auto-detect from directory name # Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. -# issue-prefix: "" +issue-prefix: "dreamio" # Use no-db mode: JSONL-only, no Dolt database # When true, bd will use .beads/issues.jsonl as the source of truth diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl index a0cd213..7e1eb0d 100644 --- a/.beads/interactions.jsonl +++ b/.beads/interactions.jsonl @@ -40,3 +40,4 @@ {"id":"int-12bf46aa","kind":"field_change","created_at":"2026-05-25T18:31:50.873069Z","actor":"dirtydishes","issue_id":"dreamio-kdf","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Tracked Xcode user interface state files were removed from the git index, and existing ignore rules now cover regenerated xcuserdata files."}} {"id":"int-fc9ecdb1","kind":"field_change","created_at":"2026-05-27T01:50:32.02792Z","actor":"dirtydishes","issue_id":"dreamio-ee1","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Completed baseline UX audit in docs/native-player-ux-audit.md"}} {"id":"int-c8a14c48","kind":"field_change","created_at":"2026-05-27T01:56:02.08139Z","actor":"dirtydishes","issue_id":"dreamio-060","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented native player Liquid Glass UX improvements and validated simulator build."}} +{"id":"int-ab89af19","kind":"field_change","created_at":"2026-05-28T17:54:37.768241016Z","actor":"delta","issue_id":"dreamio-wso","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Configured the official Stremio server Docker container, exposed it through Nginx Proxy Manager at stremio.dpdrm.com, validated HTTPS/CORS/root redirect behavior, and documented the setup."}} diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index ba89dea..48ea9bd 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -62,3 +62,4 @@ {"_type":"issue","id":"dreamio-mj8","title":"Add native player controls and captions","description":"Implement a fuller VLC-backed native playback surface with transport controls, caption controls, external subtitle discovery, and a clean close flow back to Stremio episode selection.","status":"closed","priority":2,"issue_type":"feature","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-25T04:57:53Z","created_by":"dirtydishes","updated_at":"2026-05-25T05:04:55Z","started_at":"2026-05-25T04:57:57Z","closed_at":"2026-05-25T05:04:55Z","close_reason":"Implemented native VLC player controls, caption controls, subtitle candidate discovery, and close-flow cleanup.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"dreamio-evt","title":"Enable WebView inspection and playback diagnostics","description":"Add development-only WKWebView inspection and token-safe playback diagnostics so Dreamio can debug hosted Stremio media failures without changing app navigation, login, or playback behavior.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-25T02:30:26Z","created_by":"dirtydishes","updated_at":"2026-05-25T02:34:55Z","started_at":"2026-05-25T02:30:32Z","closed_at":"2026-05-25T02:34:55Z","close_reason":"Implemented debug-only WKWebView inspection, token-safe playback diagnostics, navigation logging, validation build, and turn documentation.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"dreamio-a5b","title":"Track HTML diff rendering tooling as dev dependency","description":"Move the HTML diff rendering package into devDependencies and ignore installed Node modules so the repo tracks reproducible tooling without vendoring dependencies.","status":"closed","priority":2,"issue_type":"task","assignee":"dirtydishes","owner":"dishes@dpdrm.com","created_at":"2026-05-25T01:12:07Z","created_by":"dirtydishes","updated_at":"2026-05-25T01:12:44Z","started_at":"2026-05-25T01:12:14Z","closed_at":"2026-05-25T01:12:44Z","close_reason":"Moved @pierre/diffs to devDependencies and ignored node_modules.","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"dreamio-wso","title":"Configure stremio server behind nginx proxy manager","description":"Set up the official Stremio server Docker container on this server and expose it through Nginx Proxy Manager at stremio.dpdrm.com.","status":"closed","priority":2,"issue_type":"task","assignee":"delta","created_at":"2026-05-28T17:51:23Z","created_by":"delta","updated_at":"2026-05-28T17:54:38Z","started_at":"2026-05-28T17:51:26Z","closed_at":"2026-05-28T17:54:38Z","close_reason":"Configured the official Stremio server Docker container, exposed it through Nginx Proxy Manager at stremio.dpdrm.com, validated HTTPS/CORS/root redirect behavior, and documented the setup.","dependency_count":0,"dependent_count":0,"comment_count":0} diff --git a/docs/turns/2026-05-28-configure-stremio-server.html b/docs/turns/2026-05-28-configure-stremio-server.html new file mode 100644 index 0000000..a7283ca --- /dev/null +++ b/docs/turns/2026-05-28-configure-stremio-server.html @@ -0,0 +1,552 @@ + + + + + + Configure Stremio Server + + + + + + +
+
+

Dreamio turn document

+

Configure Stremio Server

+

Installed the official Stremio server Docker image, exposed it through Nginx Proxy Manager at stremio.dpdrm.com, and validated HTTPS access from the public hostname.

+
+ 2026-05-28 + 13:50 EDT + Beads issue dreamio-wso + stremio/server:v4.20.18 +
+
+ +
+
+

Summary

+

Stremio Server now runs as a dedicated Docker Compose project at /home/delta/stremio-server. Nginx Proxy Manager serves https://stremio.dpdrm.com with a new Let's Encrypt certificate and proxies traffic to stremio-server:11470 on the shared Docker network.

+
+ +
+

Changes Made

+
    +
  • Created /home/delta/stremio-server/docker-compose.yml using the official stremio/server:v4.20.18 image from Stremio's Docker server repo.
  • +
  • Attached the container only to the existing npm-shared Docker network and persisted app/cache data under /home/delta/stremio-server/data.
  • +
  • Set NO_CORS=1 so browser clients such as Stremio Web can call the proxied server URL.
  • +
  • Created Nginx Proxy Manager certificate #21 for stremio.dpdrm.com and proxy host #12 forwarding to http://stremio-server:11470.
  • +
  • Added a root redirect so opening https://stremio.dpdrm.com launches Stremio Web with streamingServer=https://stremio.dpdrm.com.
  • +
  • Repaired the local Beads project prefix by setting issue-prefix: "dreamio" so task tracking commands can create and update issues.
  • +
+
+ +
+

Context

+

The server already had Nginx Proxy Manager running on ports 80, 443, and localhost-bound admin port 81. Existing proxied services share the external Docker network named npm-shared, so Stremio was added to that same network rather than publishing its own public host port.

+

Official source references checked during setup: Stremio server-docker and Docker Hub tags for stremio/server.

+
+ +
+

Important Implementation Details

+
    +
  • The running container is stremio-server, image stremio/server:v4.20.18, restart policy unless-stopped.
  • +
  • The public endpoint to use in Stremio clients is https://stremio.dpdrm.com.
  • +
  • NPM terminates TLS and proxies to the Stremio HTTP endpoint on port 11470; the container's internal HTTPS port 12470 is exposed only to Docker because the official server uses its own local certificate flow there.
  • +
  • The NPM host has WebSocket upgrades enabled, HTTP/2 enabled, forced SSL enabled, buffering disabled, and long proxy send/read timeouts for streaming.
  • +
  • The official server's /settings response still reports an internal Docker baseUrl. The NPM root redirect mitigates the most visible symptom by passing the public HTTPS server URL to Stremio Web.
  • +
+
+ +
+

Relevant Diff Snippets

+
+ +
+

/home/delta/stremio-server/docker-compose.yml - new compose service

+
+
home/delta/stremio-server/docker-compose.yml
+18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
stremio-server:
image: stremio/server:v4.20.18
container_name: stremio-server
restart: unless-stopped
environment:
APP_PATH: /var/lib/stremio-server
NO_CORS: "1"
volumes:
- ./data:/var/lib/stremio-server
expose:
- "11470"
- "12470"
networks:
- npm-shared
+
networks:
npm-shared:
+
+
diff --git a/home/delta/stremio-server/docker-compose.yml b/home/delta/stremio-server/docker-compose.yml
+new file mode 100600
+index 0000000..1111111
+--- /dev/null
++++ b/home/delta/stremio-server/docker-compose.yml
+@@ -0,0 +1,18 @@
++services:
++  stremio-server:
++    image: stremio/server:v4.20.18
++    container_name: stremio-server
++    restart: unless-stopped
++    environment:
++      APP_PATH: /var/lib/stremio-server
++      NO_CORS: "1"
++    volumes:
++      - ./data:/var/lib/stremio-server
++    expose:
++      - "11470"
++      - "12470"
++    networks:
++      - npm-shared
++
++networks:
++  npm-shared:
++    external: true
+
+
+ +
+

/home/delta/nginx-proxy-manager/data/nginx/proxy_host/12.conf - generated proxy host excerpt

+
+
home/delta/nginx-proxy-manager/data/nginx/proxy_host/12.conf
+24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
set $forward_scheme http;
set $server "stremio-server";
set $port 11470;
+
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
+
server_name stremio.dpdrm.com;
http2 on;
+
ssl_certificate /etc/letsencrypt/live/npm-21/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/npm-21/privkey.pem;
+
location = / {
return 307 https://app.strem.io/shell-v4.4/?streamingServer=https%3A%2F%2Fstremio.dpdrm.com;
}
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffering off;
location / { include conf.d/include/proxy.conf; }
}
+
+
diff --git a/home/delta/nginx-proxy-manager/data/nginx/proxy_host/12.conf b/home/delta/nginx-proxy-manager/data/nginx/proxy_host/12.conf
+new file mode 100644
+index 0000000..2222222
+--- /dev/null
++++ b/home/delta/nginx-proxy-manager/data/nginx/proxy_host/12.conf
+@@ -0,0 +1,24 @@
++server {
++  set $forward_scheme http;
++  set $server         "stremio-server";
++  set $port           11470;
++
++  listen 80;
++  listen [::]:80;
++  listen 443 ssl;
++  listen [::]:443 ssl;
++
++  server_name stremio.dpdrm.com;
++  http2 on;
++
++  ssl_certificate /etc/letsencrypt/live/npm-21/fullchain.pem;
++  ssl_certificate_key /etc/letsencrypt/live/npm-21/privkey.pem;
++
++  location = / {
++    return 307 https://app.strem.io/shell-v4.4/?streamingServer=https%3A%2F%2Fstremio.dpdrm.com;
++  }
++  proxy_read_timeout 3600s;
++  proxy_send_timeout 3600s;
++  proxy_buffering off;
++  location / { include conf.d/include/proxy.conf; }
++}
+
+
+ +
+

/home/delta/dreamio/.beads/config.yaml - issue prefix repair

+
+
.beads/config.yaml
-1+1
5 unmodified lines
6
7
8
9
10
11
12
5 unmodified lines
# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
# issue-prefix: ""
+
# Use no-db mode: JSONL-only, no Dolt database
# When true, bd will use .beads/issues.jsonl as the source of truth
5 unmodified lines
6
7
8
9
10
11
12
5 unmodified lines
# Issue prefix for this repository (used by bd init)
# If not set, bd init will auto-detect from directory name
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
issue-prefix: "dreamio"
+
# Use no-db mode: JSONL-only, no Dolt database
# When true, bd will use .beads/issues.jsonl as the source of truth
+
+
diff --git a/.beads/config.yaml b/.beads/config.yaml
+index 07342c6..f719449 100644
+--- a/.beads/config.yaml
++++ b/.beads/config.yaml
+@@ -6,7 +6,7 @@
+ # Issue prefix for this repository (used by bd init)
+ # If not set, bd init will auto-detect from directory name
+ # Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
+-# issue-prefix: ""
++issue-prefix: "dreamio"
+ 
+ # Use no-db mode: JSONL-only, no Dolt database
+ # When true, bd will use .beads/issues.jsonl as the source of truth
+
+
+
+

Diffs were rendered with @pierre/diffs/ssr after installing the repo's declared dev dependency from bun.lock. Each shell contains one focused file diff.

+
+ +
+

Expected Impact for End-Users

+

Users can point Stremio Web or compatible Stremio clients at https://stremio.dpdrm.com as the streaming server. Opening the hostname directly redirects to Stremio Web with that server already encoded in the URL.

+
+ +
+

Validation

+
    +
  • Ran docker compose config in /home/delta/stremio-server; Compose rendered successfully.
  • +
  • Pulled and started stremio/server:v4.20.18; docker ps shows stremio-server running on npm-shared.
  • +
  • Confirmed NPM can reach the upstream with http://stremio-server:11470/settings.
  • +
  • Used NPM's API to test the HTTP challenge for stremio.dpdrm.com; the result was ok.
  • +
  • Issued Let's Encrypt certificate #21, expiring 2026-08-26 16:48:19.
  • +
  • Verified https://stremio.dpdrm.com/settings returns HTTP 200 through Cloudflare and reports server version 4.20.18.
  • +
  • Verified CORS headers include access-control-allow-origin: * for browser origins.
  • +
  • Verified https://stremio.dpdrm.com/ redirects to Stremio Web with streamingServer=https%3A%2F%2Fstremio.dpdrm.com.
  • +
+
+ +
+

Issues, Limitations, and Mitigations

+
    +
  • The official Stremio server reports its Docker-side baseUrl in /settings. The public URL remains the correct client setting, and the NPM root redirect avoids sending users into Stremio Web with an HTTP server URL.
  • +
  • Hardware transcoding auto-detection did not find a viable acceleration profile in this container. The server remains usable with CPU transcoding and direct streaming.
  • +
  • Public services receive background internet scan traffic. Stremio logs may show harmless parse errors for unrelated probe paths such as /.env or /graphql.
  • +
  • Beads required local repair because the issue prefix was missing. The historical JSONL export was restored from git before continuing so old tracked issues were not replaced by the new task.
  • +
+
+ +
+

Follow-up Work

+
    +
  • Consider a Cloudflare rule or NPM custom deny rules for obvious scanner paths if the Stremio logs get noisy.
  • +
  • Consider adding a small admin note outside the app repo if this server accumulates more standalone Compose services.
  • +
  • Monitor the first Let's Encrypt renewal for certificate #21 before 2026-08-26.
  • +
+
+
+
+ +