···2122# Setup
2324-We are getting close! Testing now
000000000000000000000000002526-Nothing here yet! If you are brave enough to try before full release, let me know and I'll help you set it up.
27-But I want to run it locally on my own PDS first to test run it a bit.
2829-Example Caddyfile (mostly so I don't lose it for now. Will have a better one in the future)
003031```caddyfile
32-http://localhost {
33-34 @gatekeeper {
35- path /xrpc/com.atproto.server.getSession
36- path /xrpc/com.atproto.server.updateEmail
37- path /xrpc/com.atproto.server.createSession
38- path /@atproto/oauth-provider/~api/sign-in
39 }
4041 handle @gatekeeper {
42- reverse_proxy http://localhost:8080
43 }
4445- reverse_proxy /* http://localhost:3000
000000000000000000046}
4748-```00000000000000000000
···2122# Setup
2324+PDS Gatekeeper has 2 parts to its setup, docker compose file and a reverse proxy (Caddy in this case). I will be
25+assuming you setup the PDS following the directions
26+found [here](https://atproto.com/guides/self-hosting), but if yours is different, or you have questions, feel free to
27+let
28+me know, and we can figure it out.
29+30+## Docker compose
31+32+The pds gatekeeper container can be found on docker hub under the name `fatfingers23/pds_gatekeeper`. The container does
33+need access to the `/pds` root folder to access the same db's as your PDS. The part you need to add would look a bit
34+like below. You can find a full example of what I use for my pds at [./examples/compose.yml](./examples/compose.yml).
35+This is usually found at `/pds/compose.yaml`on your PDS>
36+37+```yml
38+ gatekeeper:
39+ container_name: gatekeeper
40+ image: fatfingers23/pds_gatekeeper:arm-latest
41+ network_mode: host
42+ restart: unless-stopped
43+ #This gives the container to the access to the PDS folder. Source is the location on your server of that directory
44+ volumes:
45+ - type: bind
46+ source: /pds
47+ target: /pds
48+ depends_on:
49+ - pds
50+```
5152+## Caddy setup
05354+For the reverse proxy I use caddy. This part is what overwrites the endpoints and proxies them to PDS gatekeeper to add
55+in extra functionality. The main part is below, for a full example see [./examples/Caddyfile](./examples/Caddyfile).
56+This is usually found at `/pds/caddy/etc/caddy/Caddyfile` on your PDS.
5758```caddyfile
0059 @gatekeeper {
60+ path /xrpc/com.atproto.server.getSession
61+ path /xrpc/com.atproto.server.updateEmail
62+ path /xrpc/com.atproto.server.createSession
63+ path /@atproto/oauth-provider/~api/sign-in
64 }
6566 handle @gatekeeper {
67+ reverse_proxy http://localhost:8080
68 }
6970+ reverse_proxy http://localhost:3000
71+```
72+73+If you use a cloudflare tunnel then your caddyfile would look a bit more like below with your tunnel proxying to
74+`localhost:8081` (or w/e port you want).
75+76+```caddyfile
77+http://*.localhost:8082, http://localhost:8082 {
78+ @gatekeeper {
79+ path /xrpc/com.atproto.server.getSession
80+ path /xrpc/com.atproto.server.updateEmail
81+ path /xrpc/com.atproto.server.createSession
82+ path /@atproto/oauth-provider/~api/sign-in
83+ }
84+85+ handle @gatekeeper {
86+ reverse_proxy http://localhost:8080
87+ }
88+89+ reverse_proxy http://localhost:3000
90}
9192+```
93+94+# Environment variables and bonuses
95+96+Every environment variable can be set in the `pds.env` and shared between PDS and gatekeeper and the PDS, with the
97+exception of `PDS_ENV_LOCATION`. This can be set to load the pds.env, by default it checks `/pds/pds.env` and is
98+recommended to mount the `/pds` folder on the server to `/pds` in the pds gatekeeper container.
99+100+`PDS_DATA_DIRECTORY` - Root directory of the PDS. Same as the one found in `pds.env` this is how pds gatekeeper knows
101+knows the rest of the environment variables.
102+103+`GATEKEEPER_EMAIL_TEMPLATES_DIRECTORY` - The folder for templates of the emails PDS gatekeeper sends. You can find them
104+in [./email_templates](./email_templates). You are free to edit them as you please and set this variable to a location
105+in the pds gateekeper container and it will use them in place of the default ones. Just make sure ot keep the names the
106+same.
107+108+`PDS_BASE_URL` - Base url of the PDS. You most likely want `https://localhost:3000` which is also the default
109+110+`GATEKEEPER_HOST` - Host for pds gatekeeper. Defaults to `127.0.0.1`
111+112+`GATEKEEPER_PORT` - Port for pds gatekeeper. Defaults to `8080`
+29
examples/Caddyfile
···00000000000000000000000000000
···1+{
2+ email youremail@myemail.com
3+ on_demand_tls {
4+ ask http://localhost:3000/tls-check
5+ }
6+}
7+8+*.yourpds.com, yourpds.com {
9+ tls {
10+ on_demand
11+ }
12+ # You'll most likely just want from here to....
13+ @gatekeeper {
14+ path /xrpc/com.atproto.server.getSession
15+ path /xrpc/com.atproto.server.updateEmail
16+ path /xrpc/com.atproto.server.createSession
17+ path /@atproto/oauth-provider/~api/sign-in
18+ }
19+20+ handle @gatekeeper {
21+ #This is the address for PDS gatekeeper, default is 8080
22+ reverse_proxy http://localhost:8080
23+ }
24+25+ reverse_proxy http://localhost:3000
26+ #..here. Copy and paste this replacing the reverse_proxy http://localhost:3000 line
27+}
28+29+
···132 let sent_from = env::var("PDS_EMAIL_FROM_ADDRESS")
133 .expect("PDS_EMAIL_FROM_ADDRESS is not set in your pds.env file");
134135- //TODO current bug running in docker
136- // https://github.com/lettre/lettre/issues/349#issuecomment-510155500
137-138 let mailer: AsyncSmtpTransport<Tokio1Executor> =
139 AsyncSmtpTransport::<Tokio1Executor>::from_url(smtp_url.as_str())?.build();
140 //Email templates setup
···132 let sent_from = env::var("PDS_EMAIL_FROM_ADDRESS")
133 .expect("PDS_EMAIL_FROM_ADDRESS is not set in your pds.env file");
134000135 let mailer: AsyncSmtpTransport<Tokio1Executor> =
136 AsyncSmtpTransport::<Tokio1Executor>::from_url(smtp_url.as_str())?.build();
137 //Email templates setup