├── .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 | [](https://github.com/tiredofit/docker-nextcloud/releases/latest)
4 | [](https://github.com/tiredofit/docker-nextcloud/actions?query=workflow%3Abuild)
5 | [](https://hub.docker.com/r/tiredofit/nextcloud/)
6 | [](https://hub.docker.com/r/tiredofit/nextcloud/)
7 | [](https://github.com/sponsors/tiredofit)
8 | [](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 |
--------------------------------------------------------------------------------