See the best posts from any Bluesky account
0
fork

Configure Feed

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

Add resource limits, log rotation, and DRY up docker-compose for CPX32

Sized for Hetzner CPX32 (4 vCPU, 8GB RAM):
- ClickHouse 4GB/2cpu, web 1.5GB/1cpu, queue 1GB/0.5cpu, jetstream 512MB/0.5cpu
- Add json-file log rotation (10MB, 3 files) to all services
- Add restart: unless-stopped to ClickHouse
- Remove ClickHouse host port (only needed inter-container)
- Add stop_grace_period: 30s to jetstream for cursor checkpoint
- Relax web health check interval from 2s to 10s
- DRY up env vars with YAML anchors (x-common-env, x-logging)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+44 -53
+44 -53
docker-compose.yml
··· 1 + x-common-env: &common-env 2 + NODE_ENV: production 3 + DB_CONNECTION: sqlite 4 + SQLITE_PATH: /data/favs.sqlite 5 + CLICKHOUSE_URL: http://clickhouse:8123 6 + CLICKHOUSE_DB: favs 7 + CLICKHOUSE_USER: favs 8 + CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 9 + APP_KEY: ${APP_KEY} 10 + APP_URL: http://localhost:3333 11 + LOG_LEVEL: info 12 + SESSION_DRIVER: cookie 13 + QUEUE_DRIVER: database 14 + 15 + x-logging: &default-logging 16 + driver: json-file 17 + options: 18 + max-size: "10m" 19 + max-file: "3" 20 + 1 21 services: 2 22 clickhouse: 3 23 image: clickhouse/clickhouse-server:26.2 24 + restart: unless-stopped 4 25 volumes: 5 26 - clickhouse-data:/var/lib/clickhouse 6 27 environment: 7 28 CLICKHOUSE_DB: favs 8 29 CLICKHOUSE_USER: favs 9 30 CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 10 - ports: 11 - - "127.0.0.1:8123:8123" 12 31 ulimits: 13 32 nofile: 262144 33 + mem_limit: 4g 34 + cpus: 2 35 + logging: *default-logging 14 36 healthcheck: 15 37 test: ["CMD", "wget", "-qO-", "http://localhost:8123/ping"] 16 38 interval: 2s ··· 26 48 condition: service_healthy 27 49 volumes: 28 50 - sqlite-data:/data 51 + mem_limit: 512m 52 + cpus: 0.5 53 + logging: *default-logging 29 54 environment: 30 - NODE_ENV: production 31 - DB_CONNECTION: sqlite 32 - SQLITE_PATH: /data/favs.sqlite 33 - CLICKHOUSE_URL: http://clickhouse:8123 34 - CLICKHOUSE_DB: favs 35 - CLICKHOUSE_USER: favs 36 - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 37 - APP_KEY: ${APP_KEY} 38 - APP_URL: http://localhost:3333 39 - LOG_LEVEL: info 40 - SESSION_DRIVER: cookie 41 - QUEUE_DRIVER: database 55 + <<: *common-env 42 56 43 57 web: 44 58 restart: unless-stopped ··· 51 65 condition: service_completed_successfully 52 66 volumes: 53 67 - sqlite-data:/data 68 + mem_limit: 1536m 69 + cpus: 1 70 + logging: *default-logging 54 71 environment: 55 - NODE_ENV: production 72 + <<: *common-env 56 73 PORT: 3333 57 74 HOST: 0.0.0.0 58 - DB_CONNECTION: sqlite 59 - SQLITE_PATH: /data/favs.sqlite 60 - CLICKHOUSE_URL: http://clickhouse:8123 61 - CLICKHOUSE_DB: favs 62 - CLICKHOUSE_USER: favs 63 - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 64 - APP_KEY: ${APP_KEY} 65 - APP_URL: http://localhost:3333 66 - LOG_LEVEL: info 67 - SESSION_DRIVER: cookie 68 - QUEUE_DRIVER: database 69 75 HEALTH_CHECK_TOKEN: ${HEALTH_CHECK_TOKEN:-} 70 76 ports: 71 77 - "3333:3333" 72 78 healthcheck: 73 79 test: ["CMD", "wget", "-qO-", "--header=x-monitoring-secret:$HEALTH_CHECK_TOKEN", "http://127.0.0.1:3333/health/ready"] 74 - interval: 2s 80 + interval: 10s 75 81 timeout: 3s 76 - retries: 30 77 - start_period: 5s 82 + retries: 5 83 + start_period: 10s 78 84 79 85 jetstream-worker: 80 86 restart: unless-stopped 81 87 build: . 82 88 command: node ace.js jetstream:consume 89 + stop_grace_period: 30s 83 90 depends_on: 84 91 clickhouse: 85 92 condition: service_started ··· 87 94 condition: service_completed_successfully 88 95 volumes: 89 96 - sqlite-data:/data 97 + mem_limit: 512m 98 + cpus: 0.5 99 + logging: *default-logging 90 100 healthcheck: 91 101 test: ["CMD", "node", "-e", "process.exit(0)"] 92 102 interval: 10s ··· 94 104 retries: 3 95 105 start_period: 10s 96 106 environment: 97 - NODE_ENV: production 98 - DB_CONNECTION: sqlite 99 - SQLITE_PATH: /data/favs.sqlite 100 - CLICKHOUSE_URL: http://clickhouse:8123 101 - CLICKHOUSE_DB: favs 102 - CLICKHOUSE_USER: favs 103 - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 107 + <<: *common-env 104 108 JETSTREAM_URL: wss://jetstream2.us-east.bsky.network/subscribe 105 - APP_KEY: ${APP_KEY} 106 - APP_URL: http://localhost:3333 107 - LOG_LEVEL: info 108 - SESSION_DRIVER: cookie 109 - QUEUE_DRIVER: database 110 109 111 110 queue-worker: 112 111 restart: unless-stopped ··· 119 118 condition: service_completed_successfully 120 119 volumes: 121 120 - sqlite-data:/data 121 + mem_limit: 1g 122 + cpus: 0.5 123 + logging: *default-logging 122 124 healthcheck: 123 125 test: ["CMD", "node", "-e", "process.exit(0)"] 124 126 interval: 10s ··· 126 128 retries: 3 127 129 start_period: 10s 128 130 environment: 129 - NODE_ENV: production 130 - DB_CONNECTION: sqlite 131 - SQLITE_PATH: /data/favs.sqlite 132 - CLICKHOUSE_URL: http://clickhouse:8123 133 - CLICKHOUSE_DB: favs 134 - CLICKHOUSE_USER: favs 135 - CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 136 - APP_KEY: ${APP_KEY} 137 - APP_URL: http://localhost:3333 138 - LOG_LEVEL: info 139 - SESSION_DRIVER: cookie 140 - QUEUE_DRIVER: database 131 + <<: *common-env 141 132 142 133 volumes: 143 134 clickhouse-data: