This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / docker-compose.yml
13 kB 416 lines
1services: 2 redis: 3 image: redis:7-alpine 4 restart: unless-stopped 5 networks: [tngl] 6 7 postgres: 8 image: postgres:14-alpine 9 restart: unless-stopped 10 environment: 11 POSTGRES_USER: tnglr 12 POSTGRES_PASSWORD: tnglr 13 volumes: 14 - postgres-data:/var/lib/postgresql/data 15 - ./localinfra/postgres-init.sql:/docker-entrypoint-initdb.d/init.sql 16 healthcheck: 17 test: ["CMD-SHELL", "pg_isready -U tnglr -d plc"] 18 interval: 2s 19 timeout: 2s 20 retries: 30 21 start_period: 5s 22 networks: [tngl] 23 24 pds: 25 image: ghcr.io/bluesky-social/pds:0.4.219 26 restart: unless-stopped 27 env_file: localinfra/pds.env 28 environment: 29 PDS_DID_PLC_URL: http://plc:8080 30 NODE_EXTRA_CA_CERTS: /caddy-ca/root.crt 31 volumes: 32 - pds-data:/pds 33 - ./localinfra/certs/root.crt:/caddy-ca/root.crt:ro 34 healthcheck: 35 test: ["CMD", "wget", "-qO-", "http://localhost:3000/xrpc/_health"] 36 interval: 2s 37 timeout: 2s 38 retries: 30 39 start_period: 5s 40 depends_on: 41 plc: 42 condition: service_started 43 networks: [tngl] 44 45 init-accounts: 46 image: alpine:3.22 47 restart: "no" 48 env_file: localinfra/pds.env 49 environment: 50 PDS_URL: http://pds:3000 51 OWNER_USER: alice 52 KNOT_HOSTNAME: knot.tngl.boltless.dev 53 SPINDLE_HOSTNAME: spindle.tngl.boltless.dev 54 volumes: 55 - ./localinfra/scripts/init-accounts.sh:/init.sh:ro 56 - init-state:/shared 57 command: sh -c "apk add --no-cache curl jq >/dev/null && sh /init.sh" 58 depends_on: 59 pds: 60 condition: service_healthy 61 networks: [tngl] 62 63 plc: 64 platform: linux/amd64 65 image: ghcr.io/bluesky-social/did-method-plc:plc-f2ab7516bac5bc0f3f86842fa94e996bd1b3815b 66 restart: unless-stopped 67 environment: 68 DEBUG_MODE: "1" 69 LOG_ENABLED: "true" 70 LOG_LEVEL: debug 71 LOG_DESTINATION: "1" 72 PLC_VERSION: 0.0.1 73 PORT: "8080" 74 DB_CREDS_JSON: &DB_CREDS_JSON '{"username":"tnglr","password":"tnglr","host":"postgres","port":5432}' 75 DB_MIGRATE_CREDS_JSON: *DB_CREDS_JSON 76 depends_on: [postgres] 77 networks: [tngl] 78 79 jetstream: 80 platform: linux/amd64 81 image: ghcr.io/bluesky-social/jetstream:sha-d5a3b62 82 restart: unless-stopped 83 environment: 84 JETSTREAM_DATA_DIR: /data 85 JETSTREAM_LIVENESS_TTL: 300s 86 JETSTREAM_WS_URL: wss://pds.tngl.boltless.dev/xrpc/com.atproto.sync.subscribeRepos 87 volumes: 88 - jetstream-data:/data 89 - ./localinfra/certs/root.crt:/etc/ssl/certs/ca-certificates.crt:ro 90 depends_on: 91 pds: 92 condition: service_healthy 93 networks: [tngl] 94 95 knot: 96 build: 97 context: . 98 dockerfile: localinfra/knot.Dockerfile 99 restart: unless-stopped 100 environment: 101 KNOT_SERVER_HOSTNAME: knot.tngl.boltless.dev 102 KNOT_SERVER_LISTEN_ADDR: 0.0.0.0:5555 103 KNOT_SERVER_INTERNAL_LISTEN_ADDR: 127.0.0.1:5444 104 KNOT_SERVER_DB_PATH: /home/git/knotserver.db 105 KNOT_SERVER_PLC_URL: https://plc.tngl.boltless.dev 106 KNOT_SERVER_JETSTREAM_ENDPOINT: wss://jetstream.tngl.boltless.dev/subscribe 107 KNOT_SERVER_DEV: "false" 108 KNOT_REPO_SCAN_PATH: /home/git/repositories 109 APPVIEW_ENDPOINT: https://tangled.org 110 KNOT_MIRRORS: https://mirror.tngl.boltless.dev 111 ports: 112 - "2222:22" 113 volumes: 114 - knot-data:/home/git 115 - knot-ssh-keys:/etc/ssh/keys 116 - init-state:/shared:ro 117 - ./localinfra/certs/root.crt:/usr/local/share/ca-certificates/caddy.crt:ro 118 healthcheck: 119 test: ["CMD", "wget", "-qO-", "http://localhost:5555/"] 120 interval: 2s 121 timeout: 2s 122 retries: 60 123 start_period: 30s 124 depends_on: 125 plc: 126 condition: service_started 127 jetstream: 128 condition: service_started 129 knotmirror: 130 condition: service_healthy 131 init-accounts: 132 condition: service_completed_successfully 133 networks: [tngl] 134 135 ncps-migrate: 136 image: &ncps-image ghcr.io/kalbasit/ncps:v0.9.4 137 profiles: ["linux"] 138 restart: "no" 139 command: 140 - /bin/dbmate 141 - --migrations-dir=/share/ncps/db/migrations/sqlite 142 - --no-dump-schema 143 - --url=sqlite:/storage/db.sqlite 144 - up 145 volumes: 146 - ncps-data:/storage 147 networks: [tngl] 148 149 ncps: 150 image: *ncps-image 151 profiles: ["linux"] 152 restart: unless-stopped 153 environment: 154 ANALYTICS_REPORTING_ENABLED: "false" 155 command: ["/bin/ncps", "serve", "--config", "/etc/ncps/ncps.yaml"] 156 volumes: 157 - ncps-data:/storage 158 - ./localinfra/ncps.yaml:/etc/ncps/ncps.yaml:ro 159 - ./localinfra/ncps-secret-key:/keys/ncps-secret-key:ro 160 depends_on: 161 ncps-migrate: 162 condition: service_completed_successfully 163 networks: [tngl] 164 165 spindle: 166 build: 167 context: . 168 dockerfile: localinfra/spindle.Dockerfile 169 restart: unless-stopped 170 environment: 171 SPINDLE_SERVER_HOSTNAME: spindle.tngl.boltless.dev 172 SPINDLE_SERVER_ADMIN_PASSWORD: spindle-admin 173 SPINDLE_SERVER_LISTEN_ADDR: 0.0.0.0:6555 174 SPINDLE_SERVER_DB_PATH: /var/lib/spindle/spindle.db 175 SPINDLE_SERVER_PLC_URL: https://plc.tngl.boltless.dev 176 SPINDLE_SERVER_JETSTREAM_ENDPOINT: wss://jetstream.tngl.boltless.dev/subscribe 177 SPINDLE_SERVER_DEV: "true" 178 SPINDLE_SERVER_DEV_EXTRA_HOSTS: knot.tngl.boltless.dev,mirror.tngl.boltless.dev 179 SPINDLE_SERVER_TAP_DB_PATH: /var/lib/spindle/tap.db 180 SPINDLE_SERVER_TAP_RELAY_URL: https://pds.tngl.boltless.dev 181 SPINDLE_MICROVM_PIPELINES_IMAGE_DIR: /var/lib/spindle/images 182 SPINDLE_MICROVM_PIPELINES_OVERLAY_DIR: /var/lib/spindle/overlays 183 SPINDLE_MICROVM_PIPELINES_AGENT_PORT: "11240" 184 SPINDLE_S3_LOG_BUCKET: "" 185 SPINDLE_MICROVM_PIPELINES_ENABLE_CGROUPS: "false" 186 # route guest nix substitution + uploads through the local ncps cache. 187 # ncps re-signs on serve with cache.local's key, so the guest trusts the 188 # matching public key below (no signing happens in spindle itself). 189 SPINDLE_NIX_CACHE_READ_URLS: http://ncps:8501 190 SPINDLE_NIX_CACHE_TRUSTED_PUBLIC_KEYS: cache.local:F7YqpMzuBdILYd/v+wMZN2YKxCzliXQyFmeezOxw7rU= 191 SPINDLE_NIX_CACHE_UPLOAD_URL: http://ncps:8501/upload 192 # microVM devices/caps live in docker-compose.linux.yml (Linux only) 193 volumes: 194 - spindle-data:/var/lib/spindle 195 - spindle-logs:/var/log/spindle 196 - ./out/localinfra-spindle-images:/var/lib/spindle/images:ro 197 - init-state:/shared:ro 198 - ./localinfra/certs/root.crt:/usr/local/share/ca-certificates/caddy.crt:ro 199 healthcheck: 200 test: ["CMD", "wget", "-qO-", "http://localhost:6555/"] 201 interval: 2s 202 timeout: 2s 203 retries: 30 204 start_period: 5s 205 depends_on: 206 plc: 207 condition: service_started 208 jetstream: 209 condition: service_started 210 init-accounts: 211 condition: service_completed_successfully 212 ncps: 213 condition: service_started 214 required: false 215 networks: [tngl] 216 217 knotmirror-tap: 218 image: ghcr.io/bluesky-social/indigo/tap:sha-4f47add43060c27e8a37d9d76482ecddf001fcd8 # 0.1.10 219 restart: unless-stopped 220 environment: 221 TAP_BIND: ":2480" 222 TAP_PLC_URL: https://plc.tngl.boltless.dev 223 TAP_RELAY_URL: https://pds.tngl.boltless.dev # PDS can be used as basic relay without collectiondir. 224 TAP_DATABASE_URL: postgres://tnglr:tnglr@postgres:5432/mirror_tap?sslmode=disable 225 TAP_COLLECTION_FILTERS: sh.tangled.repo 226 TAP_SIGNAL_COLLECTION: sh.tangled.repo 227 TAP_RESYNC_PARALLELISM: "10" 228 TAP_RETRY_TIMEOUT: 60s 229 volumes: 230 - ./localinfra/certs/root.crt:/etc/ssl/certs/ca-certificates.crt:ro 231 depends_on: 232 postgres: 233 condition: service_started 234 pds: 235 condition: service_healthy 236 networks: [tngl] 237 238 knotmirror: 239 build: 240 context: . 241 dockerfile: localinfra/knotmirror.Dockerfile 242 restart: unless-stopped 243 environment: 244 MIRROR_LISTEN: 0.0.0.0:7000 245 MIRROR_ADMIN_LISTEN: 0.0.0.0:7200 246 MIRROR_HOSTNAME: mirror.tngl.boltless.dev 247 MIRROR_TAP_URL: http://knotmirror-tap:2480 248 MIRROR_DB_URL: postgres://tnglr:tnglr@postgres:5432/mirror?sslmode=disable 249 MIRROR_REDIS_ADDR: redis:6379 250 MIRROR_PLC_URL: https://plc.tngl.boltless.dev 251 MIRROR_GIT_BASEPATH: /data/repos 252 MIRROR_KNOT_USE_SSL: "true" 253 MIRROR_KNOT_SSRF: "true" 254 MIRROR_RESYNC_PARALLELISM: "4" 255 MIRROR_APPVIEW_URL: http://appview:3000 256 MIRROR_SEARCH_ZOEKT_URL: https://zoekt.tngl.boltless.dev/indexserver 257 volumes: 258 - knotmirror-data:/data 259 - ./localinfra/certs/root.crt:/usr/local/share/ca-certificates/caddy.crt:ro 260 healthcheck: 261 test: ["CMD", "wget", "-qO-", "http://localhost:7000/"] 262 interval: 2s 263 timeout: 2s 264 retries: 30 265 start_period: 5s 266 ports: 267 - "7201:7200" 268 depends_on: 269 postgres: 270 condition: service_started 271 knotmirror-tap: 272 condition: service_started 273 networks: [tngl] 274 275 zoekt-webserver: 276 build: 277 context: https://tangled.org/boltless.me/zoekt.git#tngl 278 volumes: 279 - zoekt-index:/data/index 280 - ./localinfra/certs/root.crt:/etc/ssl/certs/caddy.crt:ro 281 command: ["zoekt-webserver", "-index", "/data/index", "-pprof", "-rpc"] 282 networks: [tngl] 283 284 zoekt-tngl-indexserver: 285 build: 286 context: . 287 dockerfile: localinfra/zoekt-tngl-indexserver.Dockerfile 288 environment: 289 TANGLED_ZOEKT_INDEX_DIR: /data/index 290 TANGLED_ZOEKT_PLC_URL: https://plc.tngl.boltless.dev 291 TANGLED_ZOEKT_APPVIEW_URL: http://127.0.0.1:3000 292 volumes: 293 - zoekt-index:/data/index 294 - ./localinfra/certs/root.crt:/etc/ssl/certs/caddy.crt:ro 295 command: ["zoekt-tngl-indexserver", "serve"] 296 networks: [tngl] 297 298 tailwind: 299 build: 300 context: . 301 dockerfile: localinfra/tailwind.Dockerfile 302 restart: unless-stopped 303 working_dir: /build 304 init: true 305 volumes: 306 - ./tailwind.config.js:/build/tailwind.config.js:ro 307 - ./input.css:/build/input.css:ro 308 - ./appview/pages/templates:/build/appview/pages/templates:ro 309 - ./docs:/build/docs:ro 310 - ./blog/templates:/build/blog/templates:ro 311 - ./blog/posts:/build/blog/posts:ro 312 - ./appview/pages/static:/build/appview/pages/static 313 command: 314 ["-i", "input.css", "-o", "appview/pages/static/tw.css", "--watch=always"] 315 network_mode: none 316 317 appview: 318 build: 319 context: . 320 dockerfile: localinfra/appview.Dockerfile 321 restart: unless-stopped 322 environment: 323 TANGLED_DEV: "true" 324 TANGLED_APPVIEW_HOST: 127.0.0.1:3000 325 TANGLED_DB_PATH: /var/lib/appview/appview.db 326 TANGLED_PLC_URL: https://plc.tngl.boltless.dev 327 TANGLED_JETSTREAM_ENDPOINT: wss://jetstream.tngl.boltless.dev/subscribe 328 TANGLED_REDIS_ADDR: redis:6379 329 TANGLED_KNOTMIRROR_URL: https://mirror.tngl.boltless.dev 330 TANGLED_CODESEARCH_ZOEKT_URL: https://zoekt.tngl.boltless.dev 331 TANGLED_SSH_ENABLED: "true" 332 TANGLED_SSH_LISTEN_ADDR: "0.0.0.0:3333" 333 ports: 334 - "3000:3000" 335 - "3333:3333" 336 volumes: 337 - .:/src:cached 338 - go-cache:/go/cache 339 - go-mod-cache:/go/mod 340 - appview-data:/var/lib/appview 341 - init-state:/shared:ro 342 - ./localinfra/certs/root.crt:/usr/local/share/ca-certificates/caddy.crt:ro 343 depends_on: 344 redis: 345 condition: service_started 346 pds: 347 condition: service_healthy 348 init-accounts: 349 condition: service_completed_successfully 350 networks: [tngl] 351 352 pdsls: 353 build: 354 context: . 355 dockerfile: localinfra/pdsls.Dockerfile 356 restart: unless-stopped 357 ports: 358 - "8081:80" 359 depends_on: 360 init-accounts: 361 condition: service_completed_successfully 362 networks: [tngl] 363 364 caddy: 365 image: caddy:2-alpine 366 restart: unless-stopped 367 ports: 368 - "80:80" 369 - "443:443" 370 volumes: 371 - ./localinfra/Caddyfile:/etc/caddy/Caddyfile 372 - ./localinfra/certs:/etc/caddy/certs:ro 373 - caddy-data:/data 374 networks: 375 tngl: 376 aliases: 377 - plc.tngl.boltless.dev 378 - pds.tngl.boltless.dev 379 - alice.pds.tngl.boltless.dev 380 - bob.pds.tngl.boltless.dev 381 - charlie.pds.tngl.boltless.dev 382 - david.pds.tngl.boltless.dev 383 - jetstream.tngl.boltless.dev 384 - knot.tngl.boltless.dev 385 - spindle.tngl.boltless.dev 386 - tngl.boltless.dev 387 - mirror.tngl.boltless.dev 388 - zoekt.tngl.boltless.dev 389 - pdsls.tngl.boltless.dev 390 391volumes: 392 caddy-data: 393 postgres-data: 394 pds-data: 395 jetstream-data: 396 knot-data: 397 knot-ssh-keys: 398 knotmirror-data: 399 zoekt-index: 400 spindle-data: 401 spindle-logs: 402 ncps-data: 403 init-state: 404 go-cache: 405 go-mod-cache: 406 appview-data: 407 408networks: 409 tngl: 410 driver: bridge 411 # Public-looking subnet so SSRF checks see container IPs as "public". 412 # RFC1918 + doc/benchmark ranges are blocklisted; 11.x is unrouted on 413 # the public internet, so it passes the check and won't collide. 414 ipam: 415 config: 416 - subnet: 11.0.0.0/24