A container registry that uses the AT Protocol for manifest storage and S3 for blob storage. atcr.io
docker container atproto go
72
fork

Configure Feed

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

at main 163 lines 4.7 kB view raw
1# ATCR Production Deployment with Caddy 2# For UpCloud Rocky Linux deployment 3# 4# Usage: 5# 1. Copy .env.prod.template to .env and fill in your values 6# 2. docker compose -f deploy/docker-compose.prod.yml up -d 7# 8# Domains: 9# - atcr.io → AppView (registry API + web UI) 10# - hold01.atcr.io → Hold service (presigned URL generator) 11# - blobs.atcr.io → S3 object storage (CNAME to UpCloud S3) 12 13services: 14 caddy: 15 image: caddy:2-alpine 16 container_name: atcr-caddy 17 restart: unless-stopped 18 ports: 19 - "80:80" 20 - "443:443" 21 - "443:443/udp" # HTTP/3 22 environment: 23 APPVIEW_DOMAIN: ${APPVIEW_DOMAIN:-atcr.io} 24 HOLD_DOMAIN: ${HOLD_DOMAIN:-hold01.atcr.io} 25 volumes: 26 - caddy_data:/data 27 - caddy_config:/config 28 configs: 29 - source: caddyfile 30 target: /etc/caddy/Caddyfile 31 networks: 32 - atcr-network 33 healthcheck: 34 test: ["CMD", "caddy", "validate", "--config", "/etc/caddy/Caddyfile"] 35 interval: 30s 36 timeout: 10s 37 retries: 3 38 start_period: 10s 39 40 atcr-appview: 41 build: 42 context: .. 43 dockerfile: Dockerfile.appview 44 image: atcr-appview:latest 45 container_name: atcr-appview 46 restart: unless-stopped 47 command: ["serve", "--config", "/config.yaml"] 48 # Base config: config-appview.example.yaml 49 # Env vars below override config file values for this deployment 50 environment: 51 ATCR_BASE_URL: https://${APPVIEW_DOMAIN:-atcr.io} 52 ATCR_DEFAULT_HOLD_DID: ${ATCR_DEFAULT_HOLD_DID:-did:web:${HOLD_DOMAIN:-hold01.atcr.io}} 53 ATCR_LOG_LEVEL: ${ATCR_LOG_LEVEL:-info} 54 ATCR_LOG_FORMATTER: ${ATCR_LOG_FORMATTER:-text} 55 volumes: 56 - ./config-appview.yaml:/config.yaml:ro 57 # Persistent data: auth keys, UI database, OAuth tokens, Jetstream cache 58 - atcr-appview-data:/var/lib/atcr 59 networks: 60 - atcr-network 61 healthcheck: 62 test: ["CMD", "/healthcheck", "http://localhost:5000/health"] 63 interval: 30s 64 timeout: 10s 65 retries: 3 66 start_period: 30s 67 68 atcr-hold: 69 build: 70 context: .. 71 dockerfile: Dockerfile.hold 72 image: atcr-hold:latest 73 container_name: atcr-hold 74 restart: unless-stopped 75 command: ["serve", "--config", "/config.yaml"] 76 # Base config: config-hold.example.yaml 77 # Env vars below override config file values for this deployment 78 environment: 79 HOLD_PUBLIC_URL: ${HOLD_PUBLIC_URL:-https://${HOLD_DOMAIN:-hold01.atcr.io}} 80 HOLD_OWNER: ${HOLD_OWNER:-} 81 HOLD_BLUESKY_POSTS_ENABLED: ${HOLD_BLUESKY_POSTS_ENABLED:-true} 82 # S3/UpCloud Object Storage (REQUIRED) 83 AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-} 84 AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-} 85 AWS_REGION: ${AWS_REGION:-us-east-1} 86 S3_BUCKET: ${S3_BUCKET:-atcr-blobs} 87 S3_ENDPOINT: ${S3_ENDPOINT:-} 88 HOLD_LOG_LEVEL: ${ATCR_LOG_LEVEL:-info} 89 volumes: 90 - ./config-hold.yaml:/config.yaml:ro 91 # PDS data (carstore SQLite + signing keys) 92 - atcr-hold-data:/var/lib/atcr-hold 93 - ./quotas.yaml:/quotas.yaml:ro 94 networks: 95 - atcr-network 96 healthcheck: 97 test: ["CMD", "/healthcheck", "http://localhost:8080/xrpc/_health"] 98 interval: 30s 99 timeout: 10s 100 retries: 3 101 start_period: 30s 102 103networks: 104 atcr-network: 105 driver: bridge 106 ipam: 107 config: 108 - subnet: 172.29.0.0/24 109 110volumes: 111 caddy_data: 112 driver: local 113 caddy_config: 114 driver: local 115 atcr-appview-data: 116 driver: local 117 atcr-hold-data: 118 driver: local 119 120configs: 121 caddyfile: 122 content: | 123 # ATCR AppView - Main registry + web UI 124 ${APPVIEW_DOMAIN:-atcr.io} { 125 # Reverse proxy to AppView container 126 reverse_proxy atcr-appview:5000 { 127 # Preserve original host header 128 header_up Host {host} 129 header_up X-Real-IP {remote_host} 130 } 131 132 # Enable compression 133 encode gzip 134 135 # Logging 136 log { 137 output file /data/logs/appview.log { 138 roll_size 100mb 139 roll_keep 10 140 } 141 } 142 } 143 144 # ATCR Hold Service - Storage presigned URL generator 145 ${HOLD_DOMAIN:-hold01.atcr.io} { 146 # Reverse proxy to Hold service container 147 reverse_proxy atcr-hold:8080 { 148 # Preserve original host header 149 header_up Host {host} 150 header_up X-Real-IP {remote_host} 151 } 152 153 # Enable compression 154 encode gzip 155 156 # Logging 157 log { 158 output file /data/logs/hold.log { 159 roll_size 100mb 160 roll_keep 10 161 } 162 } 163 }