From 101f4aa7e392b84a283a6785f2f9b8df0aa7790d Mon Sep 17 00:00:00 2001 From: Malanik Jan Date: Sun, 12 May 2019 12:15:15 +0200 Subject: [PATCH] POC: Introduce Nextcloud based on Nginx web server. UPDATE: - stack.yml contains FPM & Mariadb containers, updated volumes, networking and hostnames for container TODO: - update config.ini for trusted proxies support This PR introduce POC of Nextcloud based on Nginx web server with php-fpm in separated container. Basic installation with SQLite and few operations in web gui were tested. Nginx dockerfile is generated from Dockerfile-nginx.template - FROM string has hardcoded variant - apache - There is no upstream PHP image with Nginx, due this generate-stackbrew-library is not able to identify parent correctly New files were introduced in image: - Dockerfile-nginx.template - nginx-foreground + simulates behavior of apache2-foreground cmd - 16.0/nginx/Dockerfile + generated from template Dockerfile-nginx.template - nextcloud.confx + Nginx vhost configuration - start_net.sh (temporary) + Helper script to create user-defined network for Docker + '--link' option for docker create is obsolete and we need communication between fpm and nginx container - start_container.sh (temporary) + Helper script to handle containers - Dockerfile + /Dockerfile for verification purposes Updated files: - set -x added to all shell scripts for easier troubleshooting (temporary) - update.sh + New variant introduced + Number of builded variant is limited for simplified CI. - .travis.yml (temporary) + Image push to registry for testing purposes - docker-entrypoint.sh + Recognizes new argument for entrypoint - nginx-foreground Be careful during review, github recognizes removed files for 15.0 release as renamed to 16.0/nginx variant Motivation/Usecase: - I have openvz based VPS where only old Docker 1.10 is supported. - Apache(in nextcloud container) in combination Nginx as a reverse proxy for multiple vhosts doesn't work correctly Image pull link: docker pull 1john2ci/nextcloud:apache-20190509 docker pull 1john2ci/nextcloud:fpm-20190509 Travis CI test: https://travis-ci.org/1john2/docker/builds/530329740 Deployment notes: - Clone source code - Create user-defined network for Docker - Start fpm container - Start nginx container --- .travis.yml | 15 +++--- 16.0/apache/Dockerfile | 1 - 16.0/fpm/Dockerfile | 1 - 16.0/nginx/nextcloud.conf | 2 +- Dockerfile-debian.template | 1 - nextcloud.conf | 2 +- stack.yml | 106 +++++++++++++++++++++++++------------ 7 files changed, 81 insertions(+), 47 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9f8a0661..a30333a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ services: docker branches: only: - master + - Nginx install: - git clone https://github.com/docker-library/official-images.git ~/official-images @@ -30,16 +31,16 @@ after_script: # ## # For testing purposes only # ## - - echo "1john2_password" | docker login -u "1john2ci" --password-stdin + - echo "${DOCKER_PASSWORD}" | docker login -u "1john2" --password-stdin - - docker tag nextcloud:16.0-apache 1john2ci/nextcloud:16.0-apache - - docker push 1john2ci/nextcloud:16.0-apache + - docker tag nextcloud:16.0-apache 1john2/nextcloud:16.0-apache + - docker push 1john2/nextcloud:16.0-apache - - docker tag nextcloud:16.0-nginx 1john2ci/nextcloud:16.0-nginx - - docker push 1john2ci/nextcloud:16.0-nginx + - docker tag nextcloud:16.0-nginx 1john2/nextcloud:16.0-nginx + - docker push 1john2/nextcloud:16.0-nginx - - docker tag nextcloud:16.0-fpm-full 1john2ci/nextcloud:16.0-fpm-full - - docker push 1john2ci/nextcloud:16.0-fpm + - docker tag nextcloud:16.0-fpm-full 1john2/nextcloud:16.0-fpm-full + - docker push 1john2/nextcloud:16.0-fpm-full jobs: include: diff --git a/16.0/apache/Dockerfile b/16.0/apache/Dockerfile index 6b33ef67..00c03e15 100644 --- a/16.0/apache/Dockerfile +++ b/16.0/apache/Dockerfile @@ -160,6 +160,5 @@ RUN set -ex; \ COPY *.sh upgrade.exclude / COPY config/* /usr/src/nextcloud/config/ - ENTRYPOINT ["/entrypoint.sh"] CMD ["apache2-foreground"] diff --git a/16.0/fpm/Dockerfile b/16.0/fpm/Dockerfile index 6780dafe..b1d6702d 100644 --- a/16.0/fpm/Dockerfile +++ b/16.0/fpm/Dockerfile @@ -152,6 +152,5 @@ RUN set -ex; \ COPY *.sh upgrade.exclude / COPY config/* /usr/src/nextcloud/config/ - ENTRYPOINT ["/entrypoint.sh"] CMD ["php-fpm"] diff --git a/16.0/nginx/nextcloud.conf b/16.0/nginx/nextcloud.conf index 38b27cea..a5fe8325 100644 --- a/16.0/nginx/nextcloud.conf +++ b/16.0/nginx/nextcloud.conf @@ -8,7 +8,7 @@ # ## upstream php-handler { - server fpm-ncd:9000; + server nextcloud-fpm:9000; } server { diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template index a5347b27..b813110f 100644 --- a/Dockerfile-debian.template +++ b/Dockerfile-debian.template @@ -151,6 +151,5 @@ RUN set -ex; \ COPY *.sh upgrade.exclude / COPY config/* /usr/src/nextcloud/config/ - ENTRYPOINT ["/entrypoint.sh"] CMD ["%%CMD%%"] diff --git a/nextcloud.conf b/nextcloud.conf index 38b27cea..a5fe8325 100644 --- a/nextcloud.conf +++ b/nextcloud.conf @@ -8,7 +8,7 @@ # ## upstream php-handler { - server fpm-ncd:9000; + server nextcloud-fpm:9000; } server { diff --git a/stack.yml b/stack.yml index eb6f659c..66a6c88d 100644 --- a/stack.yml +++ b/stack.yml @@ -1,54 +1,90 @@ -version: '3.2' - +version: '2.0' +# ## +# Configure: +# export COMPOSE_HTTP_TIMEOUT=1000 +# If you experience timeouts in UnixHTTPConnectionPool function during parallel execution +# This can happen in shared env with high load - VPS +# ## services: - db: - name: mariadb - hostname: db - image: mariadb - tag: 10.4.4-bionic + database: + container_name: database + hostname: database + image: mariadb:10.4.4-bionic restart: always volumes: - - db:/var/lib/mysql + - /srv/mariadb:/var/lib/mysql:rprivate + networks: + nextcloud: environment: - MYSQL_ROOT_PASSWORD=mariadb_admin - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud_admin - MYSQL_PASSWORD=nextcloud_admin - fpm: - name: fpm - hostname: fpm - image: 1john2ci/nextcloud - tag: 16.0-fpm-full + nextcloud-fpm: + container_name: nextcloud-fpm + hostname: nextcloud-fpm + image: 1john2/nextcloud:16.0-fpm-full restart: always - volumes: - - nextcloud:/var/www/html - app: - name: nextcloud - hostname: nextcloud - image: 1john2ci/nextcloud - tag: 16.0-nginx - restart: always - ports: - - 127.0.0.1:8080:80 - volumes: - - nextcloud:/var/www/html environment: - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud_admin - MYSQL_PASSWORD=nextcloud_admin - - MYSQL_HOST=db - depends_on: - - db - - fpm - cron: - image: nextcloud - restart: always + - MYSQL_HOST=database + - NEXTCLOUD_ADMIN_USER=admin + - NEXTCLOUD_ADMIN_PASSWORD=admin + - NEXTCLOUD_TRUSTED_DOMAINS=data.malanik.guru + networks: + nextcloud: volumes: - - nextcloud:/var/www/html - entrypoint: /cron.sh + - /srv/nextcloud:/var/www/html:rprivate depends_on: - - db + - database + nextcloud: + container_name: nextcloud + hostname: nextcloud + image: 1john2/nextcloud:16.0-nginx + restart: always + networks: + nextcloud: + ports: + - 127.0.0.1:8080:80 + volumes: + - /srv/nextcloud:/var/www/html:rprivate + environment: + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud_admin + - MYSQL_PASSWORD=nextcloud_admin + - MYSQL_HOST=database + - NEXTCLOUD_ADMIN_USER=admin + - NEXTCLOUD_ADMIN_PASSWORD=admin + - NEXTCLOUD_TRUSTED_DOMAINS=data.malanik.guru + depends_on: + - database + - nextcloud-fpm + + nextcloud-cron: + container_name: nextcloud-cron + hostname: nextcloud-cron + image: 1john2/nextcloud:16.0-nginx + restart: always + networks: + nextcloud: + entrypoint: /cron.sh + volumes: + - /srv/nextcloud:/var/www/html:rprivate + environment: + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud_admin + - MYSQL_PASSWORD=nextcloud_admin + - MYSQL_HOST=database + - NEXTCLOUD_ADMIN_USER=admin + - NEXTCLOUD_ADMIN_PASSWORD=admin + - NEXTCLOUD_TRUSTED_DOMAINS=data.malanik.guru + depends_on: + - database volumes: db: /srv/mariadb nextcloud: /srv/nextcloud +networks: + nextcloud: