{ "module": "nextcloud", "version": "1", "slug": "ncloud", "requires": [ "postgres-database", "s3-bucket", "route" ], "contributes": { "postgres-database": { "name": "nextcloud" }, "s3-bucket": { "bucket": "nextcloud" }, "route": { "label": "drive", "port": 80 } }, "binds": { "postgres-database": "/var/lib/nextcloud-module/database.json", "s3-bucket": "/var/lib/nextcloud-module/store.json", "route": "/var/lib/nextcloud-module/route.json" }, "secrets": { "postgres-database": "/var/lib/nextcloud-module/database.secret", "s3-bucket": "/var/lib/nextcloud-module/store.secret" }, "emits": [ "module.nextcloud.user.created", "module.nextcloud.share.created" ], "own-secrets": { "admin": "/var/lib/nextcloud-module/admin.secret", "broker": "/var/lib/mesh/nextcloud/broker" }, "capabilities": [ "container-runtime" ], "listens": [ { "port": 80, "protocol": "tcp", "from": "mesh", "why": "files and sync, over http; a public name is a route grant later" } ], "resources": [ { "id": "mesh-state", "type": "directory", "path": "/var/lib/mesh/nextcloud", "mode": "0700" }, { "id": "state", "type": "directory", "path": "/var/lib/nextcloud-module", "mode": "0700" }, { "id": "server-env", "type": "file", "path": "/var/lib/nextcloud-module/server.env", "mode": "0600", "content": "POSTGRES_HOST=${bound:postgres-database:at}:${bound:postgres-database:port}\nPOSTGRES_DB=${bound:postgres-database:as}\nPOSTGRES_USER=${bound:postgres-database:as}\nPOSTGRES_PASSWORD=${secret:postgres-database}\nNEXTCLOUD_ADMIN_USER=admin\nNEXTCLOUD_ADMIN_PASSWORD=${secret:admin}\nOBJECTSTORE_S3_HOST=${bound:s3-bucket:at}\nOBJECTSTORE_S3_PORT=${bound:s3-bucket:port}\nOBJECTSTORE_S3_BUCKET=nextcloud\nOBJECTSTORE_S3_KEY=${bound:s3-bucket:as}\nOBJECTSTORE_S3_SECRET=${secret:s3-bucket}\nOBJECTSTORE_S3_SSL=false\nOBJECTSTORE_S3_USEPATH_STYLE=true\n" }, { "id": "html", "type": "directory", "path": "/services/nextcloud/html", "mode": "0750", "owner": "33:33" }, { "id": "server", "type": "container", "name": "nextcloud", "image": "nextcloud@sha256:fb966733647ea03f0446b0c22eac9733c8eb616d37b960caca9d4c3010e14a08", "env-file": [ "/var/lib/nextcloud-module/server.env" ], "ports": [ "80" ], "volumes": [ "/services/nextcloud/html:/var/www/html" ], "secrets-in-environment": "the image honours POSTGRES_PASSWORD_FILE and NEXTCLOUD_ADMIN_PASSWORD_FILE (entrypoint file_env); OBJECTSTORE_S3_SECRET has none and needs a generated config fragment; convertible, awaiting a bed" }, { "id": "runtime-config", "type": "file", "path": "/var/lib/mesh/nextcloud/config.json", "mode": "0600", "content": "{}\n", "merge": "json" }, { "id": "runtime", "type": "container", "name": "mesh-nextcloud", "network": "host", "volumes": [ "/var/lib/mesh/nextcloud/broker:/run/secrets/broker:ro", "/var/lib/mesh/nextcloud/config.json:/run/config/config.json:ro", "/var/run/docker.sock:/var/run/docker.sock" ], "env": { "MESH_BROKER_FILE": "/run/secrets/broker", "MESH_NEXTCLOUD_URL": "http://127.0.0.1:80", "MESH_NEXTCLOUD_CONFIG_FILE": "/run/config/config.json" }, "restart-on": [ "runtime-config" ], "artifact": "runtime" } ], "build": { "on": [ { "arg": "BUILD_BASE", "module": "mesh-tools", "artifact": "build" }, { "arg": "RUNTIME_BASE", "module": "mesh-tools", "artifact": "runtime" } ], "artifacts": [ { "name": "runtime", "kind": "image", "from": "Dockerfile" } ] } }