docs/signals.md says what the admin's setting does and that a key is checked before it is saved; the install guide lists TYPESAFE_KEY; the API reference has Signals' routes and types and the new fields of Me and Settings; the home page says an admin may provide the key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
69 lines
4.2 KiB
HTML
69 lines
4.2 KiB
HTML
<h1>Install ipx and ipx-web</h1>
|
|
<p class="lede">iPX is two containers: <strong>ipx</strong>, which checks your podcasts, downloads them and answers the API, and <strong>ipx-web</strong>, which serves the page and passes the API on to ipx.</p>
|
|
<p>You need Docker with Compose. There are no published images yet, so you build both from the source:</p>
|
|
<pre><code>git clone https://git.sdf1.net/rays/ipx.git
|
|
cd ipx
|
|
docker build -t ipx .
|
|
docker build -f Dockerfile.web -t ipx-web .</code></pre>
|
|
<p>The repository has a sample <code>docker-compose.yml</code> that runs both, with the database in SQLite and everything ipx keeps in three folders beside the file:</p>
|
|
<pre><code>services:
|
|
ipx:
|
|
image: ipx
|
|
container_name: ipx
|
|
restart: unless-stopped
|
|
environment:
|
|
PUID: "99" # who owns the files it writes
|
|
PGID: "100"
|
|
TZ: "UTC"
|
|
ports:
|
|
- "6881:6881/tcp" # BitTorrent
|
|
- "6881:6881/udp"
|
|
volumes:
|
|
- ./config:/config # config.toml, written on first start
|
|
- ./data:/data # the database
|
|
- ./downloads:/downloads
|
|
|
|
ipx-web:
|
|
image: ipx-web
|
|
container_name: ipx-web
|
|
restart: unless-stopped
|
|
environment:
|
|
IPX_UPSTREAM: "ipx:8099"
|
|
ports:
|
|
- "8099:8080" # the page
|
|
depends_on:
|
|
- ipx</code></pre>
|
|
<pre><code>docker compose up -d</code></pre>
|
|
<p>ipx has no port of its own: everything reaches it through ipx-web, on port 8099. Open <code>http://<your server>:8099</code> and sign in as <strong>admin</strong> with the password <strong>ipodderx</strong>, then change it:</p>
|
|
<pre><code>echo -n 'a good password' | docker exec -i ipx ipx user passwd admin</code></pre>
|
|
<p>The password is read from what you pipe in, so it stays out of your shell's history.</p>
|
|
|
|
<h2>Adding people</h2>
|
|
<p>An admin adds people in Admin, Accounts, or from the command line:</p>
|
|
<pre><code>echo -n 'their password' | docker exec -i ipx ipx user add sam</code></pre>
|
|
<p>Each person starts with no podcasts and subscribes to their own. Two people subscribing to the same show cost nothing extra: it is fetched once and each file is kept once.</p>
|
|
|
|
<h2>Settings</h2>
|
|
<p>How often podcasts are checked, how much disk to use, how many new episodes to download and the rest are in Admin on the page, and take effect straight away. <code>/config/config.toml</code> holds only what ipx needs before it can read its database: where downloads go, BitTorrent, and who gets in.</p>
|
|
<div class="scroll"><table>
|
|
<thead><tr><th>Environment variable</th><th>What it does</th></tr></thead>
|
|
<tbody>
|
|
<tr><td><code>IPX_DATABASE_URL</code></td><td>A <code>postgres://user:password@host:5432/database</code> address, to keep everything in Postgres instead of SQLite</td></tr>
|
|
<tr><td><code>PUID</code>, <code>PGID</code></td><td>The user and group that own the files ipx writes</td></tr>
|
|
<tr><td><code>TYPESAFE_KEY</code></td><td>The server's own <a href="https://typesafe.ai">typesafe.ai</a> API key: it picks a podcast's Directory category and a Signal's icon, and, when an admin turns it on, pays for everyone's Signals</td></tr>
|
|
<tr><td><code>IPX_LOG_FORMAT</code></td><td><code>json</code> logs one JSON object a line, for Loki and the like</td></tr>
|
|
<tr><td><code>OTEL_EXPORTER_OTLP_ENDPOINT</code></td><td>Sends traces of requests, checks and downloads to an OpenTelemetry collector; set <code>WEB_TRACING=on</code> on ipx-web too</td></tr>
|
|
<tr><td><code>IPX_UPSTREAM</code></td><td>On ipx-web: where ipx is, <code>ipx:8099</code> by default</td></tr>
|
|
</tbody>
|
|
</table></div>
|
|
|
|
<h2>Reaching it from outside</h2>
|
|
<p>The page is plain HTTP. If anyone will reach it from outside your network, put HTTPS in front of it: a reverse proxy you already run, or a Cloudflare tunnel. People can then sign in through Cloudflare Access or Authentik instead of a password; <a href="https://git.sdf1.net/rays/ipx/src/branch/main/docs/sso.md">single sign-on</a> says how.</p>
|
|
|
|
<h2>Updating</h2>
|
|
<pre><code>git pull
|
|
docker build -t ipx .
|
|
docker build -f Dockerfile.web -t ipx-web .
|
|
docker compose up -d</code></pre>
|
|
<p>Your podcasts, accounts and downloads are in the three folders and are kept.</p>
|