code.pablomurad.com

indiedesk

Adds opted-in pages from personal sites to a topicless feed, served as Atom and JF2

README.md raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# indiedesk

indiedesk adds pages from personal sites to a feed with no declared topic. Authors opt in. Delivery is Atom and JF2 Feed.

## Idea

This is an IndieWeb implementation of the mezzanine, conceived by [@moja.blue](https://tangled.org/moja.blue). [This is the interpretation this relay follows.](https://nawashiro.dev/posts/20261005-mezzanine)

- A feed has a shared topic that stays implicit. Readers may catch the mood, or ignore it.
- The space is small. A post is not thrown into an ocean like an SNS.
- Anyone can start. The identifier is only a random string.

## Posting

Read the [guide for users](internal/relay/landing.md). `/` means the server root URL. Example: `/webmention` → `https://example.com/webmention`

## Startup

### 1. Publication

The default Compose file uses a Cloudflare Tunnel.

1. On the Cloudflare side, set the public hostname origin to `http://relay:8080`.
2. Publish the public Webmention receiver and the Atom and JF2 subscriptions.
   - Open `Cloudflare > Security > Security rules > Custom rules`.
   - Select the hostname and GET and POST, and skip the WAF, browser integrity check, and similar checks.

### 2. Environment variables

[.env.example](.env.example) is the settings example. Copy it and use the copy.

`PUBLIC_URL` is the public HTTP(S) root URL. The relay treats a trailing `/` as the same URL. Do not include credentials, a query, a non-empty fragment, or a path other than the root.

```sh
cp .env.example .env
```

### 3. Persistence directory

Create a storage directory owned by UID/GID `65532` with mode `0750`.

```sh
sudo install -d -o 65532 -g 65532 -m 0750 ./data
```

### 4. Docker containers

That is the last step.

```sh
docker compose config --quiet # check the configuration
docker compose up -d --build # start
docker compose exec relay /indiedesk healthcheck # check relay HTTP, storage, and workers
```

## Backup

- Stop with `docker compose stop relay`, copy the whole storage directory, then resume with `docker compose start relay`.
- Recreate containers with `docker compose up -d --force-recreate`. When the same storage directory is reused, posts and accepted mentions remain.

## License

- The program is under the [MIT License](LICENSE).
- Notices for dependencies are in the [third-party notices](docs/THIRD_PARTY_NOTICES.txt).
- OS assets in the container keep their original license terms.