diff --git a/.drone.yml b/.drone.yml index 0cdaeed..d50ed61 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,6 +15,8 @@ steps: DOMAIN: collabora.swarm-test.autonomic.zone STACK_NAME: collabora LETS_ENCRYPT_ENV: production + NGINX_CONF_VERSION: v1 + LOOLWSD_XML_VERSION: v1 trigger: branch: - main diff --git a/.env.sample b/.env.sample index f13b81a..c6f4c70 100644 --- a/.env.sample +++ b/.env.sample @@ -1,3 +1,4 @@ TYPE=collabora DOMAIN=collabora.example.com LETS_ENCRYPT_ENV=production +NEXTCLOUD_DOMAIN=nextcloud.example.com diff --git a/abra.sh b/abra.sh index e69de29..0ce53bc 100644 --- a/abra.sh +++ b/abra.sh @@ -0,0 +1,2 @@ +export NGINX_CONF_VERSION=v1 +export LOOLWSD_XML_VERSION=v1 diff --git a/compose.yml b/compose.yml index c877ccb..1840fcf 100644 --- a/compose.yml +++ b/compose.yml @@ -2,21 +2,53 @@ version: "3.8" services: - app: - image: "collabora/code:6.4.8.1" + web: + image: "nginx:1.19.10" + environment: + - DOMAIN=${DOMAIN} + configs: + - source: nginx_conf + target: /etc/nginx/nginx.conf + volumes: + - "public:/var/www/app/public" networks: - proxy + - internal deploy: update_config: failure_action: rollback - order: start-first labels: - "traefik.enable=true" + - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80" - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=9980" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" + app: + image: "collabora/code:6.4.8.1" + configs: + - source: loolwsd_xml + target: /etc/loolwsd/loolwsd.xml + environment: + - DOMAIN=${DOMAIN} + - NEXTCLOUD_DOMAIN=${NEXTCLOUD_DOMAIN} + networks: + - internal + +volumes: + public: + networks: proxy: external: true + internal: + +configs: + nginx_conf: + name: ${STACK_NAME}_nginx_conf_${NGINX_CONF_VERSION} + file: nginx.conf.tmpl + template_driver: golang + loolwsd_xml: + name: ${STACK_NAME}_loolwsd_xml_${LOOLWSD_XML_VERSION} + file: loolwsd.xml.tmpl + template_driver: golang diff --git a/loolwsd.xml.tmpl b/loolwsd.xml.tmpl new file mode 100644 index 0000000..f1360dd --- /dev/null +++ b/loolwsd.xml.tmpl @@ -0,0 +1,185 @@ + + + + + + de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru + + + + + + {{ env "DOMAIN" }} + + + + 1 + + 4 + 5 + + false + 3600 + + + 30 + 300 + false + 0 + 8000 + 0 + 0 + 100 + 100 + + 10000 + 60 + 300 + 3072 + 85 + + + + + 120 + 900 + + + loleaflet.html + + + true + warning + false + + -INFO-WARN + + + /var/log/loolwsd.log + never + timestamp + true + 10 days + 10 + true + false + + + false + 82589933 + + + + false + + + + + + + + false + + + + + + all + any + + + + 192\.168\.[0-9]{1,3}\.[0-9]{1,3} + ::ffff:192\.168\.[0-9]{1,3}\.[0-9]{1,3} + 127\.0\.0\.1 + ::ffff:127\.0\.0\.1 + ::1 + 172\.17\.[0-9]{1,3}\.[0-9]{1,3} + ::ffff:172\.17\.[0-9]{1,3}\.[0-9]{1,3} + + + + + + + false + true + /etc/loolwsd/cert.pem + /etc/loolwsd/key.pem + /etc/loolwsd/ca-chain.cert.pem + + + 1000 + + + + + + + + + true + true + + + + + + + + + true + false + + + + + classic + + + + + + {{ env "NEXTCLOUD_DOMAIN" }} + {{ env "DOMAIN" }} + localhost + 10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} + 172\.1[6789]\.[0-9]{1,3}\.[0-9]{1,3} + 172\.2[0-9]\.[0-9]{1,3}\.[0-9]{1,3} + 172\.3[01]\.[0-9]{1,3}\.[0-9]{1,3} + 192\.168\.[0-9]{1,3}\.[0-9]{1,3} + 192\.168\.1\.1 + 0 + false + + 900 + + + + localhost + + + true + false + + + + + + + + true + + + true + false + + + + + + + + diff --git a/nginx.conf.tmpl b/nginx.conf.tmpl new file mode 100644 index 0000000..545a17a --- /dev/null +++ b/nginx.conf.tmpl @@ -0,0 +1,45 @@ +upstream collabora-upstream { + server app:9980; +} + +server { + listen 80; + server_name {{ env "DOMAIN" }}; + + # static files + location ^~ /loleaflet { + proxy_pass http://collabora-upstream; + proxy_set_header Host $http_host; + } + + # WOPI discovery URL + location ^~ /hosting/discovery { + proxy_pass http://collabora-upstream; + proxy_set_header Host $http_host; + } + + # Main websocket + location ~ /lool/(.*)/ws$ { + proxy_pass http://collabora-upstream; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $http_host; + proxy_read_timeout 36000s; + } + + # Admin Console websocket + location ^~ /lool/adminws { + proxy_buffering off; + proxy_pass http://collabora-upstream; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $http_host; + proxy_read_timeout 36000s; + } + + # download, presentation and image upload + location ~ /lool { + proxy_pass https://collabora-upstream; + proxy_set_header Host $http_host; + } +}