diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..b536100 --- /dev/null +++ b/.env.sample @@ -0,0 +1,10 @@ +WIKITAG=26 +DBTAG=10.6 +OFFICETAG=6.4 + +BASEDIR= +INTRANET= + +DB_NAME= +DB_USER= +DB_PASS= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf073d9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +files/ +.env \ No newline at end of file diff --git a/README.md b/README.md index 05bb78f..a06577b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,68 @@ -# compose-nextcloud +# Basic Nextcloud with MariaDB and Onlyoffice docker-compose config +* can be run on single node setup or in swarm +## howto +### single node +#### start container +```bash +docker compose up -d +``` + +#### stop container (and remove) +```bash +docker compose down +``` + +#### view logs +```bash +docker compose logs -f +``` + +#### reload config +```bash +docker compose restart +``` + +### swarm +#### start aka deploy +hint: drone fails to start until git auth source is created and set in vars +```bash +docker stack deploy -c docker-compose.yml cloud +``` + +#### stop container aka stack +```bash +docker stack rm cloud +``` + +#### view logs +```bash +docker service logs cloud_cloud -f +docker service logs cloud_db -f +docker service logs cloud_office -f +``` + +#### reload config (no downtime if replica 2 or more) +```bash +docker service update cloud_cloud +docker service update cloud_db +docker service update cloud_office +``` + +## example caddy config +``` +cloud.example.com { + reverse_proxy cloud:80 + encode gzip + + # Service discovery via well-known + redir /.well-known/carddav /remote.php/carddav 301 + redir /.well-known/caldav /remote.php/caldav 301 +} +office.example.com { + reverse_proxy office:80 +} +``` + +## config onlyoffice in nextcloud +comming soon \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..37b0c18 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,81 @@ +# https://docs.docker.com/compose/compose-file/compose-file-v3/ +--- +version: "3.9" +services: + cloud: + image: nextcloud:${CLOUDTAG:-latest} + container_name: cloud + restart: unless-stopped + depends_on: + - db + ports: + - 80:80 + deploy: + replicas: 1 + placement: + max_replicas_per_node: 1 + update_config: + parallelism: 1 + delay: 10s + volumes: + - ${BASEDIR:-.}/files/config/:/var/www/html/config/ + - ${BASEDIR:-.}/files/apps/:/var/www/html/custom_apps/ + - ${BASEDIR:-.}/files/data/:/var/www/html/data/ + - ${BASEDIR:-.}/files/themes/:/var/www/html/themes/ + - ${BASEDIR:-.}/files/skeleton/:/var/www/html/core/skeleton/ + - /etc/localtime:/etc/localtime:ro + environment: + - MYSQL_RANDOM_ROOT_PASSWORD=yes + - MYSQL_DATABASE=${DB_NAME:-nextcloud} + - MYSQL_USER=${DB_USER:-nextcloud} + - MYSQL_PASSWORD=${DB_PASS:-nextcloudpasswd} + networks: + - backend + - cloudnet + + db: + image: mariadb:${DBTAG:-latest} + container_name: wikidb + restart: unless-stopped + deploy: + replicas: 1 + placement: + max_replicas_per_node: 1 + update_config: + parallelism: 1 + delay: 10s + volumes: + - ${BASEDIR:-.}/files/clouddb/:/var/lib/mysql/ + environment: + - MARIADB_RANDOM_ROOT_PASSWORD=yes + - MARIADB_DATABASE=${DB_NAME:-nextcloud} + - MARIADB_USER=${DB_USER:-nextcloud} + - MARIADB_PASSWORD=${DB_PASS:-nextcloudpasswd} + networks: + - cloudnet + + office: + image: onlyoffice/documentserver:${OFFICETAG:-latest} + container_name: office + restart: unless-stopped + ports: + - 80:80 + deploy: + replicas: 1 + placement: + max_replicas_per_node: 1 + update_config: + parallelism: 1 + delay: 10s + volumes: + - ${BASEDIR:-.}/files/officedata:/var/www/onlyoffice/Data + - ${BASEDIR:-.}/files/officedb:/var/lib/postgresql + # - ${BASEDIR:-.}/files/officelog:/var/log/onlyoffice + networks: + - backend + - cloudnet + +networks: + backend: + name: ${INTRANET:-backend} + wikinet: \ No newline at end of file