Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save 3vincent/6fb363c5908fdae2b1afba585c02d9df to your computer and use it in GitHub Desktop.
Save 3vincent/6fb363c5908fdae2b1afba585c02d9df to your computer and use it in GitHub Desktop.

Nextcloud 25 + Docker + Postgres + Caddy Reverse Proxy

Create Docker network

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

Caddyfile

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
}

docker-compose.yml

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

db.env

POSTGRES_PASSWORD=SOMESECUREPASSWORD
POSTGRES_DB=nextcloud
POSTGRES_USER=nextclouduser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment