diff --git a/blueprints/sentroy/docker-compose.yml b/blueprints/sentroy/docker-compose.yml new file mode 100644 index 000000000..46d08dc6e --- /dev/null +++ b/blueprints/sentroy/docker-compose.yml @@ -0,0 +1,161 @@ +services: + mongo: + image: mongo:7 + restart: unless-stopped + env_file: + - .env + volumes: + - sentroy-mongo:/data/db + healthcheck: + test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"] + interval: 10s + timeout: 5s + retries: 10 + start_period: 30s + + core: + image: ghcr.io/sentroy-co/sentroy-oss-core:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3000 + - CDN_API_URL=http://cdn:4100 + depends_on: + mongo: + condition: service_healthy + + storage: + image: ghcr.io/sentroy-co/sentroy-oss-storage:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3002 + - CDN_API_URL=http://cdn:4100 + depends_on: + mongo: + condition: service_healthy + + cdn: + image: ghcr.io/sentroy-co/sentroy-oss-cdn:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=4100 + + auth2: + image: ghcr.io/sentroy-co/sentroy-oss-auth2:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3003 + depends_on: + mongo: + condition: service_healthy + + status: + image: ghcr.io/sentroy-co/sentroy-oss-status:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3004 + depends_on: + mongo: + condition: service_healthy + + studio: + image: ghcr.io/sentroy-co/sentroy-oss-studio:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3006 + depends_on: + mongo: + condition: service_healthy + + whatsapp: + image: ghcr.io/sentroy-co/sentroy-oss-whatsapp:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3007 + - WHATSAPP_GATEWAY_URL=http://whatsapp-gateway:4200 + depends_on: + mongo: + condition: service_healthy + + whatsapp-gateway: + image: ghcr.io/sentroy-co/sentroy-oss-whatsapp-gateway:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=4200 + depends_on: + mongo: + condition: service_healthy + + linear: + image: ghcr.io/sentroy-co/sentroy-oss-linear:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3009 + depends_on: + mongo: + condition: service_healthy + + downloader: + image: ghcr.io/sentroy-co/sentroy-oss-downloader:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3008 + - DOWNLOADER_WORKER_URL=http://downloader-worker:4300 + + downloader-worker: + image: ghcr.io/sentroy-co/sentroy-oss-downloader-worker:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=4300 + volumes: + - sentroy-downloads:/downloads + + backup: + image: ghcr.io/sentroy-co/sentroy-oss-backup:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=3010 + - BACKUP_WORKER_URL=http://backup-worker:4400 + depends_on: + mongo: + condition: service_healthy + + backup-worker: + image: ghcr.io/sentroy-co/sentroy-oss-backup-worker:latest + restart: unless-stopped + env_file: + - .env + environment: + - PORT=4400 + depends_on: + mongo: + condition: service_healthy + +volumes: + sentroy-mongo: + driver: local + sentroy-downloads: + driver: local diff --git a/blueprints/sentroy/logo.svg b/blueprints/sentroy/logo.svg new file mode 100644 index 000000000..bf6c5e901 --- /dev/null +++ b/blueprints/sentroy/logo.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/blueprints/sentroy/meta.json b/blueprints/sentroy/meta.json new file mode 100644 index 000000000..cd0cece87 --- /dev/null +++ b/blueprints/sentroy/meta.json @@ -0,0 +1,17 @@ +{ + "id": "sentroy", + "name": "Sentroy", + "version": "1.64.226", + "description": "Self-hostable workspace suite — mail, storage, auth/OIDC, status, WhatsApp, issue tracker, audio studio, downloader and MongoDB backup — on MongoDB.", + "logo": "logo.svg", + "links": { + "github": "https://github.com/Sentroy-Co/sentroy", + "website": "https://sentroy.com", + "docs": "https://sentroy.com/docs" + }, + "tags": [ + "workspace", + "productivity", + "platform" + ] +} diff --git a/blueprints/sentroy/template.toml b/blueprints/sentroy/template.toml new file mode 100644 index 000000000..042572fe2 --- /dev/null +++ b/blueprints/sentroy/template.toml @@ -0,0 +1,99 @@ +[variables] +# Edit root_domain to your domain, then point wildcard DNS (*. + ) +# at this server. Every app is served at a fixed subdomain of it. +root_domain = "sentroy.example.com" +mongo_password = "${password:32}" +auth_secret = "${base64:64}" +internal_secret = "${password:48}" +env_master = "${base64:64}" +cdn_secret = "${password:32}" +whatsapp_key = "${base64:32}" +downloader_secret = "${password:32}" +backup_secret = "${password:32}" +admin_api_key = "${base64:48}" +admin_password = "${password:24}" + +[config] + +[[config.domains]] +serviceName = "core" +port = 3000 +host = "${root_domain}" + +[[config.domains]] +serviceName = "storage" +port = 3002 +host = "storage.${root_domain}" + +[[config.domains]] +serviceName = "cdn" +port = 4100 +host = "cdn.${root_domain}" + +[[config.domains]] +serviceName = "auth2" +port = 3003 +host = "auth.${root_domain}" + +[[config.domains]] +serviceName = "status" +port = 3004 +host = "status.${root_domain}" + +[[config.domains]] +serviceName = "studio" +port = 3006 +host = "studio.${root_domain}" + +[[config.domains]] +serviceName = "whatsapp" +port = 3007 +host = "whatsapp.${root_domain}" + +[[config.domains]] +serviceName = "linear" +port = 3009 +host = "linear.${root_domain}" + +[[config.domains]] +serviceName = "downloader" +port = 3008 +host = "youtube.${root_domain}" + +[[config.domains]] +serviceName = "backup" +port = 3010 +host = "backup.${root_domain}" + +[config.env] +# One knob — server code + the client-bundle sentinel are both resolved from +# SENTROY_ROOT_DOMAIN at container start, so a single prebuilt image serves any +# domain. Other app URLs are derived from it; no per-app URL needed. +SENTROY_ROOT_DOMAIN = "${root_domain}" +DOMAIN = "${root_domain}" +NODE_ENV = "production" +MONGO_INITDB_ROOT_USERNAME = "sentroy" +MONGO_INITDB_ROOT_PASSWORD = "${mongo_password}" +MONGODB_URI = "mongodb://sentroy:${mongo_password}@mongo:27017/sentroy?authSource=admin" +MONGODB_DATABASE = "sentroy" +BETTER_AUTH_SECRET = "${auth_secret}" +BETTER_AUTH_URL = "https://${root_domain}" +AUTH_COOKIE_DOMAIN = ".${root_domain}" +AUTH_TRUSTED_ORIGINS = "https://${root_domain}" +INTERNAL_API_SECRET = "${internal_secret}" +SENTROY_ENV_MASTER_KEY = "${env_master}" +CDN_API_SECRET = "${cdn_secret}" +SENTROY_ADMIN_API_KEY = "${admin_api_key}" +ADMIN_EMAIL = "admin@${root_domain}" +ADMIN_PASSWORD = "${admin_password}" +WHATSAPP_ENC_KEY = "${whatsapp_key}" +DOWNLOADER_API_SECRET = "${downloader_secret}" +BACKUP_API_SECRET = "${backup_secret}" +TURNSTILE_DISABLED = "true" +NEXT_PUBLIC_TURNSTILE_DISABLED = "true" +# Object storage (S3-compatible) — REQUIRED for Storage + Backup. Fill these in. +IDRIVE_ENDPOINT = "" +IDRIVE_REGION = "" +IDRIVE_BUCKET = "" +IDRIVE_ACCESS_KEY = "" +IDRIVE_SECRET_KEY = ""