Nextcloud 25 + Docker + Postgres + Caddy Reverse Proxy
sudo docker network create --driver=bridge --subnet=10.10.13.0/24 --gateway=10.10.13.1 nextcloud_net
Create directory structure
$ mkdir nextcloud
$ cd nextcloud
$ mkdir {nxtcloud_app, nxtcloud_data, nxtcloud_db}
$ touch db.env
cloud.YOURDOMAIN.net {
reverse_proxy 10.10.13.2:80
rewrite /.well-known/carddav /remote.php/dav
rewrite /.well-known/caldav /remote.php/dav
header /* Strict-Transport-Security max-age=31536000
}
version : " 3"
services :
nextcloud :
hostname : cloud.YOURDOMAIN.net
image : nextcloud:25
restart : unless-stopped
networks :
default :
ipv4_address : 10.10.13.2
environment :
- POSTGRES_HOST=db
- OVERWRITEPROTOCOL=https
- REDIS_HOST=redis
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.YOURDOMAIN.net
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=someNicePw
- NEXTCLOUD_HOSTNAME=cloud.YOURDOMAIN.net
- TRUSTED_PROXIES=YOUR-HOST-SERVER-IP
env_file :
- db.env
depends_on :
- db
- redis
volumes :
- ./nxtcloud_app:/var/www/html
- ./nxtcloud_data:/var/www/html/data
redis :
image : redis:alpine
networks :
default :
ipv4_address : 10.10.13.3
restart : always
db :
image : postgres:alpine
networks :
default :
ipv4_address : 10.10.13.4
restart : unless-stopped
# environment:
# - MYSQL_DATABASE=nextcloud
# - MYSQL_USER=nextcloudsuperuser
# - MYSQL_PASSWORD=somesecurepw
# - MYSQL_ROOT_PASSWORD=someevenmoresecurepw
volumes :
- ./nxtcloud_db:/var/lib/postgresql/data
env_file :
- db.env
cron :
image : nextcloud:25
restart : always
networks :
default :
ipv4_address : 10.10.13.5
volumes :
- ./nxtcloud_app:/var/www/html
- ./nxtcloud_data:/var/www/html/data
entrypoint : /cron.sh
depends_on :
- db
- redis
volumes :
nxtcloud_db :
nxtcloud_app :
nxtcloud_data :
networks :
default :
name : nextcloud_net
external : true
POSTGRES_PASSWORD=SOMESECUREPASSWORD
POSTGRES_DB=nextcloud
POSTGRES_USER=nextclouduser