···11+module.exports = {
22+/* httpUnsafeOrigin is the URL that clients will enter to load your instance.
33+ * Any other URL that somehow points to your instance is supposed to be blocked.
44+ * The default provided below assumes you are loading CryptPad from a server
55+ * which is running on the same machine, using port 3000.
66+ *
77+ * In a production instance this should be available ONLY over HTTPS
88+ * using the default port for HTTPS (443) ie. https://cryptpad.fr
99+ * In such a case this should be also handled by NGINX, as documented in
1010+ * cryptpad/docs/example.nginx.conf (see the $main_domain variable)
1111+ *
1212+ */
1313+ httpUnsafeOrigin: 'https://drive.renoux.dev',
1414+1515+/* httpSafeOrigin is the URL used for the 'sandbox' described above.
1616+ * If you're testing or developing with CryptPad on your local machine then
1717+ * it is appropriate to leave this blank. The default behaviour is to serve
1818+ * the main domain over port 3000 and to serve the sandbox content over port 3001.
1919+ *
2020+ * This is not appropriate in a production environment where invasive networks
2121+ * may filter traffic going over abnormal ports.
2222+ * To correctly configure your production instance you must provide a URL
2323+ * with a different domain (a subdomain is sufficient).
2424+ * It will be used to load the UI in our 'sandbox' system.
2525+ *
2626+ * This value corresponds to the $sandbox_domain variable
2727+ * in the example nginx file.
2828+ *
2929+ * Note that in order for the sandboxing system to be effective
3030+ * httpSafeOrigin must be different from httpUnsafeOrigin.
3131+ *
3232+ * CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS.
3333+ */
3434+ httpSafeOrigin: "https://drive.s.renoux.dev",
3535+3636+/* httpAddress specifies the address on which the nodejs server
3737+ * should be accessible. By default it will listen on localhost
3838+ * (IPv4 & IPv6 if enabled). If you want it to listen on
3939+ * a specific address, specify it here. e.g '192.168.0.1'
4040+ *
4141+ */
4242+ httpAddress: '127.0.0.1',
4343+4444+/* httpPort specifies on which port the nodejs server should listen.
4545+ * By default it will serve content over port 3000, which is suitable
4646+ * for both local development and for use with the provided nginx example,
4747+ * which will proxy websocket traffic to your node server.
4848+ *
4949+ */
5050+ httpPort: 4020,
5151+5252+/* httpSafePort purpose is to emulate another origin for the sandbox when
5353+ * you don't have two domains at hand (i.e. when httpSafeOrigin not defined).
5454+ * It is meant to be used only in case where you are working on a local
5555+ * development instance. The default value is your httpPort + 1.
5656+ *
5757+ */
5858+ //httpSafePort: 3001,
5959+6060+/* Websockets need to be exposed on a separate port from the rest of
6161+ * the platform's HTTP traffic. Port 3003 is used by default.
6262+ * You can change this to a different port if it is in use by a
6363+ * different service, but under most circumstances you can leave this
6464+ * commented and it will work.
6565+ *
6666+ * In production environments, your reverse proxy (usually NGINX)
6767+ * will need to forward websocket traffic (/cryptpad_websocket)
6868+ * to this port.
6969+ *
7070+ */
7171+ websocketPort: 4021,
7272+7373+/* CryptPad will launch a child process for every core available
7474+ * in order to perform CPU-intensive tasks in parallel.
7575+ * Some host environments may have a very large number of cores available
7676+ * or you may want to limit how much computing power CryptPad can take.
7777+ * If so, set 'maxWorkers' to a positive integer.
7878+ */
7979+ // maxWorkers: 4,
8080+8181+ /* =====================
8282+ * Sessions
8383+ * ===================== */
8484+8585+ /* Accounts can be protected with an OTP (One Time Password) system
8686+ * to add a second authentication layer. Such accounts use a session
8787+ * with a given lifetime after which they are logged out and need
8888+ * to be re-authenticated. You can configure the lifetime of these
8989+ * sessions here.
9090+ *
9191+ * defaults to 7 days
9292+ */
9393+ //otpSessionExpiration: 7*24, // hours
9494+9595+ /* Registered users can be forced to protect their account
9696+ * with a Multi-factor Authentication (MFA) tool like a TOTP
9797+ * authenticator application.
9898+ *
9999+ * defaults to false
100100+ */
101101+ //enforceMFA: false,
102102+103103+ /* =====================
104104+ * Privacy
105105+ * ===================== */
106106+107107+ /* Depending on where your instance is hosted, you may be required to log IP
108108+ * addresses of the users who make a change to a document. This setting allows you
109109+ * to do so. You can configure the logging system below in this config file.
110110+ * Setting this value to true will include a log for each websocket connection
111111+ * including this connection's unique ID, the user public key and the IP.
112112+ * NOTE: this option requires a log level of "info" or below.
113113+ *
114114+ * defaults to false
115115+ */
116116+ //logIP: false,
117117+118118+ /* =====================
119119+ * Admin
120120+ * ===================== */
121121+122122+ /*
123123+ * CryptPad contains an administration panel. Its access is restricted to specific
124124+ * users using the following list and the management interface on the instance.
125125+ * To give access to the admin panel to a user account, just add their public signing
126126+ * key, which can be found on the settings page for registered users. Access can be
127127+ * revoked directly from the interface, unless you added the key below.
128128+ * Entries should be strings separated by a comma.
129129+ * adminKeys: [
130130+ * "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
131131+ * "[cryptpad-user2@my.awesome.website/jA-9c5iNuG7SyxzGCjwJXVnk5NPfAOO8fQuQ0dC83RE=]",
132132+ * ]
133133+ *
134134+ */
135135+ adminKeys: [
136136+137137+ ],
138138+139139+ /* =====================
140140+ * STORAGE
141141+ * ===================== */
142142+143143+ /* Pads that are not 'pinned' by any registered user can be set to expire
144144+ * after a configurable number of days of inactivity (default 90 days).
145145+ * The value can be changed or set to false to remove expiration.
146146+ * Expired pads can then be removed using a cron job calling the
147147+ * `evict-inactive.js` script with node
148148+ *
149149+ * defaults to 90 days if nothing is provided
150150+ */
151151+ //inactiveTime: 90, // days
152152+153153+ /* CryptPad archives some data instead of deleting it outright.
154154+ * This archived data still takes up space and so you'll probably still want to
155155+ * remove these files after a brief period.
156156+ *
157157+ * cryptpad/scripts/evict-archived.js is intended to be run daily
158158+ * from a crontab or similar scheduling service.
159159+ *
160160+ * The intent with this feature is to provide a safety net in case of accidental
161161+ * deletion. Set this value to the number of days you'd like to retain
162162+ * archived data before it's removed permanently.
163163+ *
164164+ * defaults to 15 days if nothing is provided
165165+ */
166166+ //archiveRetentionTime: 15,
167167+168168+ /* It's possible to configure your instance to remove data
169169+ * stored on behalf of inactive accounts. Set 'accountRetentionTime'
170170+ * to the number of days an account can remain idle before its
171171+ * documents and other account data is removed.
172172+ *
173173+ * Leave this value commented out to preserve all data stored
174174+ * by user accounts regardless of inactivity.
175175+ */
176176+ //accountRetentionTime: 365,
177177+178178+ /* Starting with CryptPad 3.23.0, the server automatically runs
179179+ * the script responsible for removing inactive data according to
180180+ * your configured definition of inactivity. Set this value to `true`
181181+ * if you prefer not to remove inactive data, or if you prefer to
182182+ * do so manually using `scripts/evict-inactive.js`.
183183+ */
184184+ //disableIntegratedEviction: true,
185185+186186+187187+ /* Max Upload Size (bytes)
188188+ * this sets the maximum size of any one file uploaded to the server.
189189+ * anything larger than this size will be rejected
190190+ * defaults to 20MB if no value is provided
191191+ */
192192+ //maxUploadSize: 20 * 1024 * 1024,
193193+194194+ /* Users with premium accounts (those with a plan included in their customLimit)
195195+ * can benefit from an increased upload size limit. By default they are restricted to the same
196196+ * upload size as any other registered user.
197197+ *
198198+ */
199199+ //premiumUploadSize: 100 * 1024 * 1024,
200200+201201+ /* =====================
202202+ * DATABASE VOLUMES
203203+ * ===================== */
204204+205205+ /*
206206+ * CryptPad stores each document in an individual file on your hard drive.
207207+ * Specify a directory where files should be stored.
208208+ * It will be created automatically if it does not already exist.
209209+ */
210210+ filePath: './datastore/',
211211+212212+ /* CryptPad offers the ability to archive data for a configurable period
213213+ * before deleting it, allowing a means of recovering data in the event
214214+ * that it was deleted accidentally.
215215+ *
216216+ * To set the location of this archive directory to a custom value, change
217217+ * the path below:
218218+ */
219219+ archivePath: './data/archive',
220220+221221+ /* CryptPad allows logged in users to request that the server
222222+ * store particular documents indefinitely. This is called 'pinning'.
223223+ * Pin requests are stored in a pin-store. The location of this store is
224224+ * defined here.
225225+ */
226226+ pinPath: './data/pins',
227227+228228+ /* if you would like the list of scheduled tasks to be stored in
229229+ a custom location, change the path below:
230230+ */
231231+ taskPath: './data/tasks',
232232+233233+ /* if you would like users' authenticated blocks to be stored in
234234+ a custom location, change the path below:
235235+ */
236236+ blockPath: './block',
237237+238238+ /* CryptPad allows logged in users to upload encrypted files. Files/blobs
239239+ * are stored in a 'blob-store'. Set its location here.
240240+ */
241241+ blobPath: './blob',
242242+243243+ /* CryptPad stores incomplete blobs in a 'staging' area until they are
244244+ * fully uploaded. Set its location here.
245245+ */
246246+ blobStagingPath: './data/blobstage',
247247+248248+ decreePath: './data/decrees',
249249+250250+ /* CryptPad supports logging events directly to the disk in a 'logs' directory
251251+ * Set its location here, or set it to false (or nothing) if you'd rather not log
252252+ */
253253+ logPath: './data/logs',
254254+255255+ /* =====================
256256+ * Debugging
257257+ * ===================== */
258258+259259+ /* CryptPad can log activity to stdout
260260+ * This may be useful for debugging
261261+ */
262262+ logToStdout: false,
263263+264264+ /* CryptPad can be configured to log more or less
265265+ * the various settings are listed below by order of importance
266266+ *
267267+ * silly, verbose, debug, feedback, info, warn, error
268268+ *
269269+ * Choose the least important level of logging you wish to see.
270270+ * For example, a 'silly' logLevel will display everything,
271271+ * while 'info' will display 'info', 'warn', and 'error' logs
272272+ *
273273+ * This will affect both logging to the console and the disk.
274274+ */
275275+ logLevel: 'info',
276276+277277+ /* clients can use the /settings/ app to opt out of usage feedback
278278+ * which informs the server of things like how much each app is being
279279+ * used, and whether certain clientside features are supported by
280280+ * the client's browser. The intent is to provide feedback to the admin
281281+ * such that the service can be improved. Enable this with `true`
282282+ * and ignore feedback with `false` or by commenting the attribute
283283+ *
284284+ * You will need to set your logLevel to include 'feedback'. Set this
285285+ * to false if you'd like to exclude feedback from your logs.
286286+ */
287287+ logFeedback: false,
288288+289289+ /* CryptPad supports verbose logging
290290+ * (false by default)
291291+ */
292292+ verbose: false,
293293+294294+ /* Surplus information:
295295+ *
296296+ * 'installMethod' is included in server telemetry to voluntarily
297297+ * indicate how many instances are using unofficial installation methods
298298+ * such as Docker.
299299+ *
300300+ */
301301+ installMethod: 'nuhuh',
302302+};
···11+services:
22+ immich-server:
33+ container_name: immich_server
44+ image: ghcr.io/immich-app/immich-server:v2.7.5
55+ # extends:
66+ # file: hwaccel.transcoding.yml
77+ # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
88+ volumes:
99+ - /nas/immich/library:/data
1010+ - /etc/localtime:/etc/localtime:ro
1111+ env_file:
1212+ - .env
1313+ ports:
1414+ - "127.0.0.1:4040:2283"
1515+ depends_on:
1616+ - redis
1717+ - database
1818+ restart: always
1919+ healthcheck:
2020+ disable: false
2121+2222+ immich-machine-learning:
2323+ container_name: immich_machine_learning
2424+ # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
2525+ # Example tag: v2.7.5-cuda
2626+ image: ghcr.io/immich-app/immich-machine-learning:v2.7.5
2727+ # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
2828+ # file: hwaccel.ml.yml
2929+ # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
3030+ volumes:
3131+ - model-cache:/cache
3232+ env_file:
3333+ - .env
3434+ restart: always
3535+ healthcheck:
3636+ disable: false
3737+3838+ redis:
3939+ container_name: immich_redis
4040+ image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9
4141+ healthcheck:
4242+ test: redis-cli ping || exit 1
4343+ restart: always
4444+4545+ database:
4646+ container_name: immich_postgres
4747+ image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
4848+ environment:
4949+ POSTGRES_PASSWORD: ${DB_PASSWORD}
5050+ POSTGRES_USER: ${DB_USERNAME}
5151+ POSTGRES_DB: ${DB_DATABASE_NAME}
5252+ POSTGRES_INITDB_ARGS: "--data-checksums"
5353+ # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
5454+ DB_STORAGE_TYPE: "HDD"
5555+ volumes:
5656+ - /nas/immich/pg_data:/var/lib/postgresql/data
5757+ shm_size: 128mb
5858+ restart: always
5959+ healthcheck:
6060+ disable: false
6161+6262+volumes:
6363+ model-cache:
+57
docker/fant0mib0t/immich/hwaccel.ml.yml
···11+# Configurations for hardware-accelerated machine learning
22+33+# If using Unraid or another platform that doesn't allow multiple Compose files,
44+# you can inline the config for a backend by copying its contents
55+# into the immich-machine-learning service in the docker-compose.yml file.
66+77+# See https://docs.immich.app/features/ml-hardware-acceleration for info on usage.
88+99+services:
1010+ armnn:
1111+ devices:
1212+ - /dev/mali0:/dev/mali0
1313+ volumes:
1414+ - /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
1515+ - /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)
1616+1717+ rknn:
1818+ security_opt:
1919+ - systempaths=unconfined
2020+ - apparmor=unconfined
2121+ devices:
2222+ - /dev/dri:/dev/dri
2323+2424+ cpu: {}
2525+2626+ cuda:
2727+ deploy:
2828+ resources:
2929+ reservations:
3030+ devices:
3131+ - driver: nvidia
3232+ count: 1
3333+ capabilities:
3434+ - gpu
3535+3636+ rocm:
3737+ group_add:
3838+ - video
3939+ devices:
4040+ - /dev/dri:/dev/dri
4141+ - /dev/kfd:/dev/kfd
4242+4343+ openvino:
4444+ device_cgroup_rules:
4545+ - 'c 189:* rmw'
4646+ devices:
4747+ - /dev/dri:/dev/dri
4848+ volumes:
4949+ - /dev/bus/usb:/dev/bus/usb
5050+5151+ openvino-wsl:
5252+ devices:
5353+ - /dev/dri:/dev/dri
5454+ - /dev/dxg:/dev/dxg
5555+ volumes:
5656+ - /dev/bus/usb:/dev/bus/usb
5757+ - /usr/lib/wsl:/usr/lib/wsl
+55
docker/fant0mib0t/immich/hwaccel.transcoding.yml
···11+# Configurations for hardware-accelerated transcoding
22+33+# If using Unraid or another platform that doesn't allow multiple Compose files,
44+# you can inline the config for a backend by copying its contents
55+# into the immich-microservices service in the docker-compose.yml file.
66+77+# See https://docs.immich.app/features/hardware-transcoding for more info on using hardware transcoding.
88+99+services:
1010+ cpu: {}
1111+1212+ nvenc:
1313+ deploy:
1414+ resources:
1515+ reservations:
1616+ devices:
1717+ - driver: nvidia
1818+ count: 1
1919+ capabilities:
2020+ - gpu
2121+ - compute
2222+ - video
2323+2424+ quicksync:
2525+ devices:
2626+ - /dev/dri:/dev/dri
2727+2828+ rkmpp:
2929+ security_opt: # enables full access to /sys and /proc, still far better than privileged: true
3030+ - systempaths=unconfined
3131+ - apparmor=unconfined
3232+ group_add:
3333+ - video
3434+ devices:
3535+ - /dev/rga:/dev/rga
3636+ - /dev/dri:/dev/dri
3737+ - /dev/dma_heap:/dev/dma_heap
3838+ - /dev/mpp_service:/dev/mpp_service
3939+ #- /dev/mali0:/dev/mali0 # only required to enable OpenCL-accelerated HDR -> SDR tonemapping
4040+ volumes:
4141+ #- /etc/OpenCL:/etc/OpenCL:ro # only required to enable OpenCL-accelerated HDR -> SDR tonemapping
4242+ #- /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro # only required to enable OpenCL-accelerated HDR -> SDR tonemapping
4343+4444+ vaapi:
4545+ devices:
4646+ - /dev/dri:/dev/dri
4747+4848+ vaapi-wsl: # use this for VAAPI if you're running Immich in WSL2
4949+ devices:
5050+ - /dev/dri:/dev/dri
5151+ - /dev/dxg:/dev/dxg
5252+ volumes:
5353+ - /usr/lib/wsl:/usr/lib/wsl
5454+ environment:
5555+ - LIBVA_DRIVER_NAME=d3d12
···11+[server]
22+# Public hostname of the PDS, such as `pds.example.com`.
33+#
44+# Can also be specified via environment variable `PDS_HOSTNAME`.
55+#
66+# Required! This value must be specified.
77+hostname = "pds.fantomitechno.dev"
88+99+# Address to bind the HTTP server to.
1010+#
1111+# Can also be specified via environment variable `SERVER_HOST`.
1212+#
1313+# Default value: "127.0.0.1"
1414+host = "127.0.0.1"
1515+1616+# Port to bind the HTTP server to.
1717+#
1818+# Can also be specified via environment variable `SERVER_PORT`.
1919+#
2020+# Default value: 3000
2121+2222+# List of domains for user handles.
2323+# Defaults to the PDS hostname when not set.
2424+#
2525+# Can also be specified via environment variable `PDS_USER_HANDLE_DOMAINS`.
2626+#user_handle_domains =
2727+2828+# Enable PDS-hosted did:web identities. Hosting did:web requires a
2929+# long-term commitment to serve DID documents; opt-in only.
3030+#
3131+# Can also be specified via environment variable `ENABLE_PDS_HOSTED_DID_WEB`.
3232+#
3333+# Default value: false
3434+#enable_pds_hosted_did_web = false
3535+3636+# When set to true, skip age-assurance birthday prompt for all accounts.
3737+#
3838+# Can also be specified via environment variable `PDS_AGE_ASSURANCE_OVERRIDE`.
3939+#
4040+# Default value: false
4141+age_assurance_override = true
4242+4343+# Require an invite code for new account registration.
4444+#
4545+# Can also be specified via environment variable `INVITE_CODE_REQUIRED`.
4646+#
4747+# Default value: true
4848+invite_code_required = true
4949+5050+# Allow HTTP (non-TLS) proxy requests. Only useful during development.
5151+#
5252+# Can also be specified via environment variable `ALLOW_HTTP_PROXY`.
5353+#
5454+# Default value: false
5555+#allow_http_proxy = false
5656+5757+# Disable all rate limiting. Should only be used in testing.
5858+#
5959+# Can also be specified via environment variable `DISABLE_RATE_LIMITING`.
6060+#
6161+# Default value: false
6262+#disable_rate_limiting = false
6363+6464+# Skip the verified-comms-channel gate for login and record writes.
6565+# Please keep this off unless you're an invite-only PDS!
6666+#
6767+# Can also be specified via environment variable `DISABLE_ACCOUNT_VERIFICATION_GATE`.
6868+#
6969+# Default value: false
7070+#disable_account_verification_gate = false
7171+7272+# List of additional banned words for handle validation.
7373+#
7474+# Can also be specified via environment variable `PDS_BANNED_WORDS`.
7575+#banned_words =
7676+7777+# URL to a privacy policy page.
7878+#
7979+# Can also be specified via environment variable `PRIVACY_POLICY_URL`.
8080+#privacy_policy_url =
8181+8282+# URL to terms of service page.
8383+#
8484+# Can also be specified via environment variable `TERMS_OF_SERVICE_URL`.
8585+#terms_of_service_url =
8686+8787+# Operator contact email address.
8888+#
8989+# Can also be specified via environment variable `CONTACT_EMAIL`.
9090+contact_email = "me@fantomitechno.dev"
9191+9292+# Maximum allowed blob size in bytes (default 10 GiB).
9393+#
9494+# Can also be specified via environment variable `MAX_BLOB_SIZE`.
9595+#
9696+# Default value: 10737418240
9797+#max_blob_size = 10737418240
9898+9999+# Maximum allowed number of preferences
100100+#
101101+# Can also be specified via environment variable `MAX_PREFERENCES_COUNT`.
102102+#
103103+# Default value: 1000
104104+#max_preferences_count = 1000
105105+106106+# If you're not altering TLS config, you don't have to worry about this.
107107+# This is the number of trusted reverse proxies in front of Tranquil.
108108+# We read the client IP used for rate limiting and device records this many hops
109109+# from the right of the X-Forwarded-For header.
110110+# When left unset, Tranquil will assume:
111111+# - 0, if the TLS termination is happening here on Tranquil via the TLS config
112112+# - 1, if the TLS termination *isn't* happening here.
113113+#
114114+# Can also be specified via environment variable `TRUSTED_PROXY_COUNT`.
115115+#trusted_proxy_count =
116116+117117+[server.tls]
118118+# The path to the TLS cert chain.
119119+# If you set both this and `key_path`, the server terminates TLS itself rather than expecting
120120+# a reverse proxy to do it. The certificate and key reload on SIGHUP.
121121+#
122122+# Can also be specified via environment variable `TLS_CERT_PATH`.
123123+#cert_path =
124124+125125+# Path to the TLS private key.
126126+#
127127+# Can also be specified via environment variable `TLS_KEY_PATH`.
128128+#key_path =
129129+130130+# Serve HTTP/3 over QUIC on the same UDP port as the TCP listener.
131131+# Requires cert_path and key_path.
132132+#
133133+# Can also be specified via environment variable `TLS_HTTP3`.
134134+#
135135+# Default value: false
136136+#http3 = false
137137+138138+[frontend]
139139+# Whether to enable the built in serving of the frontend.
140140+#
141141+# Can also be specified via environment variable `FRONTEND_ENABLED`.
142142+#
143143+# Default value: true
144144+enabled = true
145145+146146+# Directory to serve as the frontend. The oauth_client_metadata.json will have any references to
147147+# the frontend hostname replaced by the configured frontend hostname.
148148+#
149149+# Can also be specified via environment variable `FRONTEND_DIR`.
150150+#
151151+# Default value: "/var/lib/tranquil-pds/frontend"
152152+#dir = "/var/lib/tranquil-pds/frontend"
153153+154154+[database]
155155+# PostgreSQL connection URL.
156156+#
157157+# Can also be specified via environment variable `DATABASE_URL`.
158158+#
159159+# Required! This value must be specified.
160160+#url =
161161+162162+# Maximum number of connections in the pool.
163163+#
164164+# Can also be specified via environment variable `DATABASE_MAX_CONNECTIONS`.
165165+#
166166+# Default value: 100
167167+#max_connections = 100
168168+169169+# Minimum number of idle connections kept in the pool.
170170+#
171171+# Can also be specified via environment variable `DATABASE_MIN_CONNECTIONS`.
172172+#
173173+# Default value: 10
174174+#min_connections = 10
175175+176176+# Timeout in seconds when acquiring a connection from the pool.
177177+#
178178+# Can also be specified via environment variable `DATABASE_ACQUIRE_TIMEOUT_SECS`.
179179+#
180180+# Default value: 10
181181+#acquire_timeout_secs = 10
182182+183183+[secrets]
184184+# Secret used for signing JWTs. Must be at least 32 characters in
185185+# production.
186186+#
187187+# Can also be specified via environment variable `JWT_SECRET`.
188188+#jwt_secret =
189189+190190+# Secret used for DPoP proof validation. Must be at least 32 characters
191191+# in production.
192192+#
193193+# Can also be specified via environment variable `DPOP_SECRET`.
194194+#dpop_secret =
195195+196196+# Master key used for key-encryption and HKDF derivation. Must be at
197197+# least 32 characters in production.
198198+#
199199+# Can also be specified via environment variable `MASTER_KEY`.
200200+#master_key =
201201+202202+# Optional operator-held PLC recovery key, as a public `did:key`. The PDS
203203+# continues to sign PLC operations with the per-account signing key, which
204204+# always remains in `rotationKeys`.
205205+#
206206+# Can also be specified via environment variable `PLC_ROTATION_KEY`.
207207+#plc_rotation_key =
208208+209209+# Allow insecure/test secrets. NEVER enable in production.
210210+#
211211+# Can also be specified via environment variable `TRANQUIL_PDS_ALLOW_INSECURE_SECRETS`.
212212+#
213213+# Default value: false
214214+#allow_insecure = false
215215+216216+[storage]
217217+# Storage backend: `filesystem` or `s3`.
218218+#
219219+# Can also be specified via environment variable `BLOB_STORAGE_BACKEND`.
220220+#
221221+# Default value: "filesystem"
222222+#backend = "filesystem"
223223+224224+# Path on disk for the filesystem blob backend.
225225+#
226226+# Can also be specified via environment variable `BLOB_STORAGE_PATH`.
227227+#
228228+# Default value: "/var/lib/tranquil-pds/blobs"
229229+#path = "/var/lib/tranquil-pds/blobs"
230230+231231+# S3 bucket name for blob storage.
232232+#
233233+# Can also be specified via environment variable `S3_BUCKET`.
234234+#s3_bucket =
235235+236236+# Custom S3 endpoint URL.
237237+#
238238+# Can also be specified via environment variable `S3_ENDPOINT`.
239239+#s3_endpoint =
240240+241241+# Repository backend: `postgres` by default, or `tranquil-store`, our embedded db.
242242+# tranquil-store is EXPERIMENTAL!!!! RISK OF TOTAL DATA LOSS.
243243+#
244244+# Can also be specified via environment variable `REPO_BACKEND`.
245245+#
246246+# Default value: "postgres"
247247+#repo_backend = "postgres"
248248+249249+[tranquil_store]
250250+# Directory for tranquil-store data: the metastore, eventlog, and blockstore.
251251+#
252252+# Can also be specified via environment variable `TRANQUIL_STORE_DATA_DIR`.
253253+#
254254+# Default value: "/var/lib/tranquil-pds/store"
255255+#data_dir = "/var/lib/tranquil-pds/store"
256256+257257+# Fjall block cache size in megabytes. Defaults to 20% of system RAM when unset.
258258+#
259259+# Can also be specified via environment variable `TRANQUIL_STORE_MEMORY_BUDGET_MB`.
260260+#memory_budget_mb =
261261+262262+# Number of handler threads. Defaults to available_parallelism / 2.
263263+#
264264+# Can also be specified via environment variable `TRANQUIL_STORE_HANDLER_THREADS`.
265265+#handler_threads =
266266+267267+# Maximum total bytes of pending (unsynced) eventlog payloads. Appenders block
268268+# once this budget is exhausted until in-flight events drain via fsync. Set to
269269+# 0 to disable backpressure. Default: 1 GiB.
270270+#
271271+# Can also be specified via environment variable `TRANQUIL_STORE_EVENTLOG_PENDING_BYTES_BUDGET`.
272272+#
273273+# Default value: 1073741824
274274+#eventlog_pending_bytes_budget = 1073741824
275275+276276+# Maximum size of an individual eventlog payload in bytes. Single events
277277+# larger than this are rejected at append time. Default: 256 MiB.
278278+#
279279+# Can also be specified via environment variable `TRANQUIL_STORE_EVENTLOG_MAX_EVENT_PAYLOAD`.
280280+#
281281+# Default value: 268435456
282282+#eventlog_max_event_payload = 268435456
283283+284284+# Maximum size of an individual blockstore data file in bytes. When the
285285+# active data file reaches this size it is rolled over and becomes
286286+# eligible for compaction. Default: 256 MiB.
287287+#
288288+# Can also be specified via environment variable `TRANQUIL_STORE_MAX_BLOCKSTORE_FILE_SIZE`.
289289+#
290290+# Default value: 268435456
291291+#max_blockstore_file_size = 268435456
292292+293293+# Maximum size of an individual eventlog segment file in bytes. When the
294294+# active segment reaches this size it is sealed and a new one is created.
295295+# Safe to change on a running instance. Default: 256 MiB.
296296+#
297297+# Can also be specified via environment variable `TRANQUIL_STORE_MAX_EVENTLOG_SEGMENT_SIZE`.
298298+#
299299+# Default value: 268435456
300300+#max_eventlog_segment_size = 268435456
301301+302302+[cache]
303303+# Cache backend: `ripple` by default, or `valkey`.
304304+#
305305+# Can also be specified via environment variable `CACHE_BACKEND`.
306306+#
307307+# Default value: "ripple"
308308+#backend = "ripple"
309309+310310+# Valkey / Redis connection URL. Required when `backend = "valkey"`.
311311+#
312312+# Can also be specified via environment variable `VALKEY_URL`.
313313+#valkey_url =
314314+315315+[cache.ripple]
316316+# Address to bind the Ripple gossip protocol listener. With the default
317317+# value and no cluster_key or peers configured, the listener binds
318318+# loopback instead and runs as a single node.
319319+#
320320+# Can also be specified via environment variable `RIPPLE_BIND`.
321321+#
322322+# Default value: "0.0.0.0:0"
323323+#bind_addr = "0.0.0.0:0"
324324+325325+# List of seed peer addresses.
326326+#
327327+# Can also be specified via environment variable `RIPPLE_PEERS`.
328328+#peers =
329329+330330+# Unique machine identifier. Auto-derived from hostname when not set.
331331+#
332332+# Can also be specified via environment variable `RIPPLE_MACHINE_ID`.
333333+#machine_id =
334334+335335+# Gossip protocol interval in milliseconds.
336336+#
337337+# Can also be specified via environment variable `RIPPLE_GOSSIP_INTERVAL_MS`.
338338+#
339339+# Default value: 200
340340+#gossip_interval_ms = 200
341341+342342+# Maximum cache size in megabytes.
343343+#
344344+# Can also be specified via environment variable `RIPPLE_CACHE_MAX_MB`.
345345+#
346346+# Default value: 256
347347+#cache_max_mb = 256
348348+349349+# Pre-shared cluster key authenticating ripple peers. Every node in the
350350+# cluster must set the same value. When unset, peers are unauthenticated.
351351+#
352352+# Can also be specified via environment variable `RIPPLE_CLUSTER_KEY`.
353353+#cluster_key =
354354+355355+# Allow ripple to bind a non-loopback address without a cluster key.
356356+# Peers will be unauthenticated. Intended for trusted private networks.
357357+#
358358+# Can also be specified via environment variable `RIPPLE_ALLOW_INSECURE`.
359359+#
360360+# Default value: false
361361+#allow_insecure = false
362362+363363+[plc]
364364+# Base URL of the PLC directory.
365365+#
366366+# Can also be specified via environment variable `PLC_DIRECTORY_URL`.
367367+#
368368+# Default value: "https://plc.directory"
369369+#directory_url = "https://plc.directory"
370370+371371+# HTTP request timeout in seconds.
372372+#
373373+# Can also be specified via environment variable `PLC_TIMEOUT_SECS`.
374374+#
375375+# Default value: 10
376376+#timeout_secs = 10
377377+378378+# TCP connect timeout in seconds.
379379+#
380380+# Can also be specified via environment variable `PLC_CONNECT_TIMEOUT_SECS`.
381381+#
382382+# Default value: 5
383383+#connect_timeout_secs = 5
384384+385385+# Seconds to cache DID documents in memory.
386386+#
387387+# Can also be specified via environment variable `DID_CACHE_TTL_SECS`.
388388+#
389389+# Default value: 300
390390+#did_cache_ttl_secs = 300
391391+392392+[firehose]
393393+# Size of the in-memory broadcast buffer for firehose events.
394394+#
395395+# Can also be specified via environment variable `FIREHOSE_BUFFER_SIZE`.
396396+#
397397+# Default value: 10000
398398+#buffer_size = 10000
399399+400400+# How many hours of historical events to replay for cursor-based
401401+# firehose connections.
402402+#
403403+# Can also be specified via environment variable `FIREHOSE_BACKFILL_HOURS`.
404404+#
405405+# Default value: 72
406406+#backfill_hours = 72
407407+408408+# Maximum concurrent full-repo exports, eg. getRepo without `since`.
409409+#
410410+# Can also be specified via environment variable `MAX_CONCURRENT_REPO_EXPORTS`.
411411+#
412412+# Default value: 4
413413+#max_concurrent_repo_exports = 4
414414+415415+# List of relay / crawler notification URLs.
416416+#
417417+# Can also be specified via environment variable `CRAWLERS`.
418418+#crawlers =
419419+420420+[email]
421421+# Sender email address. When unset, email sending is disabled.
422422+#
423423+# Can also be specified via environment variable `MAIL_FROM_ADDRESS`.
424424+from_address = "me@no-reply.fantomitechno.dev"
425425+426426+# Display name used in the `From` header.
427427+#
428428+# Can also be specified via environment variable `MAIL_FROM_NAME`.
429429+#
430430+# Default value: "Tranquil PDS"
431431+#from_name = "Tranquil PDS"
432432+433433+# HELO/EHLO name announced to remote SMTP servers. Applies to both
434434+# smarthost and direct-MX modes. Defaults to the server hostname.
435435+#
436436+# Can also be specified via environment variable `MAIL_HELO_NAME`.
437437+#helo_name =
438438+439439+[email.smarthost]
440440+# SMTP relay host. When set, mail is delivered through this host
441441+# instead of resolving recipient MX records directly.
442442+#
443443+# environment variable `MAIL_SMARTHOST_HOST`.
444444+445445+# SMTP relay port.
446446+#
447447+# environment variable `MAIL_SMARTHOST_PORT`.
448448+449449+# SMTP authentication username.
450450+#
451451+# environment variable `MAIL_SMARTHOST_USERNAME`.
452452+453453+# SMTP authentication password.
454454+#
455455+# environment variable `MAIL_SMARTHOST_PASSWORD`.
456456+457457+# TLS mode. Valid values: "implicit", "starttls", "none". Setting "none"
458458+# alongside a password is rejected at startup to prevent transmitting
459459+# credentials in plaintext.
460460+#
461461+# Can also be specified via environment variable `MAIL_SMARTHOST_TLS`.
462462+#
463463+# Default value: "starttls"
464464+#tls = "starttls"
465465+466466+# Max size of the connection pool.
467467+#
468468+# Can also be specified via environment variable `MAIL_SMARTHOST_POOL_SIZE`.
469469+#
470470+# Default value: 4
471471+#pool_size = 4
472472+473473+# Per-command SMTP timeout in seconds. Bounds the security handshake.
474474+#
475475+# Can also be specified via environment variable `MAIL_SMARTHOST_COMMAND_TIMEOUT_SECS`.
476476+#
477477+# Default value: 30
478478+#command_timeout_secs = 30
479479+480480+# Total per-message timeout in seconds. Wraps the entire send so a
481481+# stuck relay cannot stall the comms queue.
482482+#
483483+# Can also be specified via environment variable `MAIL_SMARTHOST_TOTAL_TIMEOUT_SECS`.
484484+#
485485+# Default value: 60
486486+#total_timeout_secs = 60
487487+488488+[email.direct_mx]
489489+# Per-command SMTP timeout in seconds.
490490+#
491491+# Can also be specified via environment variable `MAIL_COMMAND_TIMEOUT_SECS`.
492492+#
493493+# Default value: 30
494494+#command_timeout_secs = 30
495495+496496+# Total per-message timeout across all MX attempts in seconds.
497497+#
498498+# Can also be specified via environment variable `MAIL_TOTAL_TIMEOUT_SECS`.
499499+#
500500+# Default value: 60
501501+#total_timeout_secs = 60
502502+503503+# Max number of concurrent direct-MX sends. Limits the load placed
504504+# on any single recipient MX during a backlog drain.
505505+#
506506+# Can also be specified via environment variable `MAIL_MAX_CONCURRENT_SENDS`.
507507+#
508508+# Default value: 8
509509+#max_concurrent_sends = 8
510510+511511+# Require STARTTLS on every MX hop. When false, TLS is
512512+# attempted opportunistically and the session falls back to plaintext
513513+# if the remote does not advertise STARTTLS. Set true to refuse
514514+# plaintext delivery, at the cost of failing sends to MX hosts that
515515+# do not support TLS.
516516+#
517517+# Can also be specified via environment variable `MAIL_REQUIRE_TLS`.
518518+#
519519+# Default value: false
520520+#require_tls = false
521521+522522+[email.dkim]
523523+# DKIM selector. When unset, outgoing mail is not signed.
524524+#
525525+# Can also be specified via environment variable `MAIL_DKIM_SELECTOR`.
526526+#selector =
527527+528528+# DKIM signing domain.
529529+#
530530+# Can also be specified via environment variable `MAIL_DKIM_DOMAIN`.
531531+#domain =
532532+533533+# Path to the DKIM private key in PEM format. Supports RSA and
534534+# Ed25519 keys.
535535+#
536536+# Can also be specified via environment variable `MAIL_DKIM_KEY_PATH`.
537537+#private_key_path =
538538+539539+[notifications]
540540+# Polling interval in milliseconds for the comms queue.
541541+#
542542+# Can also be specified via environment variable `NOTIFICATION_POLL_INTERVAL_MS`.
543543+#
544544+# Default value: 1000
545545+#poll_interval_ms = 1000
546546+547547+# Number of notifications to process per batch.
548548+#
549549+# Can also be specified via environment variable `NOTIFICATION_BATCH_SIZE`.
550550+#
551551+# Default value: 100
552552+#batch_size = 100
553553+554554+[moderation]
555555+# External report-handling service URL.
556556+#
557557+# Can also be specified via environment variable `REPORT_SERVICE_URL`.
558558+#report_service_url =
559559+560560+# DID of the external report-handling service.
561561+#
562562+# Can also be specified via environment variable `REPORT_SERVICE_DID`.
563563+#report_service_did =
564564+565565+[import]
566566+# Whether the PDS accepts repo imports.
567567+#
568568+# Can also be specified via environment variable `ACCEPTING_REPO_IMPORTS`.
569569+#
570570+# Default value: true
571571+#accepting = true
572572+573573+# Maximum allowed import archive size in bytes (default 1 GiB).
574574+#
575575+# Can also be specified via environment variable `MAX_IMPORT_SIZE`.
576576+#
577577+# Default value: 1073741824
578578+#max_size = 1073741824
579579+580580+# Maximum number of blocks allowed in an import.
581581+#
582582+# Can also be specified via environment variable `MAX_IMPORT_BLOCKS`.
583583+#
584584+# Default value: 500000
585585+#max_blocks = 500000
586586+587587+# Skip CAR verification during import. Only for development/debugging.
588588+#
589589+# Can also be specified via environment variable `SKIP_IMPORT_VERIFICATION`.
590590+#
591591+# Default value: false
592592+#skip_verification = false
593593+594594+[scheduled]
595595+# Interval in seconds between scheduled delete checks.
596596+#
597597+# Can also be specified via environment variable `SCHEDULED_DELETE_CHECK_INTERVAL_SECS`.
598598+#
599599+# Default value: 3600
600600+#delete_check_interval_secs = 3600
601601+602602+# Interval in seconds between data file compaction scans (tranquil-store only).
603603+# Set to 0 to disable.
604604+#
605605+# Can also be specified via environment variable `COMPACTION_INTERVAL_SECS`.
606606+#
607607+# Default value: 3600
608608+#compaction_interval_secs = 3600
609609+610610+# Liveness ratio threshold below which a data file is compacted (0.0-1.0).
611611+#
612612+# Can also be specified via environment variable `COMPACTION_LIVENESS_THRESHOLD`.
613613+#
614614+# Default value: 0.7
615615+#compaction_liveness_threshold = 0.7
616616+617617+# Grace period in milliseconds before a zero-refcount block can be removed by compaction.
618618+#
619619+# Can also be specified via environment variable `COMPACTION_GRACE_PERIOD_MS`.
620620+#
621621+# Default value: 600000
622622+#compaction_grace_period_ms = 600000
623623+624624+# Interval in seconds between reachability walk runs (tranquil-store only).
625625+# Set to 0 to disable. Default: weekly.
626626+#
627627+# Can also be specified via environment variable `REACHABILITY_WALK_INTERVAL_SECS`.
628628+#
629629+# Default value: 604800
630630+#reachability_walk_interval_secs = 604800
631631+632632+# Interval in seconds between continuous archival passes (tranquil-store only).
633633+# Sealed eventlog segments are copied to the archival destination each tick.
634634+# Set to 0 to disable. Default: 60 seconds.
635635+#
636636+# Can also be specified via environment variable `ARCHIVAL_INTERVAL_SECS`.
637637+#
638638+# Default value: 60
639639+#archival_interval_secs = 60
640640+641641+# Archival destination directory for sealed eventlog segments.
642642+# If unset, archival is disabled.
643643+#
644644+# Can also be specified via environment variable `ARCHIVAL_DEST_DIR`.
645645+#archival_dest_dir =
646646+647647+# Maximum age of events retained in the eventlog before pruning.
648648+# Per the atproto firehose spec, the relay backfill window only needs
649649+# to cover "hours or days".
650650+#
651651+# Can also be specified via environment variable `EVENT_RETENTION_MAX_AGE_SECS`.
652652+#
653653+# Default value: 604800
654654+#event_retention_max_age_secs = 604800
655655+656656+# Interval in seconds between event retention prune passes.
657657+# Set to 0 to disable.
658658+#
659659+# Can also be specified via environment variable `EVENT_RETENTION_INTERVAL_SECS`.
660660+#
661661+# Default value: 3600
662662+#event_retention_interval_secs = 3600