diff --git a/blueprints/dragonfly-db/docker-compose.yml b/blueprints/dragonfly-db/docker-compose.yml new file mode 100644 index 0000000..7feaeb8 --- /dev/null +++ b/blueprints/dragonfly-db/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.8' +services: + dragonflydb: + image: 'docker.dragonflydb.io/dragonflydb/dragonfly' + ulimits: + memlock: -1 + ports: + - "6379:6379" + volumes: + - dragonflydata:/data + environment: + - DFLY_requirepass +volumes: + dragonflydata: \ No newline at end of file diff --git a/blueprints/dragonfly-db/dragonfly-db.png b/blueprints/dragonfly-db/dragonfly-db.png new file mode 100644 index 0000000..b56b6f9 Binary files /dev/null and b/blueprints/dragonfly-db/dragonfly-db.png differ diff --git a/blueprints/dragonfly-db/template.toml b/blueprints/dragonfly-db/template.toml new file mode 100644 index 0000000..2c4f035 --- /dev/null +++ b/blueprints/dragonfly-db/template.toml @@ -0,0 +1,23 @@ +[variables] +main_domain = "${domain}" +db_password = "${password:32}" +any_helper = "${uuid}" + +[config] +env = [ + "DFLY_requirepass=${db_password}", +] + +[[config.domains]] +serviceName = "dragonflydb" +port = 6379 +host = "${main_domain}" +path = "/" + +[[config.mounts]] +filePath = "/content/configuration.conf" +content = """ +bind-address = "0.0.0.0" +port = 6379 +log-level = "info" +""" diff --git a/blueprints/focalboard/docker-compose.yml b/blueprints/focalboard/docker-compose.yml new file mode 100644 index 0000000..b2283c7 --- /dev/null +++ b/blueprints/focalboard/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' + +services: + focalboard: + image: mattermost/focalboard:7.11.4 + restart: unless-stopped + volumes: + - focalboardData:/opt/focalboard/data + environment: + - VIRTUAL_HOST + - VIRTUAL_PORT + - DB_TYPE + - DB_CONFIG=postgres://${POSTGRES_USER}:${POSTGRES_password}@postgres:5432/${postgres_db}?sslmode=disable + + postgres: + image: postgres:17 + environment: + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + volumes: + - ./postgres_data:/var/lib/postgresql/data + +volumes: + focalboardData: + driver: local + focalboardPostgre: + driver: local \ No newline at end of file diff --git a/blueprints/focalboard/focalboard.png b/blueprints/focalboard/focalboard.png new file mode 100644 index 0000000..75b6e5b Binary files /dev/null and b/blueprints/focalboard/focalboard.png differ diff --git a/blueprints/focalboard/template.toml b/blueprints/focalboard/template.toml new file mode 100644 index 0000000..80c9c5b --- /dev/null +++ b/blueprints/focalboard/template.toml @@ -0,0 +1,18 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ + "VIRTUAL_HOST=${main_domain}", + "VIRTUAL_PORT=8000 # Do Not Alter", + "DB_TYPE=postgres", + "POSTGRES_USER=focalboard", + "POSTGRES_PASSWORD=${password:32}", + "POSTGRES_DB=focalboard" + ] +mounts = [] + +[[config.domains]] +serviceName = "focalboard" +port = 8000 +host = "${main_domain}" diff --git a/blueprints/forgejo/docker-compose.yml b/blueprints/forgejo/docker-compose.yml new file mode 100644 index 0000000..36733c6 --- /dev/null +++ b/blueprints/forgejo/docker-compose.yml @@ -0,0 +1,37 @@ +version: "3.8" +services: + forgejo: + image: codeberg.org/forgejo/forgejo:10 + environment: + - USER_UID=${USER_UID} + - USER_GID=${USER_GID} + - FORGEJO__database__DB_TYPE=postgres + - FORGEJO__database__HOST=db:5432 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD=forgejo + restart: always + + volumes: + - forgejo_server:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + - db + + db: + image: postgres:17 + restart: always + environment: + - POSTGRES_USER=forgejo + - POSTGRES_PASSWORD=forgejo + - POSTGRES_DB=forgejo + + volumes: + - forgejo_db:/var/lib/postgresql/data + +volumes: + forgejo_db: + driver: local + forgejo_server: + driver: local \ No newline at end of file diff --git a/blueprints/forgejo/forgejo.svg b/blueprints/forgejo/forgejo.svg new file mode 100644 index 0000000..9c46d82 --- /dev/null +++ b/blueprints/forgejo/forgejo.svg @@ -0,0 +1,40 @@ + + + + + Forgejo logo + Caesar Schinas + + + + + + + + + + + + + diff --git a/blueprints/forgejo/template.toml b/blueprints/forgejo/template.toml new file mode 100644 index 0000000..56f45c1 --- /dev/null +++ b/blueprints/forgejo/template.toml @@ -0,0 +1,11 @@ +[variables] +main_domain = "${domain}" + +[config] +env = ["USER_UID=1000", "USER_GID=1000"] +mounts = [] + +[[config.domains]] +serviceName = "forgejo" +port = 3_000 +host = "${main_domain}" diff --git a/blueprints/lodestone/docker-compose.yml b/blueprints/lodestone/docker-compose.yml new file mode 100644 index 0000000..41b444f --- /dev/null +++ b/blueprints/lodestone/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.8' + +services: + lodestone: + image: ghcr.io/lodestone-team/lodestone_core + ports: + - "16662:16662" + - "25565-25590:25565-25590" + volumes: + - lodestone:/home/user/.lodestone + restart: unless-stopped + + lodestone_dashboard: + image: ghcr.io/lodestone-team/lodestone_dashboard:v0.5.1 + restart: always + +volumes: + lodestone: + driver: local \ No newline at end of file diff --git a/blueprints/lodestone/lodestone.png b/blueprints/lodestone/lodestone.png new file mode 100644 index 0000000..cc23e60 Binary files /dev/null and b/blueprints/lodestone/lodestone.png differ diff --git a/blueprints/lodestone/template.toml b/blueprints/lodestone/template.toml new file mode 100644 index 0000000..1b18512 --- /dev/null +++ b/blueprints/lodestone/template.toml @@ -0,0 +1,11 @@ +[variables] +main_domain = "${domain}" + +[config] +env = {} +mounts = [] + +[[config.domains]] +serviceName = "lodestone_dashboard" +port = 80 +host = "${main_domain}" \ No newline at end of file diff --git a/blueprints/mattermost/docker-compose.yml b/blueprints/mattermost/docker-compose.yml new file mode 100644 index 0000000..584afad --- /dev/null +++ b/blueprints/mattermost/docker-compose.yml @@ -0,0 +1,66 @@ +services: + postgres: + image: postgres:17 + restart: unless-stopped + security_opt: + - no-new-privileges:true + pids_limit: 100 + read_only: true + tmpfs: + - /tmp + - /var/run/postgresql + volumes: + - mattermostDbData:/var/lib/postgresql/data + environment: + - TZ + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + + mattermost: + depends_on: + - postgres + image: mattermost/mattermost-team-edition:10.6.1 + restart: unless-stopped + security_opt: + - no-new-privileges:true + pids_limit: 200 + read_only: false + tmpfs: + - /tmp + volumes: + - mattermostconf:/mattermost/config:rw + - mattermostdata:/mattermost/data:rw + - mattermostlogs:/mattermost/logs:rw + - mattermostplugsin:/mattermost/plugins:rw + - mattermostclientplugins:/mattermost/client/plugins:rw + - mattermostBleveIndexes:/mattermost/bleve-indexes:rw + + environment: + - DOMAIN + - TZ + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + - MM_SQLSETTINGS_DRIVERNAME + - MM_SQLSETTINGS_DATASOURCE + - MM_BLEVESETTINGS_INDEXDIR + - MM_SERVICESETTINGS_SITEURL + - APP_PORT + + +volumes: + mattermostDbData: + driver: local + mattermostconf: + driver: local + mattermostdata: + driver: local + mattermostlogs: + driver: local + mattermostplugsin: + driver: local + mattermostclientplugins: + driver: local + mattermostBleveIndexes: + driver: local diff --git a/blueprints/mattermost/mattermost.png b/blueprints/mattermost/mattermost.png new file mode 100644 index 0000000..90113e9 Binary files /dev/null and b/blueprints/mattermost/mattermost.png differ diff --git a/blueprints/mattermost/template.toml b/blueprints/mattermost/template.toml new file mode 100644 index 0000000..424d8f2 --- /dev/null +++ b/blueprints/mattermost/template.toml @@ -0,0 +1,20 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ +"Domain=${main_domain}", +"POSTGRES_USER=mmuser", +"POSTGRES_PASSWORD=${password:32}", +"POSTGRES_DB=mattermost", +"MM_SQLSETTINGS_DRIVERNAME=postgres", +"MM_SQLSETTINGS_DATASOURCE=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable&connect_timeout=10", +"APP_PORT=8065", +"TZ=UTC", +] +mounts = [] + +[[config.domains]] +serviceName = "mattermost" +port = 8065 +host = "${main_domain}" diff --git a/blueprints/plane/docker-compose.yml b/blueprints/plane/docker-compose.yml new file mode 100644 index 0000000..3c19c49 --- /dev/null +++ b/blueprints/plane/docker-compose.yml @@ -0,0 +1,137 @@ +version: '3.8' + +services: + web: + image: makeplane/plane-frontend:${APP_RELEASE:-v0.25.3} + command: node web/server.js web + depends_on: + - api + - worker + env_file: + - .env + + space: + image: makeplane/plane-space:${APP_RELEASE:-v0.25.3} + command: node space/server.js space + depends_on: + - api + - worker + - web + env_file: + - .env + + admin: + image: makeplane/plane-admin:${APP_RELEASE:-v0.25.3} + command: node admin/server.js admin + depends_on: + - api + - web + env_file: + - .env + + live: + image: makeplane/plane-live:${APP_RELEASE:-v0.25.3} + command: node live/dist/server.js live + depends_on: + - api + - web + env_file: + - .env + + api: + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-api.sh + volumes: + - logs_api:/code/plane/logs + depends_on: + - plane-db + - plane-redis + - plane-mq + env_file: + - .env + + worker: + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-worker.sh + volumes: + - logs_worker:/code/plane/logs + depends_on: + - api + - plane-db + - plane-redis + - plane-mq + env_file: + - .env + + beat-worker: + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-beat.sh + volumes: + - logs_beat-worker:/code/plane/logs + depends_on: + - api + - plane-db + - plane-redis + - plane-mq + env_file: + - .env + + migrator: + image: makeplane/plane-backend:${APP_RELEASE:-v0.25.3} + command: ./bin/docker-entrypoint-migrator.sh + volumes: + - logs_migrator:/code/plane/logs + depends_on: + - plane-db + - plane-redis + env_file: + - .env + + plane-db: + image: postgres:17-alpine + command: postgres -c 'max_connections=1000' + volumes: + - pgdata:/var/lib/postgresql/data + env_file: + - .env + + plane-redis: + image: valkey/valkey:7.2.5-alpine + volumes: + - redisdata:/data + env_file: + - .env + + plane-mq: + image: rabbitmq:3.13.6-management-alpine + volumes: + - rabbitmq_data:/var/lib/rabbitmq + env_file: + - .env + + plane-minio: + image: minio/minio:latest + command: server /export --console-address ":9090" + volumes: + - uploads:/export + env_file: + - .env + + proxy: + image: makeplane/plane-proxy:${APP_RELEASE:-v0.25.3} + depends_on: + - web + - api + - space + env_file: + - .env + +volumes: + pgdata: + redisdata: + uploads: + logs_api: + logs_worker: + logs_beat-worker: + logs_migrator: + rabbitmq_data: \ No newline at end of file diff --git a/blueprints/plane/plane.png b/blueprints/plane/plane.png new file mode 100644 index 0000000..3c6a00b Binary files /dev/null and b/blueprints/plane/plane.png differ diff --git a/blueprints/plane/template.toml b/blueprints/plane/template.toml new file mode 100644 index 0000000..932af51 --- /dev/null +++ b/blueprints/plane/template.toml @@ -0,0 +1,52 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ +"Domain=${main_domain}", +"PGHOST=plane-db", +"PGDATABASE=plane", +"POSTGRES_USER={username}", +"POSTGRES_PASSWORD={password:32}", +"POSTGRES_DB=plane", +"POSTGRES_PORT=5432", +"PGDATA=/var/lib/postgresql/data", +"REDIS_HOST=plane-redis", +"REDIS_PORT=6379", +"REDIS_URL=redis://plane-redis:6379/", +"MINIO_ROOT_USER=access-key", +"MINIO_ROOT_PASSWORD=password:32", +"AWS_REGION=", +"AWS_ACCESS_KEY_ID={username}", +"AWS_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}", +"AWS_S3_ENDPOINT_URL=http://plane-minio:9000", +"AWS_S3_BUCKET_NAME=uploads", +"NGINX_PORT=80", +"BUCKET_NAME=uploads", +"FILE_SIZE_LIMIT=5242880", +"RABBITMQ_HOST=plane-mq", +"RABBITMQ_PORT=5672", +"RABBITMQ_DEFAULT_USER={username}", +"RABBITMQ_DEFAULT_PASS={password:32}", +"RABBITMQ_DEFAULT_VHOST=plane", +"RABBITMQ_VHOST=plane", +"API_BASE_URL=http://api:8000", +"WEB_URL=${main_domain}", +"DEBUG=0", +"SENTRY_DSN=", +"SENTRY_ENVIRONMENT=production", +"CORS_ALLOWED_ORIGINS=", +"GUNICORN_WORKERS=1", +"USE_MINIO=1", +"DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@plane-db/plane", +"SECRET_KEY={base64:48}", +"AMQP_URL=amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@plane-mq:5672/plane", +"API_KEY_RATE_LIMIT=60/minute", +"MINIO_ENDPOINT_SSL=0" +] +mounts = [] + +[[config.domains]] +serviceName = "proxy" +port = 80 +host = "${main_domain}" diff --git a/meta.json b/meta.json index 7737847..fe02f67 100644 --- a/meta.json +++ b/meta.json @@ -178,6 +178,22 @@ "applications" ] }, + { + "id": "forgejo", + "name": "Forgejo", + "version": "10", + "description": "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job", + "logo": "forgejo.svg", + "links": { + "github": "https://codeberg.org/forgejo/forgejo", + "website": "https://forgejo.org/", + "docs": "https://forgejo.org/docs/latest/" + }, + "tags": [ + "self-hosted", + "storage" + ] + }, { "id": "ghost", "name": "Ghost", @@ -193,6 +209,39 @@ "cms" ] }, + { + "id": "lodestone", + "name": "Lodestone", + "version": "0.5.1", + "description": "A free, open source server hosting tool for Minecraft and other multiplayers games.", + "logo": "lodestone.png", + "links": { + "github": "https://github.com/Lodestone-Team/lodestone", + "website": "https://lodestone.cc", + "docs": "https://github.com/Lodestone-Team/lodestone/wiki" + }, + "tags": [ + "minecraft", + "hosting", + "server" + ] + }, + { + "id": "dragonfly-db", + "name": "Dragonfly", + "version": "1.28.1", + "description": "Dragonfly is a drop-in Redis replacement that is designed for heavy data workloads running on modern cloud hardware.", + "logo": "dragonfly-db.png", + "links": { + "github": "https://github.com/dragonflydb/dragonfly", + "website": "https://www.dragonflydb.io/", + "docs": "https://www.dragonflydb.io/docs" + }, + "tags": [ + "database", + "redis" + ] + }, { "id": "uptime-kuma", "name": "Uptime Kuma", @@ -346,6 +395,22 @@ "search" ] }, + { + "id": "mattermost", + "name": "Mattermost", + "version": "10.6.1", + "description": "A single point of collaboration. Designed specifically for digital operations.", + "logo": "mattermost.png", + "links": { + "github": "https://github.com/mattermost/mattermost", + "website": "https://mattermost.com/", + "docs": "https://docs.mattermost.com/" + }, + "tags": [ + "chat", + "self-hosted" + ] + }, { "id": "phpmyadmin", "name": "Phpmyadmin", @@ -646,6 +711,21 @@ "storage" ] }, + { + "id": "focalboard", + "name": "Focalboard", + "version": "8.0.0", + "description": "Open source project management for technical teams", + "logo": "focalboard.png", + "links": { + "github": "https://github.com/sysblok/focalboard", + "website": "https://focalboard.com", + "docs": "https://www.focalboard.com/docs/" + }, + "tags": [ + "kanban" + ] + }, { "id": "tolgee", "name": "Tolgee", @@ -680,6 +760,21 @@ "monitoring" ] }, + { + "id": "plane", + "name": "Plane", + "version": "v0.25.3", + "description": "Easy, flexible, open source project management software", + "logo": "plane.png", + "links": { + "github": "https://github.com/makeplane/plane", + "website": "https://plane.so", + "docs": "https://docs.plane.so/" + }, + "tags": [ + "kanban" + ] + }, { "id": "influxdb", "name": "InfluxDB",