Skip to content
Open
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
3 changes: 3 additions & 0 deletions templates/opencloud/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added templates/opencloud/assets/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
70 changes: 70 additions & 0 deletions templates/opencloud/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { Output, randomPassword, Services } from "~templates-utils";
import { Input } from "./meta";

export function generate(input: Input): Output {
const services: Services = [];
const adminPassword = input.adminPassword || randomPassword();

const startupScript = `#!/bin/sh
opencloud init || true
opencloud server
`;

services.push({
type: "app",
data: {
serviceName: input.appServiceName,
source: {
type: "image",
image: input.appServiceImage,
},
env: [
`OC_URL=https://$(PRIMARY_DOMAIN)`,
`IDM_ADMIN_PASSWORD=${adminPassword}`,
`OC_LOG_LEVEL=info`,
`OC_LOG_COLOR=false`,
`OC_LOG_PRETTY=false`,
`PROXY_TLS=false`,
`OC_INSECURE=false`,
`PROXY_ENABLE_BASIC_AUTH=false`,
`IDM_CREATE_DEMO_USERS=false`,
`OC_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD=true`,
`OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD=false`,
`OC_PASSWORD_POLICY_DISABLED=false`,
`OC_PASSWORD_POLICY_MIN_CHARACTERS=8`,
`OC_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS=1`,
`OC_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS=1`,
`OC_PASSWORD_POLICY_MIN_DIGITS=1`,
`OC_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS=1`,
].join("\n"),
deploy: {
command: "/bin/sh /start.sh",
},
mounts: [
{
type: "file",
content: startupScript,
mountPath: "/start.sh",
},
{
type: "volume",
name: "config",
mountPath: "/etc/opencloud",
},
{
type: "volume",
name: "data",
mountPath: "/var/lib/opencloud",
},
],
domains: [
{
host: "$(EASYPANEL_DOMAIN)",
port: 9200,
},
],
},
});

return { services };
}
87 changes: 87 additions & 0 deletions templates/opencloud/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: OpenCloud
description:
OpenCloud is an open-source, GDPR-compliant platform for self-hosted file
management, sharing, and collaboration. Built with a Go backend, it provides a
full cloud-storage experience with WebDAV access, Spaces (team folders),
fine-grained sharing controls, file versioning, and activity tracking. An
embedded LibreGraph Connect OIDC identity provider handles authentication with
no external database required — all user accounts and data are stored on the
filesystem. Optional integrations include Collabora Online for real-time
document editing and a bundled Radicale server for CalDAV/CardDAV.
instructions:
After deployment open the app URL. Log in with username "admin" and the
password you set in IDM_ADMIN_PASSWORD. Change the admin password immediately
from Settings after first login — the IDM_ADMIN_PASSWORD variable is only read
on the very first start.
changeLog:
- date: 2026-07-02
description: first release
links:
- label: Website
url: https://opencloud.eu
- label: Documentation
url: https://docs.opencloud.eu
- label: GitHub
url: https://github.com/opencloud-eu/opencloud
contributors:
- name: Ahson Shaikh
url: https://github.com/Ahson-Shaikh
schema:
type: object
required:
- appServiceName
- appServiceImage
properties:
appServiceName:
type: string
title: App Service Name
default: opencloud
appServiceImage:
type: string
title: App Service Image
default: opencloudeu/opencloud:7.2.0
adminPassword:
type: string
title: Admin Password
default: ""
description: Autogenerated if not provided.
benefits:
- title: No External Database
description:
Stores all configuration, user accounts, and files in the filesystem via a
built-in identity manager — nothing to provision or maintain externally.
- title: GDPR-Compliant by Design
description:
Designed for European data sovereignty requirements. All data stays on
your infrastructure with no telemetry or third-party data transfers.
- title: WebDAV and Spaces
description:
Mount your OpenCloud storage as a network drive via WebDAV, and use Spaces
to create shared team folders with fine-grained access control.
features:
- title: File Management and Sharing
description:
Upload, organize, preview, and share files and folders with per-link
passwords and expiry dates. Public and internal share links are supported.
- title: Versioning and Activity Tracking
description:
Automatically keeps file version history and shows per-file activity logs
so you can track who changed what and when.
- title: Embedded OIDC Identity Provider
description:
LibreGraph Connect ships inside the container and manages user accounts
without requiring a separate Keycloak or other IdP deployment.
- title: Favorites and Trash
description:
Mark frequently accessed files as favorites and recover deleted files from
the trash before they are permanently removed.
- title: Collabora Online Support
description:
Optionally connect a self-hosted Collabora Online instance for in-browser
editing of Writer, Calc, and Impress documents.
tags:
- Storage
- File Sharing
- Collaboration
- WebDAV
- Self-Hosted