├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── main.yml │ └── manual.yml └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [tiredofit] 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: If something isn't working right.. 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### Summary 11 | 12 | 13 | 14 | 15 | ### Steps to reproduce 16 | 17 | 18 | 19 | 20 | ### What is the expected *correct* behavior? 21 | 22 | 23 | 24 | 25 | ### Relevant logs and/or screenshots 26 | 27 | 28 | 29 | ### Environment 30 | 31 | 32 | - Image version / tag: 33 | - Host OS: 34 | 35 |
36 | Any logs | docker-compose.yml 37 |
38 | 39 | 40 | 41 | ### Possible fixes 42 | 43 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea or feature 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | --- 11 | name: Feature Request 12 | about: Suggest an idea for this project 13 | 14 | --- 15 | 16 | **Description of the feature** 17 | 18 | 19 | **Benftits of feature** 20 | 21 | 22 | **Additional context** 23 | 24 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | ### Application Level Image CI 2 | ### Dave Conroy 3 | 4 | name: 'build' 5 | 6 | on: 7 | push: 8 | paths: 9 | - '**' 10 | - '!README.md' 11 | jobs: 12 | docker: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v2 17 | 18 | - name: Prepare 19 | id: prep 20 | run: | 21 | DOCKER_IMAGE=${GITHUB_REPOSITORY/docker-/} 22 | set -x 23 | if [[ $GITHUB_REF == refs/heads/* ]]; then 24 | if [[ $GITHUB_REF == refs/heads/*/* ]] ; then 25 | BRANCH="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed "s|refs/heads/||g" | sed "s|/|-|g")" 26 | else 27 | BRANCH=${GITHUB_REF#refs/heads/} 28 | fi 29 | 30 | case ${BRANCH} in 31 | "main" | "master" ) 32 | BRANCHTAG="${DOCKER_IMAGE}:latest" 33 | ;; 34 | "develop" ) 35 | BRANCHTAG="${DOCKER_IMAGE}:develop" 36 | ;; 37 | * ) 38 | if [ -n "${{ secrets.LATEST }}" ] ; then 39 | if [ "${BRANCHTAG}" = "${{ secrets.LATEST }}" ]; then 40 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest,${DOCKER_IMAGE}:latest" 41 | else 42 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" 43 | fi 44 | else 45 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" 46 | fi 47 | ;; 48 | esac 49 | fi 50 | 51 | 52 | if [[ $GITHUB_REF == refs/tags/* ]]; then 53 | GITTAG="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed 's|refs/tags/||g')" 54 | fi 55 | 56 | if [ -n "${BRANCHTAG}" ] && [ -n "${GITTAG}" ]; then 57 | TAGS=${BRANCHTAG},${GITTAG} 58 | else 59 | TAGS="${BRANCHTAG}${GITTAG}" 60 | fi 61 | 62 | echo ::set-output name=tags::${TAGS} 63 | echo ::set-output name=docker_image::${DOCKER_IMAGE} 64 | 65 | - name: Set up QEMU 66 | uses: docker/setup-qemu-action@v1 67 | with: 68 | platforms: all 69 | 70 | - name: Set up Docker Buildx 71 | id: buildx 72 | uses: docker/setup-buildx-action@v1 73 | 74 | - name: Login to DockerHub 75 | if: github.event_name != 'pull_request' 76 | uses: docker/login-action@v1 77 | with: 78 | username: ${{ secrets.DOCKER_USERNAME }} 79 | password: ${{ secrets.DOCKER_PASSWORD }} 80 | 81 | - name: Label 82 | id: Label 83 | run: | 84 | if [ -f "Dockerfile" ] ; then 85 | sed -i "/FROM .*/a LABEL tiredofit.image.git_repository=\"https://github.com/${GITHUB_REPOSITORY}\"" Dockerfile 86 | sed -i "/FROM .*/a LABEL tiredofit.image.git_commit=\"${GITHUB_SHA}\"" Dockerfile 87 | sed -i "/FROM .*/a LABEL tiredofit.image.git_committed_by=\"${GITHUB_ACTOR}\"" Dockerfile 88 | sed -i "/FROM .*/a LABEL tiredofit.image_build_date=\"$(date +'%Y-%m-%d %H:%M:%S')\"" Dockerfile 89 | if [ -f "CHANGELOG.md" ] ; then 90 | sed -i "/FROM .*/a LABEL tiredofit.image.git_changelog_version=\"$(head -n1 ./CHANGELOG.md | awk '{print $2}')\"" Dockerfile 91 | mkdir -p install/assets/.changelogs ; cp CHANGELOG.md install/assets/.changelogs/${GITHUB_REPOSITORY/\//_}.md 92 | fi 93 | 94 | if [[ $GITHUB_REF == refs/tags/* ]]; then 95 | sed -i "/FROM .*/a LABEL tiredofit.image.git_tag=\"${GITHUB_REF#refs/tags/v}\"" Dockerfile 96 | fi 97 | 98 | if [[ $GITHUB_REF == refs/heads/* ]]; then 99 | sed -i "/FROM .*/a LABEL tiredofit.image.git_branch=\"${GITHUB_REF#refs/heads/}\"" Dockerfile 100 | fi 101 | fi 102 | 103 | - name: Build 104 | uses: docker/build-push-action@v2 105 | with: 106 | builder: ${{ steps.buildx.outputs.name }} 107 | context: . 108 | file: ./Dockerfile 109 | platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 110 | push: true 111 | tags: ${{ steps.prep.outputs.tags }} 112 | -------------------------------------------------------------------------------- /.github/workflows/manual.yml: -------------------------------------------------------------------------------- 1 | # Manual Workflow (Application) 2 | 3 | name: manual 4 | 5 | on: 6 | workflow_dispatch: 7 | inputs: 8 | Manual Build: 9 | description: 'Manual Build' 10 | required: false 11 | jobs: 12 | docker: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v2 17 | 18 | - name: Prepare 19 | id: prep 20 | run: | 21 | DOCKER_IMAGE=${GITHUB_REPOSITORY/docker-/} 22 | set -x 23 | if [[ $GITHUB_REF == refs/heads/* ]]; then 24 | if [[ $GITHUB_REF == refs/heads/*/* ]] ; then 25 | BRANCH="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed "s|refs/heads/||g" | sed "s|/|-|g")" 26 | else 27 | BRANCH=${GITHUB_REF#refs/heads/} 28 | fi 29 | 30 | case ${BRANCH} in 31 | "main" | "master" ) 32 | BRANCHTAG="${DOCKER_IMAGE}:latest" 33 | ;; 34 | "develop" ) 35 | BRANCHTAG="${DOCKER_IMAGE}:develop" 36 | ;; 37 | * ) 38 | if [ -n "${{ secrets.LATEST }}" ] ; then 39 | if [ "${BRANCHTAG}" = "${{ secrets.LATEST }}" ]; then 40 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest,${DOCKER_IMAGE}:latest" 41 | else 42 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" 43 | fi 44 | else 45 | BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" 46 | fi 47 | ;; 48 | esac 49 | fi 50 | 51 | 52 | if [[ $GITHUB_REF == refs/tags/* ]]; then 53 | GITTAG="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed 's|refs/tags/||g')" 54 | fi 55 | 56 | if [ -n "${BRANCHTAG}" ] && [ -n "${GITTAG}" ]; then 57 | TAGS=${BRANCHTAG},${GITTAG} 58 | else 59 | TAGS="${BRANCHTAG}${GITTAG}" 60 | fi 61 | 62 | echo ::set-output name=tags::${TAGS} 63 | echo ::set-output name=docker_image::${DOCKER_IMAGE} 64 | 65 | - name: Set up QEMU 66 | uses: docker/setup-qemu-action@v1 67 | with: 68 | platforms: all 69 | 70 | - name: Set up Docker Buildx 71 | id: buildx 72 | uses: docker/setup-buildx-action@v1 73 | 74 | - name: Login to DockerHub 75 | if: github.event_name != 'pull_request' 76 | uses: docker/login-action@v1 77 | with: 78 | username: ${{ secrets.DOCKER_USERNAME }} 79 | password: ${{ secrets.DOCKER_PASSWORD }} 80 | 81 | - name: Label 82 | id: Label 83 | run: | 84 | if [ -f "Dockerfile" ] ; then 85 | sed -i "/FROM .*/a LABEL tiredofit.image.git_repository=\"https://github.com/${GITHUB_REPOSITORY}\"" Dockerfile 86 | sed -i "/FROM .*/a LABEL tiredofit.image.git_commit=\"${GITHUB_SHA}\"" Dockerfile 87 | sed -i "/FROM .*/a LABEL tiredofit.image.git_committed_by=\"${GITHUB_ACTOR}\"" Dockerfile 88 | sed -i "/FROM .*/a LABEL tiredofit.image_build_date=\"$(date +'%Y-%m-%d %H:%M:%S')\"" Dockerfile 89 | if [ -f "CHANGELOG.md" ] ; then 90 | sed -i "/FROM .*/a LABEL tiredofit.image.git_changelog_version=\"$(head -n1 ./CHANGELOG.md | awk '{print $2}')\"" Dockerfile 91 | mkdir -p install/assets/.changelogs ; cp CHANGELOG.md install/assets/.changelogs/${GITHUB_REPOSITORY/\//_}.md 92 | fi 93 | 94 | if [[ $GITHUB_REF == refs/tags/* ]]; then 95 | sed -i "/FROM .*/a LABEL tiredofit.image.git_tag=\"${GITHUB_REF#refs/tags/v}\"" Dockerfile 96 | fi 97 | 98 | if [[ $GITHUB_REF == refs/heads/* ]]; then 99 | sed -i "/FROM .*/a LABEL tiredofit.image.git_branch=\"${GITHUB_REF#refs/heads/}\"" Dockerfile 100 | fi 101 | fi 102 | 103 | - name: Build 104 | uses: docker/build-push-action@v2 105 | with: 106 | builder: ${{ steps.buildx.outputs.name }} 107 | context: . 108 | file: ./Dockerfile 109 | platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 110 | push: true 111 | tags: ${{ steps.prep.outputs.tags }} 112 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # github.com/tiredofit/docker-nextcloud 2 | 3 | [![GitHub release](https://img.shields.io/github/v/tag/tiredofit/docker-nextcloud?style=flat-square)](https://github.com/tiredofit/docker-nextcloud/releases/latest) 4 | [![Build Status](https://img.shields.io/github/workflow/status/tiredofit/docker-nextcloud/build?style=flat-square)](https://github.com/tiredofit/docker-nextcloud/actions?query=workflow%3Abuild) 5 | [![Docker Stars](https://img.shields.io/docker/stars/tiredofit/nextcloud.svg?style=flat-square&logo=docker)](https://hub.docker.com/r/tiredofit/nextcloud/) 6 | [![Docker Pulls](https://img.shields.io/docker/pulls/tiredofit/nextcloud.svg?style=flat-square&logo=docker)](https://hub.docker.com/r/tiredofit/nextcloud/) 7 | [![Become a sponsor](https://img.shields.io/badge/sponsor-tiredofit-181717.svg?logo=github&style=flat-square)](https://github.com/sponsors/tiredofit) 8 | [![Paypal Donate](https://img.shields.io/badge/donate-paypal-00457c.svg?logo=paypal&style=flat-square)](https://www.paypal.me/tiredofit) 9 | ## About 10 | 11 | This will build a Dockerfile for [Nextcloud](https://nextcloud.com) - a web based groupware solution. 12 | 13 | * Includes fail2ban for bad authentication blocking 14 | * Includes Nextcloud Hi Performance Files Backend 15 | 16 | ## Maintainer 17 | 18 | - [Dave Conroy][https://github.com/tiredofit] 19 | 20 | ## Table of Contents 21 | 22 | - [About](#about) 23 | - [Maintainer](#maintainer) 24 | - [Table of Contents](#table-of-contents) 25 | - [Installation](#installation) 26 | - [Build from Source](#build-from-source) 27 | - [Prebuilt Images](#prebuilt-images) 28 | - [Multi Architecture](#multi-architecture) 29 | - [Configuration](#configuration) 30 | - [Quick Start](#quick-start) 31 | - [Persistent Storage](#persistent-storage) 32 | - [Base Images used](#base-images-used) 33 | - [Networking](#networking) 34 | - [Upgrading from the 2.x Series](#upgrading-from-the-2x-series) 35 | - [Maintenance](#maintenance) 36 | - [Shell Access](#shell-access) 37 | - [Support](#support) 38 | - [Usage](#usage) 39 | - [Bugfixes](#bugfixes) 40 | - [Feature Requests](#feature-requests) 41 | - [Updates](#updates) 42 | - [License](#license) 43 | - [References](#references) 44 | 45 | # Prerequisites and Assumptions 46 | * Assumes you are using some sort of SSL terminating reverse proxy such as: 47 | * [Traefik](https://github.com/tiredofit/docker-traefik) 48 | * [Nginx](https://github.com/jc21/nginx-proxy-manager) 49 | * [Caddy](https://github.com/caddyserver/caddy) 50 | * 51 | ## Installation 52 | 53 | ### Build from Source 54 | Clone this repository and build the image with `docker build (imagename) .` 55 | ### Prebuilt Images 56 | Builds of the image are available on [Docker Hub](https://hub.docker.com/r/tiredofit/nextcloud) and is the recommended method of installation. 57 | 58 | The following image tags are available along with their tagged release based on what's written in the [Changelog](CHANGELOG.md): 59 | 60 | | Version | Container OS | Tag | 61 | | ------- | ------------ | ------------ | 62 | | 23 | Alpine | `:23-latest` | 63 | | 22 | Alpine | `:22-latest` | 64 | | 21 | Alpine | `:21-latest` | 65 | 66 | #### Multi Architecture 67 | Images are built primarily for `amd64` architecture, and may also include builds for `arm/v6`, `arm/v7`, `arm64` and others. These variants are all unsupported. Consider [sponsoring](https://github.com/sponsors/tiredofit) my work so that I can work with various hardware. To see if this image supports multiple architecures, type `docker manifest (image):(tag)` 68 | 69 | ## Configuration 70 | 71 | ### Quick Start 72 | 73 | * The quickest way to get started is using [docker-compose](https://docs.docker.com/compose/). See the examples folder for a working [docker-compose.yml](examples/docker-compose.yml) that can be modified for development or production use. 74 | 75 | * Set various [environment variables](#environment-variables) to understand the capabilities of this image. 76 | * Map [persistent storage](#data-volumes) for access to configuration and data files for backup. 77 | - Make [networking ports](#networking) available for public access if necessary 78 | 79 | **The first boot can take from 2 minutes - 5 minutes depending on your CPU to setup the proper schemas.** 80 | 81 | ### Persistent Storage 82 | 83 | The following directories are used for configuration and can be mapped for persistent storage. 84 | 85 | *Upgrading from an earlier version of this image running Nextcloud 20 or earlier? See [Upgrading from the 2.x Series](#upgrading-from-the-2x-series)* 86 | 87 | | Directory | Description | 88 | | ----------------------- | ---------------------------------------- | 89 | | `/data/userdata` | Nextcloud Data | 90 | | `/www/nextcloud/config` | Nextcloud Configuration Directory | 91 | | `/data/apps` | Custom Apps downloaded from Plugin Store | 92 | | `/data/themes` | Custom Themes Directory | 93 | | `/data/cache` | Cache Directory | 94 | | `/data/tmp` | Temporary Directory | 95 | | `/data/templates/` | Templates Directory | 96 | | `/www/logs` | Nginx / php-fpm / Nextcloud logfiles | 97 | 98 | #### Base Images used 99 | 100 | This image relies on an [Alpine Linux](https://hub.docker.com/r/tiredofit/alpine) base image that relies on an [init system](https://github.com/just-containers/s6-overlay) for added capabilities. Outgoing SMTP capabilities are handlded via `msmtp`. Individual container performance monitoring is performed by [zabbix-agent](https://zabbix.org). Additional tools include: `bash`,`curl`,`less`,`logrotate`,`nano`,`vim`. 101 | 102 | Be sure to view the following repositories to understand all the customizable options: 103 | 104 | | Image | Description | 105 | | ------------------------------------------------------------- | -------------------------------------- | 106 | | [OS Base](https://github.com/tiredofit/docker-alpine/) | Customized Image based on Alpine Linux | 107 | | [Nginx](https://github.com/tiredofit/docker-nginx/) | Nginx webserver | 108 | | [PHP-FPM](https://github.com/tiredofit/docker-nginx-php-fpm/) | PHP Interpreter | 109 | 110 | If you there are features that you wish to override based on the defaults and for some reason the environment variables are not working, create a file called `custom.config.php` in your `data/config` directory 111 | 112 | | Parameter | Description | Default | 113 | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------- | --------- | 114 | | `ADMIN_USER` | Admin user e.g. `admin` | | 115 | | `ADMIN_PASS` | Admin pass e.g. `password` | | 116 | | `DOMAIN` | The Domain that this is configured for e.g. 'example.org' | | 117 | | `DB_TYPE` | Set the DB_TYPE - e.g. `mysql`, `postgres`, `sqlite3` | `sqlite3` | 118 | | `DB_HOST` | Hostname of DB Server e.g. `nextcloud-db` | | 119 | | `DB_NAME` | Database name e.g. `nextcloud` | | 120 | | `DB_PORT` | Database port e.g. `3306` | | 121 | | `DB_USER` | Username for Database e.g. `nextcloud` | | 122 | | `DB_PASS` | Password for Database e.g. `password` | | 123 | | `IFRAME_DOMAINS` | Comma seperated value of domains/hostnames you want to allow loading the site via an IFrame e.g. `site.example.com` | | 124 | | `MONITORING_APPLICATION_TOKEN` | Monitoring Application Token if 'serverinfo' application installed | | 125 | 126 | This image automatically configures nextcloud with the following options as defined in [config.sample.php](https://github.com/nextcloud/server/blob/master/config/config.sample.php). 127 | 128 | | Variable | Description | Nextcloud Attribute | Default | 129 | | ---------------------------------- | --------------------------------------------------------- | ------------------------------------------- | -------------------------------- | 130 | | `ANIMATED_GIFS_MAX_FILESIZE` | Max file size for Animated Gifs | `max_filesize_animated_gifs_public_sharing` | `10` | 131 | | `CACHE_DIRECTORY` | Cache Directory (leave blank for default) | | `` | 132 | | `CIPHER` | Encryption Cipher | `cipher` | `AES-256-CFB` | 133 | | `DATA_DIRECTORY` | Data Directory | | `${NGINX_WEBROOT}/data` | 134 | | `DEFAULT_APPLICATION` | Default Application users see | `defaultapp` | `files` | 135 | | `DEFAULT_LANGUAGE` | Default Language to Install | `default_language` | `en` | 136 | | `DEFAULT_LOCALE` | Default Locale | `default_locale` | `en_US` | 137 | | `ENABLE_APP_CODE_CHECKER` | Check for signatures on all code | `appcodechecker` | `TRUE` | 138 | | `ENABLE_APP_STORE` | Enable App Store | `appstoreenabled` | `TRUE` | 139 | | `ENABLE_BRUTEFORCE_PROTECTION` | Enable Brute Force Protection | `auth.bruteforce.protection.enabled` | `TRUE` | 140 | | `ENABLE_CHECK_WELLKNOWN` | Enable .wellknown check in admin | | `TRUE` | 141 | | `ENABLE_DISPLAY_NAME_CHANGE` | Allow user to change name | `allow_user_to_change_display_name` | `TRUE` | 142 | | `ENABLE_FILESYSTEM_CHECK_CHANGES` | Check changes on Filesystem in Background | `filesystem_check_changes` | `FALSE` | 143 | | `ENABLE_FILE_LOCKING` | Enable File Locking | `filelocking.enabled` | `TRUE` | 144 | | `ENABLE_KNOWLEDGE_BASE` | Enable Help Menu | `knowledgebaseenabled` | `TRUE` | 145 | | `ENABLE_LOGIN_FORM_AUTOCOMPLETE` | Allow Autocomplete on Login Pages | `login_form_autocomplete` | `TRUE` | 146 | | `ENABLE_LOG_QUERY` | Enable Logging DB Queries | `log_query` | `FALSE` | 147 | | `ENABLE_MYSQL_UTF8MB4` | Enable 4 byte strings for MariaDB | `mysql.utf8mb4` | `TRUE` | 148 | | `ENABLE_PARTFILE_UPLOADS_STORAGE` | Enable uploading .part files in same location | | `TRUE` | 149 | | `ENABLE_PREVIEWS` | Enable Document Previews | `enable_previews` | `TRUE` | 150 | | `ENABLE_SESSION_KEEPALIVE` | Enable Keepalive sessions | `session_keepalive` | `TRUE` | 151 | | `ENABLE_SIGN_UP` | Allow Signups to Instance | `simpleSignUpLink.shown` | `TRUE` | 152 | | `ENABLE_SMTP_AUTHENTICATION` | Enable SMTP Authentication | `mail_smtpauth` | `FALSE` | 153 | | `ENABLE_TOKEN_AUTH_ENFORCED` | Enforce logging in with Tokens for Clients | `token_auth_enforced` | `FALSE` | 154 | | `FILE_LOCKING_DEBUG` | Debug File Locking | `filelocking.debug` | `FALSE` | 155 | | `FORCE_LANGUAGE` | Force Language | `force_language` | `en` | 156 | | `FORCE_LOCALE` | Force Locale | `force_locale` | `en_US` | 157 | | `HASHING_COST` | Performance Cost for Hashing | `hashingCost` | `10` | 158 | | `LDAP_CLEANUP_INTERVAL` | How many minutes to cleanup LDAP users | `ldapUserCleanupInterval` | `51` | 159 | | `LOG_DATE_FORMAT` | Format for Date and Time in logs | `logdateformat` | `Y-m-d H:i:s` | 160 | | `LOG_DIR` | Log Directory | `logfile` | `/www/logs/nextcloud` | 161 | | `LOG_FILE_AUDIT` | Audit Log file | `audit.log` | | 162 | | `LOG_FILE_FLOW` | Workflow Log File | `flow.log` | | 163 | | `LOG_LEVEL` | Log Level | `loglevel` | `2` | 164 | | `LOG_TIMEZONE` | Timezone for Logfile | `logtimezone` | Container Timezone | 165 | | `OVERWRITE_HOST` | Override the hostname for URLs | `overwritehost` | `` | 166 | | `OVERWRITE_PROTOCOL` | Override the Protocol if behind proxy | `overwriteprotocol` | `` | 167 | | `PREVIEW_MAX_X` | Maximum Pixels for Previews (X) | `preview_max_x` | `200` | 168 | | `PREVIEW_MAX_Y` | Maximum Pixels for Previews (Y) | `preview_max_y` | `200` | 169 | | `SHARE_FOLDER` | Change root path of all shares to users | | `/` | 170 | | `SHARING_ENABLE_ACCEPT` | Enable Sharing Acceptance features | | `FALSE` | 171 | | `SHARING_ENABLE_MAIL` | Enable Sharing Mail Notification | | `TRUE` | 172 | | `SHARING_FORCE_ACCEPT` | Force Sharing Acceptance features | | `FALSE` | 173 | | `SHARING_MAX_AUTOCOMPLETE_RESULTS` | Maximum results returned when searching | `sharing.maxAutocompleteResults` | `0` | 174 | | `SHARING_MIN_SEARCHSTRING_LENGTH` | How many characters to type before searching | `sharing.minSearchStringLength` | `2` | 175 | | `SKELETON_DIRECTORY` | What folder is copied to new users folders on first login | `skeletondirectory` | `${NGINX_WEBROOT}/core/skeleton` | 176 | | `SMTP_AUTHENTICATION_TYPE` | Type of SMTP Authentication | `mail_smtpauthtype` | `NONE` | 177 | | `SMTP_DEBUG` | Debug SMTP activities | `mail_smtpdebug` | `FALSE` | 178 | | `SMTP_DOMAIN` | Email Domain for Outbound mail | `mail_domain` | `example.org` | 179 | | `SMTP_FROM` | Account name for Outbound Email, SMTP_DOMAIN will be added | `mail_from_address` | `noreply` | 180 | | `SMTP_HOST` | Remote SMTP Host | `mail_smtphost` | `postfix_relay` | 181 | | `SMTP_PASS` | SMTP Password | `mail_smtppassword` | `` | 182 | | `SMTP_PORT` | SMTP Port | `mail_smtpport` | `25` | 183 | | `SMTP_SECURE` | `tls`,`ssl` if SMTP is TLS/SSL encrypted | `mail_smtpsecure` | `FALSE` | 184 | | `SMTP_SEND_PLAINTEXT_ONLY` | Send Plaintext Email Only | `mail_send_plaintext_only` | `FALSE` | 185 | | `SMTP_TIMEOUT` | Timeout for SMTP connections | `mail_smtptimeout` | `10` | 186 | | `SMTP_USER` | SMTP Username (user part) | `mail_smtpname` | `` | 187 | | `SORT_GROUPS_BY_NAME` | Sort groups by name as opposed to most users | `sort_groups_by_name` | `FALSE` | 188 | | `TRASHBIN_RETENTION` | How to deal with users trashbins | `trashbin_retention_obligation` | `auto` | 189 | | `VERSIONS_RETENTION` | How to deal with File Versions | `versions_retention_obligation` | `auto` | 190 | 191 | ### Networking 192 | 193 | The following ports are exposed. 194 | 195 | | Port | Description | 196 | | ---- | ----------- | 197 | | `80` | HTTP | 198 | 199 | ## Upgrading from the 2.x Series 200 | - If you are upgrading from the 2.x series of images (Nextcloud 20 and below) please note that the following environment variables have been introduced 201 | 202 | - `TEMP_DIRECTORY` - For holding temporary files 203 | - `CACHE_DIRECTORY` - Moving the "Cache" per user out of their user data folder for those using S3 Backend for performance reasons 204 | - `APP_DIRECTORY` - Applications downloaded from the App Store 205 | - `DATA_DIRECTORY` - Users Data Directory 206 | 207 | - You will also need to export new volumes if you are using the new defaults to these paths above: 208 | 209 | | Environment Variable | 2.x Images volume mapping | New Image mapping | 210 | | -------------------- | -------------------------------- | -------------------------- | 211 | | `APP_DIRECTORY` | `/www/nextcloud/custom-apps` | `/data/apps` | 212 | | `CACHE_DIRECTORY` | unset | `/data/cache` | 213 | | `DATA_DIRECTORY` | `/www/nextcloud/data` | `/data/userdata` | 214 | | `SKELETON_DIRECTORY` | `${NGINX_WEBROOT}/core/skeleton` | `/data/templates/skeleton` | 215 | | `TEMP_DIRECTORY` | unset | `/data/tmp` | 216 | 217 | - Additionally you will need to make a change to the database to support the change of the data location as listed [here](https://docs.nextcloud.com/server/21/admin_manual/issues/general_troubleshooting.html#troubleshooting-data-directory). 218 | 219 | * * * 220 | ## Maintenance 221 | 222 | ### Shell Access 223 | 224 | For debugging and maintenance purposes you may want access the containers shell. 225 | 226 | ``bash 227 | docker exec -it (whatever your container name is) bash 228 | `` 229 | ## Support 230 | 231 | These images were built to serve a specific need in a production environment and gradually have had more functionality added based on requests from the community. 232 | ### Usage 233 | - The [Discussions board](../../discussions) is a great place for working with the community on tips and tricks of using this image. 234 | - Consider [sponsoring me](https://github.com/sponsors/tiredofit) personalized support. 235 | ### Bugfixes 236 | - Please, submit a [Bug Report](issues/new) if something isn't working as expected. I'll do my best to issue a fix in short order. 237 | 238 | ### Feature Requests 239 | - Feel free to submit a feature request, however there is no guarantee that it will be added, or at what timeline. 240 | - Consider [sponsoring me](https://github.com/sponsors/tiredofit) regarding development of features. 241 | 242 | ### Updates 243 | - Best effort to track upstream changes, More priority if I am actively using the image in a production environment. 244 | - Consider [sponsoring me](https://github.com/sponsors/tiredofit) for up to date releases. 245 | 246 | ## License 247 | MIT. See [LICENSE](LICENSE) for more details. 248 | 249 | 250 | ## References 251 | 252 | * https://nextcloud.com 253 | --------------------------------------------------------------------------------