Nextcloud (Community)
Get Started with Apps!
Keywords: nextcloud, storage, sync, http, web, php
Train: Community
Home Page: https://nextcloud.com/
Added: 2025-03-05
Last Updated: 2026-08-13
A file sharing server that puts the control and security of your own data back into your hands.
Run as Context- Container [cron] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps] - Container [harp] runs as root user and group.
Group: 0 / Host group is [root]
User: 0 / Host user is [root] - Container [imaginary] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps] - Container [nextcloud] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps] - Container [nginx] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps] - Container [notify-push] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps] - Container [postgres] runs as non-root user and group.
Group: 999 / Host group is [docker]
User: 999 / Host user is [netdata] - Container [redis] can run as any non-root user and group.
Group: 568 / Host group is [apps]
User: 568 / Host user is [apps]

Host Mounts
- /var/run/docker.sock : Required for HaRP (AppAPI) to manage Docker containers when enabled.
Security Capabilities
- Harp is able to bypass read/execute permission checks
App Metadata (Raw File)
{
"1.0.3": {
"healthy": true,
"supported": true,
"healthy_error": null,
"location": "/__w/apps/apps/trains/community/nextcloud/1.0.3",
"last_update": "2026-08-13 14:11:43",
"required_features": [],
"human_version": "34.0.2-fpm-7bb8cfc6_1.0.3",
"version": "1.0.3",
"app_metadata": {
"app_version": "34.0.2-fpm-7bb8cfc6",
"capabilities": [
{
"description": "Harp is able to bypass read/execute permission checks",
"name": "DAC_READ_SEARCH"
}
],
"categories": [
"productivity"
],
"changelog_url": "https://nextcloud.com/changelog/",
"date_added": "2025-03-05",
"description": "A file sharing server that puts the control and security of your own data back into your hands.",
"home": "https://nextcloud.com/",
"host_mounts": [
{
"description": "Required for HaRP (AppAPI) to manage Docker containers when enabled.",
"host_path": "/var/run/docker.sock"
}
],
"icon": "https://media.sys.truenas.net/apps/nextcloud/icons/icon.svg",
"keywords": [
"nextcloud",
"storage",
"sync",
"http",
"web",
"php"
],
"lib_version": "2.3.8",
"lib_version_hash": "cd75c897a1e8fef54b5bd00d0d8849f240bc50db2ef650eccc0ee74f3b2b2dc1",
"maintainers": [
{
"email": "dev@truenas.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "nextcloud",
"run_as_context": [
{
"description": "Container [cron] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [harp] runs as root user and group.",
"gid": 0,
"group_name": "Host group is [root]",
"uid": 0,
"user_name": "Host user is [root]"
},
{
"description": "Container [imaginary] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [nextcloud] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [nginx] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [notify-push] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [postgres] runs as non-root user and group.",
"gid": 999,
"group_name": "Host group is [docker]",
"uid": 999,
"user_name": "Host user is [netdata]"
},
{
"description": "Container [redis] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
}
],
"screenshots": [
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot1.png",
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot2.png",
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot3.png"
],
"sources": [
"https://apps.truenas.com/catalog/nextcloud_community/",
"https://apps.truenas.com/catalog/nextcloud_test/",
"https://github.com/nextcloud/docker",
"https://github.com/truenas/containers/tree/master/apps/nextcloud-fpm",
"https://github.com/truenas/containers/tree/master/apps/nextcloud-notify-push",
"https://hub.docker.com/r/ixsystems/nextcloud-fpm",
"https://hub.docker.com/r/ixsystems/nextcloud-notify-push"
],
"title": "Nextcloud",
"train": "community",
"version": "1.0.3"
},
"schema": {
"groups": [
{
"name": "Nextcloud Configuration",
"description": "Configure Nextcloud"
},
{
"name": "User and Group Configuration",
"description": "Configure User and Group for Nextcloud"
},
{
"name": "Network Configuration",
"description": "Configure Network for Nextcloud"
},
{
"name": "Storage Configuration",
"description": "Configure Storage for Nextcloud"
},
{
"name": "Labels Configuration",
"description": "Configure Labels for Nextcloud"
},
{
"name": "Resources Configuration",
"description": "Configure Resources for Nextcloud"
}
],
"questions": [
{
"variable": "TZ",
"group": "Nextcloud Configuration",
"label": "Timezone",
"schema": {
"type": "string",
"default": "Etc/UTC",
"required": true,
"$ref": [
"definitions/timezone"
]
}
},
{
"variable": "nextcloud",
"label": "",
"group": "Nextcloud Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "postgres_image_selector",
"label": "Postgres Image (CAUTION)",
"description": "If you are changing this after the postgres directory has been initialized,</br>\nSTOP! and make sure you have a backup of your data.</br>\nChanging this will trigger an one way database upgrade.</br>\nYou can only select newer versions of postgres.</br>\nSelecting an older version will refuse to start.</br>\nIf something goes wrong, you will have to restore from backup.\n",
"schema": {
"type": "string",
"default": "postgres_18_image",
"required": true,
"enum": [
{
"value": "postgres_17_image",
"description": "Postgres 17"
},
{
"value": "postgres_18_image",
"description": "Postgres 18"
}
]
}
},
{
"variable": "admin_user",
"label": "Admin User",
"description": "The admin user for Nextcloud.",
"schema": {
"type": "string",
"default": "",
"required": true
}
},
{
"variable": "admin_password",
"label": "Admin Password",
"description": "The admin password for Nextcloud.",
"schema": {
"type": "string",
"default": "",
"required": true,
"private": true
}
},
{
"variable": "redis_password",
"label": "Redis Password",
"schema": {
"type": "string",
"default": "",
"required": true,
"private": true
}
},
{
"variable": "db_password",
"label": "Database Password",
"schema": {
"type": "string",
"default": "",
"required": true,
"private": true
}
},
{
"variable": "build",
"label": "Build",
"description": "Build-time configuration for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "tesseract_languages",
"label": "Tesseract Language Codes",
"description": "The tesseract languages to install for OCRmypdf.</br>\nSee a list of language codes here https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html.</br>\nTyping a wrong language code will block the container from starting.\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "language",
"label": "Language",
"schema": {
"type": "string",
"min_length": 3,
"max_length": 7,
"required": true
}
}
]
}
}
]
}
},
{
"variable": "performance",
"label": "Performance",
"description": "Performance settings for Nextcloud.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "run_optimize",
"label": "Run Optimize",
"description": "Runs some optimizations for Nextcloud.</br>\nSee https://github.com/truenas/containers/blob/master/apps/nextcloud-fpm/configure-scripts/occ-optimize.sh\n",
"schema": {
"type": "boolean",
"default": true
}
},
{
"variable": "max_chunksize_mb",
"label": "Max Chunksize (MB)",
"description": "The maximum chunk size to use for chunked uploads.",
"schema": {
"type": "int",
"default": 10,
"min": 1,
"max": 1024,
"required": true
}
},
{
"variable": "php_upload_limit_gb",
"label": "PHP Upload Limit (GB)",
"description": "The maximum size of an uploaded file.",
"schema": {
"type": "int",
"default": 3,
"min": 1,
"required": true
}
},
{
"variable": "php_memory_limit_mb",
"label": "PHP Memory Limit (MB)",
"description": "The maximum amount of memory a script may consume.",
"schema": {
"type": "int",
"default": 512,
"min": 128,
"max": 4096,
"required": true
}
}
]
}
},
{
"variable": "general",
"label": "General",
"description": "General settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "maintenance_window_start",
"label": "Maintenance Window Start",
"description": "The start of the maintenance window.</br>\nSee https://docs.nextcloud.com/server/28/admin_manual/configuration_server/background_jobs_configuration.html#maintenance-window-start\n",
"schema": {
"type": "int",
"default": 100,
"min": 0,
"max": 100,
"required": true
}
},
{
"variable": "default_phone_region",
"label": "Default Phone Region",
"description": "The default phone region.",
"schema": {
"type": "string",
"default": "US",
"min_length": 2,
"max_length": 2,
"required": true
}
}
]
}
},
{
"variable": "previews",
"label": "Previews",
"description": "Previews settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable previews.",
"schema": {
"type": "boolean",
"default": true
}
},
{
"variable": "imaginary",
"label": "Imaginary",
"description": "Enable Imaginary.</br>\nEnabling or Disabling this will trigger actions on each startup to ensure\nthe configuration is either present or absent.</br>\nActions like, update configuration, add/remove nextcloud app.\n",
"schema": {
"type": "dict",
"show_if": [
[
"enabled",
"=",
true
]
],
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable Imaginary.",
"schema": {
"type": "boolean",
"default": true
}
}
]
}
},
{
"variable": "max_x",
"label": "Max X",
"description": "The maximum width of the preview.",
"schema": {
"type": "int",
"default": 2048,
"required": true
}
},
{
"variable": "max_y",
"label": "Max Y",
"description": "The maximum height of the preview.",
"schema": {
"type": "int",
"default": 2048,
"required": true
}
},
{
"variable": "max_memory_mb",
"label": "Max Memory (MB)",
"description": "The maximum memory to use for the preview.",
"schema": {
"type": "int",
"default": 1024,
"required": true
}
},
{
"variable": "max_filesize_image_mb",
"label": "Max Filesize Image (MB)",
"description": "The maximum size of an image to use for the preview.",
"schema": {
"type": "int",
"default": 50,
"required": true
}
},
{
"variable": "jpeg_quality",
"label": "JPEG Quality",
"description": "The JPEG quality to use for the preview.",
"schema": {
"type": "int",
"default": 60,
"min": 1,
"max": 100,
"required": true
}
},
{
"variable": "square_sizes",
"label": "Square Sizes",
"description": "The square sizes to use for the preview.",
"schema": {
"type": "list",
"default": [
32,
256
],
"items": [
{
"variable": "size",
"label": "Size",
"schema": {
"type": "int",
"min": 1,
"max": 1024,
"required": true
}
}
]
}
},
{
"variable": "width_sizes",
"label": "Width Sizes",
"description": "The width sizes to use for the preview.",
"schema": {
"type": "list",
"default": [
256,
384
],
"items": [
{
"variable": "size",
"label": "Size",
"schema": {
"type": "int",
"min": 1,
"max": 1024,
"required": true
}
}
]
}
},
{
"variable": "height_sizes",
"label": "Height Sizes",
"description": "The height sizes to use for the preview.",
"schema": {
"type": "list",
"default": [
256
],
"items": [
{
"variable": "size",
"label": "Size",
"schema": {
"type": "int",
"min": 1,
"max": 1024,
"required": true
}
}
]
}
},
{
"variable": "providers",
"label": "Providers",
"description": "The providers to use for the preview.</br>\n",
"schema": {
"type": "list",
"default": [
"BMP",
"GIF",
"JPEG",
"Krita",
"MarkDown",
"MP3",
"OpenDocument",
"PNG",
"TXT",
"XBitmap"
],
"items": [
{
"variable": "provider",
"label": "Provider",
"schema": {
"type": "string",
"required": true,
"enum": [
{
"value": "BMP",
"description": "BMP"
},
{
"value": "GIF",
"description": "GIF"
},
{
"value": "JPEG",
"description": "JPEG"
},
{
"value": "Krita",
"description": "Krita"
},
{
"value": "MarkDown",
"description": "MarkDown"
},
{
"value": "MP3",
"description": "MP3"
},
{
"value": "OpenDocument",
"description": "OpenDocument"
},
{
"value": "PNG",
"description": "PNG"
},
{
"value": "TXT",
"description": "TXT"
},
{
"value": "XBitmap",
"description": "XBitmap"
},
{
"value": "Font",
"description": "Font"
},
{
"value": "HEIC",
"description": "HEIC"
},
{
"value": "Illustrator",
"description": "Illustrator"
},
{
"value": "Movie",
"description": "Movie"
},
{
"value": "MSOffice2003",
"description": "MSOffice2003"
},
{
"value": "MSOffice2007",
"description": "MSOffice2007"
},
{
"value": "MSOfficeDoc",
"description": "MSOfficeDoc"
},
{
"value": "PDF",
"description": "PDF"
},
{
"value": "Photoshop",
"description": "Photoshop"
},
{
"value": "Postscript",
"description": "Postscript"
},
{
"value": "StarOffice",
"description": "StarOffice"
},
{
"value": "SVG",
"description": "SVG"
},
{
"value": "TIFF",
"description": "TIFF"
},
{
"value": "EMF",
"description": "EMF"
}
]
}
}
]
}
}
]
}
},
{
"variable": "expirations",
"label": "Expirations",
"description": "Expirations settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "activity_expire_days",
"label": "Activity Expire Days",
"description": "The number of days to keep activity logs.",
"schema": {
"type": "int",
"default": 365,
"min": 1,
"required": true
}
},
{
"variable": "trash_retention",
"label": "Trash Retention",
"description": "See https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/trashbin_configuration.html#deleted-items-trash-bin\n",
"schema": {
"type": "string",
"default": "auto",
"required": true
}
},
{
"variable": "versions_retention",
"label": "Versions Retention",
"description": "See https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/file_versioning.html\n",
"schema": {
"type": "string",
"default": "auto",
"required": true
}
}
]
}
},
{
"variable": "cron",
"label": "Cron",
"description": "Cron settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "tasks",
"label": "Tasks",
"description": "Only add here additional (custom) cron tasks.</br>\nThe Nextcloud's default cron task is already scheduled.</br>\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "task",
"label": "Task",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "schedule",
"label": "Schedule",
"description": "The cron schedule.",
"schema": {
"type": "string",
"default": "*/15 * * * *",
"required": true
}
},
{
"variable": "command",
"label": "Command",
"description": "The command to run.",
"schema": {
"type": "string",
"required": true,
"private": true
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "notify_push",
"label": "Notify Push",
"description": "Notify Push settings for Nextcloud.</br>\nEnabling or Disabling this will trigger actions on each startup to ensure\nthe configuration is either present or absent.</br>\nActions like, update configuration, add/remove nextcloud app.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable Notify Push container",
"schema": {
"type": "boolean",
"default": true
}
}
]
}
},
{
"variable": "harp",
"label": "HaRP (AppAPI)",
"description": "HaRP (HAProxy Reverse Proxy) enables Nextcloud AppAPI for External Apps (ExApps).</br>\nEnabling or Disabling this will trigger actions on each startup to ensure\nthe configuration is either present or absent.</br>\nRequires Docker socket access (/var/run/docker.sock).</br>\nSee https://github.com/nextcloud/HaRP for more information.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable HaRP for Nextcloud AppAPI",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "shared_key",
"label": "Shared Key",
"description": "Secret key shared between HaRP and Nextcloud AppAPI.</br>\nSet the same value in Nextcloud Admin > AppAPI > Deploy Daemons.\n",
"schema": {
"type": "string",
"private": true,
"required": true,
"show_if": [
[
"enabled",
"=",
true
]
]
}
},
{
"variable": "compute_device",
"label": "Compute Device",
"description": "GPU device to expose to the daemon",
"schema": {
"type": "string",
"default": "cpu",
"required": true,
"show_if": [
[
"enabled",
"=",
true
]
],
"enum": [
{
"value": "cpu",
"description": "CPU"
},
{
"value": "cuda",
"description": "CUDA compatible GPU"
},
{
"value": "rocm",
"description": "ROCm compatible GPU"
}
]
}
}
]
}
},
{
"variable": "collabora",
"label": "Collabora",
"description": "Collabora settings for Nextcloud.</br>\nEnabling or Disabling this will trigger actions on each startup to ensure\nthe configuration is either present or absent.</br>\nActions like, update configuration, add/remove nextcloud app.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable Collabora",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "url",
"label": "URL",
"description": "The URL to use for Collabora.</br>\nhttps://collabora.example.com\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"required": true
}
},
{
"variable": "internal_url",
"label": "Internal URL",
"description": "The internal URL to use for Collabora.</br>\nThis URL needs to be accessible from the Nextcloud container.</br>\nBut not required to be accessible from the outside (ie clients).</br>\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": "http://host.docker.internal:9980",
"required": true
}
},
{
"variable": "allowlist",
"label": "Allowlist",
"description": "The allowlist to use for Collabora.</br>\nExample: 0.0.0.0/0\n",
"schema": {
"type": "list",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": [
"0.0.0.0/0"
],
"items": [
{
"variable": "allow",
"label": "Allow",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "onlyoffice",
"label": "Onlyoffice",
"description": "Onlyoffice settings for Nextcloud.</br>\nEnabling or Disabling this will trigger actions on each startup to ensure\nthe configuration is either present or absent.</br>\nActions like, update configuration, add/remove nextcloud app.\n",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable Onlyoffice",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "url",
"label": "URL",
"description": "The URL to use for Onlyoffice.</br>\nhttps://onlyoffice.example.com\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"required": true
}
},
{
"variable": "jwt_secret",
"label": "JWT Secret",
"description": "The JWT secret to use for Onlyoffice.</br>\nExample: random_string_of_characters\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"required": true,
"private": true
}
},
{
"variable": "jwt_header",
"label": "JWT Header",
"description": "The JWT header to use for Onlyoffice.</br>\nExample: Authorization\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": "Authorization",
"required": true
}
}
]
}
},
{
"variable": "clamav",
"label": "Clamav",
"description": "Clamav settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "enabled",
"label": "Enabled",
"description": "Enable Clamav",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "host",
"label": "Host",
"description": "The host to use for Clamav.</br>\nDo NOT include the protocol or the port.</br>\nExamples: </br>\n - clamav.example.com\n - 192.168.1.100 (replace ip and port with your own)\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"required": true
}
},
{
"variable": "port",
"label": "Port",
"description": "The port to use for Clamav.</br>\nExample: 3310\n",
"schema": {
"type": "int",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": 3310,
"min": 1,
"max": 65535,
"required": true
}
},
{
"variable": "file_max_size",
"label": "File Max Size",
"description": "The maximum size of a file to scan.</br>\nExample: -1 (unlimited)\n",
"schema": {
"type": "int",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": -1,
"min": -1,
"required": true
}
},
{
"variable": "infected_action",
"label": "Infected Action",
"description": "The action to take when a file is infected.</br>\nExample: only_log\n",
"schema": {
"type": "string",
"show_if": [
[
"enabled",
"=",
true
]
],
"default": "only_log",
"required": true,
"enum": [
{
"value": "only_log",
"description": "Only log"
},
{
"value": "delete",
"description": "Delete"
}
]
}
}
]
}
},
{
"variable": "urls",
"label": "URLs",
"description": "URLs settings for Nextcloud.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "protocol",
"label": "Protocol",
"description": "The protocol you use to access Nextcloud.</br>\nFor example if you use a reverse proxy, you most likely want to use https.</br>\nIf you setup a certificate on the network section, https will be used automatically.\n",
"schema": {
"type": "string",
"default": "http",
"required": true,
"enum": [
{
"value": "http",
"description": "HTTP"
},
{
"value": "https",
"description": "HTTPS"
}
]
}
},
{
"variable": "host",
"label": "Host",
"description": "The host you use to access Nextcloud.</br>\nDo NOT include the protocol or the port.</br>\nExamples:</br>\n- cloud.domain.com</br>\n- 192.168.1.100 (replace ip and port with your own)\n",
"schema": {
"type": "string",
"default": "",
"required": true
}
},
{
"variable": "external_port",
"label": "External Port",
"description": "The external port you use to access Nextcloud.</br>\nIf you use a reverse proxy, you most likely want to use 443.</br>\nLeave it at `0` if you are not using anything else in-front of Nextcloud.</br>\nExample: 443\n",
"schema": {
"type": "int",
"null": true,
"min": 1,
"max": 65535
}
},
{
"variable": "trusted_domains",
"label": "Trusted Domains",
"description": "Additional trusted domains to use for Nextcloud.</br>\nAutomatically added:\n- The `host` you set above\n- Hosts of Collabora and/or Onlyoffice\n",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "domain",
"label": "Domain",
"schema": {
"type": "string",
"required": true
}
}
]
}
},
{
"variable": "trusted_proxies",
"label": "Trusted Proxies",
"description": "Trusted proxies to use for Nextcloud.",
"schema": {
"type": "list",
"default": [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16"
],
"items": [
{
"variable": "proxy",
"label": "Proxy",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
},
{
"variable": "additional_envs",
"label": "Additional Environment Variables",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "env",
"label": "Environment Variable",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Name",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string"
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "run_as",
"label": "",
"group": "User and Group Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "user",
"label": "User ID",
"description": "The user id that Nextcloud files will be owned by.",
"schema": {
"type": "int",
"min": 568,
"default": 568,
"required": true
}
},
{
"variable": "group",
"label": "Group ID",
"description": "The group id that Nextcloud files will be owned by.",
"schema": {
"type": "int",
"min": 568,
"default": 568,
"required": true
}
}
]
}
},
{
"variable": "network",
"label": "",
"group": "Network Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "web_port",
"label": "WebUI Port",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "bind_mode",
"label": "Port Bind Mode",
"description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
"schema": {
"type": "string",
"default": "published",
"enum": [
{
"value": "published",
"description": "Publish port on the host for external access"
},
{
"value": "exposed",
"description": "Expose port for inter-container communication"
},
{
"value": "",
"description": "None"
}
]
}
},
{
"variable": "port_number",
"label": "Port Number",
"schema": {
"type": "int",
"default": 30125,
"min": 1,
"max": 65535,
"required": true
}
},
{
"variable": "host_ips",
"label": "Host IPs",
"description": "IPs on the host to bind this port",
"schema": {
"type": "list",
"show_if": [
[
"bind_mode",
"=",
"published"
]
],
"default": [],
"items": [
{
"variable": "host_ip",
"label": "Host IP",
"schema": {
"type": "string",
"required": true,
"$ref": [
"definitions/node_bind_ip"
]
}
}
]
}
}
]
}
},
{
"variable": "certificate_id",
"label": "Certificate ID",
"description": "The certificate ID to use for Nextcloud.",
"schema": {
"type": "int",
"null": true,
"$ref": [
"definitions/certificate"
]
}
},
{
"variable": "networks",
"label": "Networks",
"description": "The docker networks to join",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "network",
"label": "Network",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Name",
"description": "The name of the network to join.</br>\nThe network must already exist.\n",
"schema": {
"type": "string",
"default": "",
"required": true
}
},
{
"variable": "containers",
"label": "Containers",
"description": "The containers to add to this network.",
"schema": {
"type": "list",
"items": [
{
"variable": "container",
"label": "Container",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Container Name",
"schema": {
"type": "string",
"required": true,
"enum": [
{
"value": "nextcloud",
"description": "nextcloud"
},
{
"value": "imaginary",
"description": "imaginary"
},
{
"value": "notify-push",
"description": "notify-push"
},
{
"value": "cron",
"description": "cron"
},
{
"value": "nginx",
"description": "nginx"
},
{
"value": "postgres",
"description": "postgres"
},
{
"value": "redis",
"description": "redis"
},
{
"value": "harp",
"description": "harp"
}
]
}
},
{
"variable": "config",
"label": "Container Network Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "aliases",
"label": "Aliases (Optional)",
"description": "The network aliases to use for this container on this network.",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "alias",
"label": "Alias",
"schema": {
"type": "string"
}
}
]
}
},
{
"variable": "interface_name",
"label": "Interface Name (Optional)",
"description": "The network interface name to use for this network",
"schema": {
"type": "string"
}
},
{
"variable": "mac_address",
"label": "MAC Address (Optional)",
"description": "The MAC address to use for this network interface.",
"schema": {
"type": "string"
}
},
{
"variable": "ipv4_address",
"label": "IPv4 Address (Optional)",
"description": "The IPv4 address to use for this network interface.",
"schema": {
"type": "string"
}
},
{
"variable": "ipv6_address",
"label": "IPv6 Address (Optional)",
"description": "The IPv6 address to use for this network interface.",
"schema": {
"type": "string"
}
},
{
"variable": "gw_priority",
"label": "Gateway Priority (Optional)",
"description": "Indicates the priority of the gateway for this network interface.",
"schema": {
"type": "int",
"null": true
}
},
{
"variable": "priority",
"label": "Priority (Optional)",
"description": "Indicates in which order Compose connects the service's containers to its networks.",
"schema": {
"type": "int",
"null": true
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "storage",
"label": "",
"group": "Storage Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "html",
"label": "Nextcloud AppData Storage (HTML, Custom Themes, Apps, etc.)",
"description": "The path to store Nextcloud HTML and AppData.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"hidden": true,
"default": "html"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
}
]
}
},
{
"variable": "data",
"label": "Nextcloud User Data Storage",
"description": "The path to store Nextcloud User Data (Mounted at /nc-data).",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"hidden": true,
"default": "data"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
}
]
}
},
{
"variable": "postgres_data",
"label": "Nextcloud Postgres Data Storage",
"description": "The path to store Nextcloud Postgres Data.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"hidden": true,
"default": "postgres_data"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
},
{
"variable": "auto_permissions",
"label": "Automatic Permissions",
"description": "Automatically set permissions for the host path.\nEnabling this, will check the top level directory,</br>\nIf it finds incorrect permissions, it will `chown` the\nhost path to the user and group required for the\npostgres container.\n",
"schema": {
"type": "boolean",
"default": false,
"show_if": [
[
"acl_enable",
"=",
false
]
]
}
}
]
}
}
]
}
},
{
"variable": "additional_storage",
"label": "Additional Storage",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "storageEntry",
"label": "Storage Entry",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.</br>\nNFS Share: Is a NFS share that is mounted to as a volume.\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
},
{
"value": "cifs",
"description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
},
{
"value": "nfs",
"description": "NFS Share (Mounts a volume to a NFS share)"
}
]
}
},
{
"variable": "read_only",
"label": "Read Only",
"description": "Mount the volume as read only.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "mount_path",
"label": "Mount Path",
"description": "The path inside the container to mount the storage.",
"schema": {
"type": "path",
"required": true
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"default": "storage_entry"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
}
]
}
},
{
"variable": "cifs_config",
"label": "SMB Configuration",
"description": "The configuration for the SMB dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"cifs"
]
],
"attrs": [
{
"variable": "server",
"label": "Server",
"description": "The server to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "path",
"label": "Path",
"description": "The path to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "username",
"label": "Username",
"description": "The username to use for the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "password",
"label": "Password",
"description": "The password to use for the SMB share.",
"schema": {
"type": "string",
"required": true,
"private": true
}
},
{
"variable": "domain",
"label": "Domain",
"description": "The domain to use for the SMB share.",
"schema": {
"type": "string"
}
}
]
}
},
{
"variable": "nfs_config",
"label": "NFS Configuration",
"description": "The configuration for the NFS dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"nfs"
]
],
"attrs": [
{
"variable": "server",
"label": "Server",
"description": "The server to mount the NFS share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "path",
"label": "Path",
"description": "The path to mount the NFS share.",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "labels",
"label": "",
"group": "Labels Configuration",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "label",
"label": "Label",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "key",
"label": "Key",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "containers",
"label": "Containers",
"description": "Containers where the label should be applied",
"schema": {
"type": "list",
"items": [
{
"variable": "container",
"label": "Container",
"schema": {
"type": "string",
"required": true,
"enum": [
{
"value": "nextcloud",
"description": "nextcloud"
},
{
"value": "imaginary",
"description": "imaginary"
},
{
"value": "notify-push",
"description": "notify-push"
},
{
"value": "cron",
"description": "cron"
},
{
"value": "nginx",
"description": "nginx"
},
{
"value": "postgres",
"description": "postgres"
},
{
"value": "redis",
"description": "redis"
},
{
"value": "harp",
"description": "harp"
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "resources",
"label": "",
"group": "Resources Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "limits",
"label": "Limits",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "cpus",
"label": "CPUs",
"description": "CPUs limit for Nextcloud.",
"schema": {
"type": "int",
"default": 2,
"required": true
}
},
{
"variable": "memory",
"label": "Memory (in MB)",
"description": "Memory limit for Nextcloud.",
"schema": {
"type": "int",
"default": 4096,
"required": true
}
}
]
}
},
{
"variable": "gpus",
"group": "Resources Configuration",
"label": "GPU Configuration",
"schema": {
"type": "dict",
"$ref": [
"definitions/gpu_configuration"
],
"attrs": []
}
}
]
}
}
]
},
"readme": "<h1>Nextcloud</h1> <p><a href=\"https://nextcloud.com/\">Nextcloud</a> is a file sharing server that puts the control and security of your own data back into your hands.</p>",
"changelog": null,
"chart_metadata": {
"app_version": "34.0.2-fpm-7bb8cfc6",
"capabilities": [
{
"description": "Harp is able to bypass read/execute permission checks",
"name": "DAC_READ_SEARCH"
}
],
"categories": [
"productivity"
],
"changelog_url": "https://nextcloud.com/changelog/",
"date_added": "2025-03-05",
"description": "A file sharing server that puts the control and security of your own data back into your hands.",
"home": "https://nextcloud.com/",
"host_mounts": [
{
"description": "Required for HaRP (AppAPI) to manage Docker containers when enabled.",
"host_path": "/var/run/docker.sock"
}
],
"icon": "https://media.sys.truenas.net/apps/nextcloud/icons/icon.svg",
"keywords": [
"nextcloud",
"storage",
"sync",
"http",
"web",
"php"
],
"lib_version": "2.3.8",
"lib_version_hash": "cd75c897a1e8fef54b5bd00d0d8849f240bc50db2ef650eccc0ee74f3b2b2dc1",
"maintainers": [
{
"email": "dev@truenas.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "nextcloud",
"run_as_context": [
{
"description": "Container [cron] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [harp] runs as root user and group.",
"gid": 0,
"group_name": "Host group is [root]",
"uid": 0,
"user_name": "Host user is [root]"
},
{
"description": "Container [imaginary] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [nextcloud] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [nginx] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [notify-push] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
},
{
"description": "Container [postgres] runs as non-root user and group.",
"gid": 999,
"group_name": "Host group is [docker]",
"uid": 999,
"user_name": "Host user is [netdata]"
},
{
"description": "Container [redis] can run as any non-root user and group.",
"gid": 568,
"group_name": "Host group is [apps]",
"uid": 568,
"user_name": "Host user is [apps]"
}
],
"screenshots": [
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot1.png",
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot2.png",
"https://media.sys.truenas.net/apps/nextcloud/screenshots/screenshot3.png"
],
"sources": [
"https://apps.truenas.com/catalog/nextcloud_community/",
"https://apps.truenas.com/catalog/nextcloud_test/",
"https://github.com/nextcloud/docker",
"https://github.com/truenas/containers/tree/master/apps/nextcloud-fpm",
"https://github.com/truenas/containers/tree/master/apps/nextcloud-notify-push",
"https://hub.docker.com/r/ixsystems/nextcloud-fpm",
"https://hub.docker.com/r/ixsystems/nextcloud-notify-push"
],
"title": "Nextcloud",
"train": "community",
"version": "1.0.3"
}
}
}Support, maintenance, and documentation for applications within the Community catalog is handled by the TrueNAS community. The TrueNAS Applications Market hosts but does not validate or maintain any linked resources associated with this app.
There currently aren’t any resources available for this application!
Please help the TrueNAS community add resources here or discuss this application in the TrueNAS Community forum.


