···167167CADDYFILE
168168```
169169170170-### Generating K256 private keys
171171-172172-Your PDS will need two secp256k1 private keys provided as hex strings. You can securely generate these keys using `openssl` with the following command:
173173-174174-```bash
175175-openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32
176176-```
177177-178178-This will output a 64-char hex string. Please generate two keys in preperation for the next step.
179179-180170### Create the PDS env configuration file
181171182172You should fill in the first 5 values, but leave the rest untouched unless you have good reason to change it.
183173184174See the PDS environment variables section at the end of this README for explanations of each value
185175176176+Your PDS will need two secp256k1 private keys provided as hex strings. You can securely generate these keys using `openssl` with the following command:
177177+178178+**Note:**
179179+* Replace `example.com` with your domain name.
180180+186181```bash
182182+PDS_HOSTNAME="example.com"
183183+PDS_JWT_SECRET="$(openssl rand --hex 16)"
184184+PDS_ADMIN_PASSWORD="$(openssl rand --hex 16)"
185185+PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX="$(openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32)"
186186+PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX="$(openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32)"
187187+187188cat <<PDS_CONFIG | sudo tee /data/pds.env
188188-PDS_HOSTNAME=<YOUR_HOSTNAME>
189189-PDS_JWT_SECRET=<VALUE>
190190-PDS_ADMIN_PASSWORD=<VALUE>
191191-PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX=<VALUE>
192192-PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=<VALUE>
189189+PDS_HOSTNAME=${PDS_HOSTNAME}
190190+PDS_JWT_SECRET=${PDS_JWT_SECRET}
191191+PDS_ADMIN_PASSWORD=${PDS_ADMIN_PASSWORD}
192192+PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX=${PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX}
193193+PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=${PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX}
193194PDS_DB_SQLITE_LOCATION=/data/pds.sqlite
194195PDS_BLOBSTORE_DISK_LOCATION=/data/blocks
195196PDS_DID_PLC_URL=https://plc.bsky-sandbox.dev
···203204204205#### Download the Docker compose file
205206206206-Download the `compose.yaml` to run your PDS with the require "sidecar" containers.
207207+Download the `compose.yaml` to run your PDS, which includes the following containers:
208208+209209+* `pds` Node PDS server running on http://localhost:3000
210210+* `caddy` HTTP reverse proxy handling TLS and proxying requests to the PDS server
211211+* `watchtower` Daemon responsible for auto-updating containers to keep the server secure and federating
207212208213```bash
209214curl https://raw.githubusercontent.com/bluesky-social/pds/main/compose.yaml >compose.yaml