Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions blueprints/sentroy/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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
29 changes: 29 additions & 0 deletions blueprints/sentroy/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions blueprints/sentroy/meta.json
Original file line number Diff line number Diff line change
@@ -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"
]
}
99 changes: 99 additions & 0 deletions blueprints/sentroy/template.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
[variables]
# Edit root_domain to your domain, then point wildcard DNS (*.<root> + <root>)
# 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 = ""
Loading