From ebcaed8eeaa4f59733df51e1d8912903fd290c61 Mon Sep 17 00:00:00 2001 From: Firefly <77047823+Yuri-NagaSaki@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:49:21 +0800 Subject: [PATCH] Add Cloudreve template (#649) Self-hosted file management and sharing system with multi-cloud storage support. Includes PostgreSQL and Redis for database and caching. --- blueprints/cloudreve/cloudreve.png | Bin 0 -> 6938 bytes blueprints/cloudreve/docker-compose.yml | 48 ++++++++++++++++++++++++ blueprints/cloudreve/template.toml | 16 ++++++++ meta.json | 18 +++++++++ 4 files changed, 82 insertions(+) create mode 100644 blueprints/cloudreve/cloudreve.png create mode 100644 blueprints/cloudreve/docker-compose.yml create mode 100644 blueprints/cloudreve/template.toml diff --git a/blueprints/cloudreve/cloudreve.png b/blueprints/cloudreve/cloudreve.png new file mode 100644 index 0000000000000000000000000000000000000000..28020b06c9b4d150b9253d4cb4ee6b5fe4b25c04 GIT binary patch literal 6938 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 literal 0 HcmV?d00001 diff --git a/blueprints/cloudreve/docker-compose.yml b/blueprints/cloudreve/docker-compose.yml new file mode 100644 index 00000000..f90f3685 --- /dev/null +++ b/blueprints/cloudreve/docker-compose.yml @@ -0,0 +1,48 @@ +version: "3.8" + +services: + cloudreve: + image: cloudreve/cloudreve:4.10.1 + depends_on: + postgresql: + condition: service_healthy + redis: + condition: service_started + restart: unless-stopped + environment: + - CR_CONF_Database.Type=postgres + - CR_CONF_Database.Host=postgresql + - CR_CONF_Database.User=${POSTGRES_USER} + - CR_CONF_Database.Password=${POSTGRES_PASSWORD} + - CR_CONF_Database.Name=${POSTGRES_DB} + - CR_CONF_Database.Port=5432 + - CR_CONF_Redis.Server=redis:6379 + volumes: + - cloudreve_data:/cloudreve/data + + postgresql: + image: postgres:17 + restart: unless-stopped + environment: + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_DB + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + redis: + image: redis:8.4.0 + restart: unless-stopped + volumes: + - redis_data:/data + +volumes: + cloudreve_data: + postgres_data: + redis_data: diff --git a/blueprints/cloudreve/template.toml b/blueprints/cloudreve/template.toml new file mode 100644 index 00000000..a5acf6b4 --- /dev/null +++ b/blueprints/cloudreve/template.toml @@ -0,0 +1,16 @@ +[variables] +main_domain = "${domain}" +db_password = "${password:32}" +db_user = "cloudreve" +db_name = "cloudreve" + +[config] +[[config.domains]] +serviceName = "cloudreve" +port = 5212 +host = "${main_domain}" + +[config.env] +POSTGRES_PASSWORD = "${db_password}" +POSTGRES_USER = "${db_user}" +POSTGRES_DB = "${db_name}" diff --git a/meta.json b/meta.json index 6b5ba634..208fb03d 100644 --- a/meta.json +++ b/meta.json @@ -1317,6 +1317,24 @@ "tunnel" ] }, + { + "id": "cloudreve", + "name": "Cloudreve", + "version": "4.10.1", + "description": "Self-hosted file management and sharing system with multi-cloud storage support. Compatible with local, OneDrive, S3, and various cloud providers.", + "logo": "cloudreve.png", + "links": { + "github": "https://github.com/cloudreve/Cloudreve", + "website": "https://cloudreve.org", + "docs": "https://docs.cloudreve.org" + }, + "tags": [ + "storage", + "file-sharing", + "cloud", + "self-hosted" + ] + }, { "id": "cockpit", "name": "Cockpit",