this repo has no description
1# Tranquil PDS Production Installation on Debian
2This guide covers installing Tranquil PDS on Debian 13.
3
4## Prerequisites
5- A VPS with at least 2GB RAM and 20GB disk
6- A domain name pointing to your server's IP
7- A wildcard TLS certificate for `*.pds.example.com` (user handles are served as subdomains)
8- Root or sudo access
9## 1. System Setup
10```bash
11apt update && apt upgrade -y
12apt install -y curl git build-essential pkg-config libssl-dev
13```
14## 2. Install Rust
15```bash
16curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
17source ~/.cargo/env
18rustup default stable
19```
20This installs the latest stable Rust.
21## 3. Install postgres
22```bash
23apt install -y postgresql postgresql-contrib
24systemctl enable postgresql
25systemctl start postgresql
26sudo -u postgres psql -c "CREATE USER tranquil_pds WITH PASSWORD 'your-secure-password';"
27sudo -u postgres psql -c "CREATE DATABASE pds OWNER tranquil_pds;"
28sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE pds TO tranquil_pds;"
29```
30## 4. Install minio
31```bash
32curl -O https://dl.min.io/server/minio/release/linux-amd64/minio
33chmod +x minio
34mv minio /usr/local/bin/
35mkdir -p /var/lib/minio/data
36useradd -r -s /sbin/nologin minio-user
37chown -R minio-user:minio-user /var/lib/minio
38cat > /etc/default/minio << 'EOF'
39MINIO_ROOT_USER=minioadmin
40MINIO_ROOT_PASSWORD=your-minio-password
41MINIO_VOLUMES="/var/lib/minio/data"
42MINIO_OPTS="--console-address :9001"
43EOF
44cat > /etc/systemd/system/minio.service << 'EOF'
45[Unit]
46Description=MinIO Object Storage
47After=network.target
48[Service]
49User=minio-user
50Group=minio-user
51EnvironmentFile=/etc/default/minio
52ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
53Restart=always
54LimitNOFILE=65536
55[Install]
56WantedBy=multi-user.target
57EOF
58systemctl daemon-reload
59systemctl enable minio
60systemctl start minio
61```
62Create the blob bucket (wait a few seconds for minio to start):
63```bash
64curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
65chmod +x mc
66mv mc /usr/local/bin/
67mc alias set local http://localhost:9000 minioadmin your-minio-password
68mc mb local/pds-blobs
69```
70## 5. Install valkey
71```bash
72apt install -y valkey
73systemctl enable valkey-server
74systemctl start valkey-server
75```
76## 6. Install deno (for frontend build)
77```bash
78curl -fsSL https://deno.land/install.sh | sh
79export PATH="$HOME/.deno/bin:$PATH"
80echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.bashrc
81```
82## 7. Clone and Build Tranquil PDS
83```bash
84cd /opt
85git clone https://tangled.org/lewis.moe/bspds-sandbox tranquil-pds
86cd tranquil-pds
87cd frontend
88deno task build
89cd ..
90cargo build --release
91```
92## 8. Install sqlx-cli and Run Migrations
93```bash
94cargo install sqlx-cli --no-default-features --features postgres
95export DATABASE_URL="postgres://tranquil_pds:your-secure-password@localhost:5432/pds"
96sqlx migrate run
97```
98## 9. Configure Tranquil PDS
99```bash
100mkdir -p /etc/tranquil-pds
101cp /opt/tranquil-pds/.env.example /etc/tranquil-pds/tranquil-pds.env
102chmod 600 /etc/tranquil-pds/tranquil-pds.env
103```
104Edit `/etc/tranquil-pds/tranquil-pds.env` and fill in your values. Generate secrets with:
105```bash
106openssl rand -base64 48
107```
108## 10. Create Systemd Service
109```bash
110useradd -r -s /sbin/nologin tranquil-pds
111cp /opt/tranquil-pds/target/release/tranquil-pds /usr/local/bin/
112mkdir -p /var/lib/tranquil-pds
113cp -r /opt/tranquil-pds/frontend/dist /var/lib/tranquil-pds/frontend
114chown -R tranquil-pds:tranquil-pds /var/lib/tranquil-pds
115cat > /etc/systemd/system/tranquil-pds.service << 'EOF'
116[Unit]
117Description=Tranquil PDS - AT Protocol PDS
118After=network.target postgresql.service minio.service
119[Service]
120Type=simple
121User=tranquil-pds
122Group=tranquil-pds
123EnvironmentFile=/etc/tranquil-pds/tranquil-pds.env
124Environment=FRONTEND_DIR=/var/lib/tranquil-pds/frontend
125ExecStart=/usr/local/bin/tranquil-pds
126Restart=always
127RestartSec=5
128[Install]
129WantedBy=multi-user.target
130EOF
131systemctl daemon-reload
132systemctl enable tranquil-pds
133systemctl start tranquil-pds
134```
135## 11. Install and Configure nginx
136```bash
137apt install -y nginx certbot python3-certbot-nginx
138cat > /etc/nginx/sites-available/tranquil-pds << 'EOF'
139server {
140 listen 80;
141 listen [::]:80;
142 server_name pds.example.com;
143 location / {
144 proxy_pass http://127.0.0.1:3000;
145 proxy_http_version 1.1;
146 proxy_set_header Upgrade $http_upgrade;
147 proxy_set_header Connection "upgrade";
148 proxy_set_header Host $host;
149 proxy_set_header X-Real-IP $remote_addr;
150 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
151 proxy_set_header X-Forwarded-Proto $scheme;
152 proxy_read_timeout 86400;
153 }
154}
155EOF
156ln -s /etc/nginx/sites-available/tranquil-pds /etc/nginx/sites-enabled/
157rm -f /etc/nginx/sites-enabled/default
158nginx -t
159systemctl reload nginx
160```
161## 12. Obtain Wildcard SSL Certificate
162User handles are served as subdomains (e.g., `alice.pds.example.com`), so you need a wildcard certificate.
163
164Wildcard certs require DNS-01 validation. If your DNS provider has a certbot plugin:
165```bash
166apt install -y python3-certbot-dns-cloudflare
167certbot certonly --dns-cloudflare \
168 --dns-cloudflare-credentials /etc/cloudflare.ini \
169 -d pds.example.com -d '*.pds.example.com'
170```
171
172For manual DNS validation (works with any provider):
173```bash
174certbot certonly --manual --preferred-challenges dns \
175 -d pds.example.com -d '*.pds.example.com'
176```
177Follow the prompts to add TXT records to your DNS. Note: manual mode doesn't auto-renew.
178
179After obtaining the cert, update nginx to use it and reload.
180## 13. Configure Firewall
181```bash
182apt install -y ufw
183ufw allow ssh
184ufw allow 80/tcp
185ufw allow 443/tcp
186ufw enable
187```
188## 14. Verify Installation
189```bash
190systemctl status tranquil-pds
191curl -s https://pds.example.com/xrpc/_health | jq
192curl -s https://pds.example.com/.well-known/atproto-did
193```
194## Maintenance
195View logs:
196```bash
197journalctl -u tranquil-pds -f
198```
199Update Tranquil PDS:
200```bash
201cd /opt/tranquil-pds
202git pull
203cd frontend && deno task build && cd ..
204cargo build --release
205systemctl stop tranquil-pds
206cp target/release/tranquil-pds /usr/local/bin/
207cp -r frontend/dist /var/lib/tranquil-pds/frontend
208DATABASE_URL="postgres://tranquil_pds:your-secure-password@localhost:5432/pds" sqlx migrate run
209systemctl start tranquil-pds
210```
211Backup database:
212```bash
213sudo -u postgres pg_dump pds > /var/backups/pds-$(date +%Y%m%d).sql
214```