From aa121ca5698c56aac163f0d33ca73c1f8316f2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien?= Date: Wed, 21 Oct 2020 11:48:51 +0200 Subject: [PATCH] first commit --- .gitignore | 13 ++++ Makefile | 79 +++++++++++++++++++++++++ conf/build/nginx/Dockerfile | 15 +++++ conf/build/nginx/generate-conf.sh | 33 +++++++++++ conf/build/nginx/log_format.conf | 2 + conf/build/nginx/nginx.conf | 40 +++++++++++++ conf/build/node/Dockerfile | 3 + conf/docker-compose.dev.yml | 15 +++++ conf/docker-compose.override.yml.sample | 11 ++++ conf/docker-compose.preprod.yml | 13 ++++ conf/docker-compose.prod.yml | 14 +++++ conf/docker-compose.yml | 20 +++++++ 12 files changed, 258 insertions(+) create mode 100755 .gitignore create mode 100644 Makefile create mode 100644 conf/build/nginx/Dockerfile create mode 100755 conf/build/nginx/generate-conf.sh create mode 100644 conf/build/nginx/log_format.conf create mode 100644 conf/build/nginx/nginx.conf create mode 100644 conf/build/node/Dockerfile create mode 100644 conf/docker-compose.dev.yml create mode 100644 conf/docker-compose.override.yml.sample create mode 100644 conf/docker-compose.preprod.yml create mode 100644 conf/docker-compose.prod.yml create mode 100644 conf/docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..cfdf642 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +.DS_Store +.idea/* +/volume/www/website/.idea/* +*~ +/.vscode +/volume/* + +/volume/www/**/conf/nginx.conf +/backup +/conf/env/*.env +/conf/parameters.yml +/volume/www/website/.idea +/conf/docker-compose.override.yml diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..24ea9e3 --- /dev/null +++ b/Makefile @@ -0,0 +1,79 @@ + +CLIENT=$(shell cat conf/parameters.yml | grep "client:" | awk '{print $$NF}' | sed 's/;$$//') +SRVNAME=$(shell cat conf/parameters.yml | grep "srvname:" | awk '{print $$NF}' | sed 's/;$$//') + + +DOCKERCOMPOSE := $(shell command -v docker-compose 2> /dev/null) +USAGE := Usage: make ENV={prod|preprod|dev} {docker-build|docker-start|docker-stop|docker-restart} + +ifndef DOCKERCOMPOSE +$(error docker-compose is not available) +endif + +ifndef ENV +$(info Environment variable is not set) +$(info $(USAGE)) +$(error Exiting) +endif + +DC_OVERRIDE := $(shell test -e conf/docker-compose.override.yml && echo "--file conf/docker-compose.override.yml") +DC_OVERRIDE_ENV := $(shell test -e conf/docker-compose.$(ENV).yml && echo "--file conf/docker-compose.$(ENV).yml") + +DC=ENV=$(ENV) CLIENT=$(CLIENT) $(DOCKERCOMPOSE) --project-name "$(CLIENT)_$(ENV)" --file conf/docker-compose.yml $(DC_OVERRIDE) $(DC_OVERRIDE_ENV) + +default: + $(info $(USAGE)) + $(error Exiting) + +docker-build: + $(DC) pull + $(DC) build + $(DC) up -d + +docker-start: + $(DC) start + +docker-stop: + $(DC) stop + +docker-down: + $(DC) down + +docker-restart: docker-stop docker-start + +docker-rm: docker-stop + $(DC) rm + +config: + @echo "Configuring docker for environment '$(ENV)'" + + $(eval SERVER_NAME := $(shell cat volume/www/website/conf/nginx-$(ENV).conf | grep server_name | awk '{print $$NF}' | sed 's/;$$//')) + @echo " --> Generating nginx symlink for '$(SERVER_NAME)'" + @docker exec $(CLIENT).nginx.$(ENV) ln -s -f /home/www/website/conf/nginx-$(ENV).conf /home/www/website/conf/nginx.conf + @docker exec $(CLIENT).nginx.$(ENV) ln -s -f /home/www/website/conf/nginx.conf /etc/nginx/sites-enabled/$(SERVER_NAME).conf + + @echo " --> Reloading nginx" + @docker exec $(CLIENT).nginx.$(ENV) nginx -t && docker exec $(CLIENT).nginx.$(ENV) nginx -s reload + +config-folders: + @echo "---Init folders---" + mkdir -p volume/app + +config-default-param: + @echo "---Init default parameters---" + cp conf/parameters.yml.sample conf/parameters.yml + +config-master: config-folders config-default-param + +pull-website: + git -C volume/www/website pull + +config-db-root: + @echo " --> Generating mysql auth file" + @cat conf/env/mysql.env \ + | python -c "import sys; import string; v=sys.stdin.readline().split('MYSQL_ROOT_PASSWORD=')[1]; print(string.Template(open('conf/build/mysql/my.cnf').read()).substitute({'PASSWORD':v}))" \ + | docker exec -i $(CLIENT).mysql.$(ENV) sh -c 'cat > /root/.my.cnf' + +generate-nginx-conf: + @conf/build/nginx/generate-conf.sh $(ENV) $(CLIENT).php.$(ENV) + diff --git a/conf/build/nginx/Dockerfile b/conf/build/nginx/Dockerfile new file mode 100644 index 0000000..7bd41a2 --- /dev/null +++ b/conf/build/nginx/Dockerfile @@ -0,0 +1,15 @@ +FROM nginx + +ENV TERM=xterm + +RUN apt-get clean \ + && apt-get update \ + && apt-get install -y lsof nano less + +RUN rm /etc/nginx/conf.d/default.conf \ + && sed -i 's|include /etc/nginx/conf.d/\*.conf;|include /etc/nginx/conf.d/\*.conf;\ninclude /etc/nginx/sites-enabled/\*.conf;\n|' /etc/nginx/nginx.conf + +COPY log_format.conf /etc/nginx/conf.d/ + +RUN apt-get clean \ + && rm -rf /var/lib/apt/lists/ diff --git a/conf/build/nginx/generate-conf.sh b/conf/build/nginx/generate-conf.sh new file mode 100755 index 0000000..e50081c --- /dev/null +++ b/conf/build/nginx/generate-conf.sh @@ -0,0 +1,33 @@ +#!/bin/bash +env=$1 +srvname=$(cat conf/parameters.yml | grep "srvname:" | awk '{print $NF}' | sed 's/;$//') +upstream=$2 +folderpath='volume/www/website/conf/' +confpath=volume/www/website/conf/nginx-$env.conf +OS="unknown" + +case "$OSTYPE" in + solaris*) OS="SOLARIS" ;; + darwin*) OS="OSX" ;; + linux*) OS="LINUX" ;; + bsd*) OS="BSD" ;; + msys*) OS="WINDOWS" ;; + *) OS="unknown: $OSTYPE" ;; +esac + +echo -e 'Generationg Nginx conf file for \033[0;32m'$srvname'\033[0m ('$env')' +mkdir -p $folderpath +mkdir -p 'volume/www/website/log/' +cp -f conf/build/nginx/nginx.conf $confpath + +if [ $OS = "OSX" ] +then + sed -i '.original' "s/{SRVNAME}/$srvname/g" $confpath + rm $confpath.original + sed -i '.original' "s/{UPSTREAM}/$upstream/g" $confpath + rm $confpath.original +else + sed -i "s/{SRVNAME}/$srvname/g" $confpath + sed -i "s/{UPSTREAM}/$upstream/g" $confpath +fi + diff --git a/conf/build/nginx/log_format.conf b/conf/build/nginx/log_format.conf new file mode 100644 index 0000000..27067a9 --- /dev/null +++ b/conf/build/nginx/log_format.conf @@ -0,0 +1,2 @@ + +log_format vhosts '$host $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'; diff --git a/conf/build/nginx/nginx.conf b/conf/build/nginx/nginx.conf new file mode 100644 index 0000000..2f699e0 --- /dev/null +++ b/conf/build/nginx/nginx.conf @@ -0,0 +1,40 @@ +upstream fastcgi_backend { + server {UPSTREAM}:9000; +} + +server { + server_name {SRVNAME}; + root /home/www/website/app; + index index.php; + client_max_body_size 200M; + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location / { + try_files $uri $uri/ /index.php?$args; + } + + location ~ \.php$ { + fastcgi_pass fastcgi_backend; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_intercept_errors on; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { + expires max; + log_not_found off; + } + + access_log /home/www/website/log/access.log main; + error_log /home/www/website/log/error.log; +} \ No newline at end of file diff --git a/conf/build/node/Dockerfile b/conf/build/node/Dockerfile new file mode 100644 index 0000000..97cade7 --- /dev/null +++ b/conf/build/node/Dockerfile @@ -0,0 +1,3 @@ +FROM node:12 +EXPOSE 8080 +CMD cd /home/app/ && npm install && node index.js \ No newline at end of file diff --git a/conf/docker-compose.dev.yml b/conf/docker-compose.dev.yml new file mode 100644 index 0000000..1908005 --- /dev/null +++ b/conf/docker-compose.dev.yml @@ -0,0 +1,15 @@ +version: '3' + +services: + + nginx: + ports: + - "8080:80" + volumes: + - ../volume/app:/home/app:cached + restart: "no" + + node: + volumes: + - ../volume/app:/home/app:cached + restart: "no" diff --git a/conf/docker-compose.override.yml.sample b/conf/docker-compose.override.yml.sample new file mode 100644 index 0000000..348107f --- /dev/null +++ b/conf/docker-compose.override.yml.sample @@ -0,0 +1,11 @@ +version: '3' + + +networks: + default: + driver: bridge + ipam: + driver: default + config: + - subnet: 10.0.0.0/24 + \ No newline at end of file diff --git a/conf/docker-compose.preprod.yml b/conf/docker-compose.preprod.yml new file mode 100644 index 0000000..600fb1e --- /dev/null +++ b/conf/docker-compose.preprod.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + nginx: + networks: + - default + - frontnginx_front + +networks: + default: + driver: bridge + frontnginx_front: + external: true diff --git a/conf/docker-compose.prod.yml b/conf/docker-compose.prod.yml new file mode 100644 index 0000000..feae1b1 --- /dev/null +++ b/conf/docker-compose.prod.yml @@ -0,0 +1,14 @@ +version: '3' + +services: + nginx: + networks: + - default + - frontnginx_front + +networks: + default: + driver: bridge + frontnginx_front: + external: true + diff --git a/conf/docker-compose.yml b/conf/docker-compose.yml new file mode 100644 index 0000000..36e3c9b --- /dev/null +++ b/conf/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' + +services: + + nginx: + build: build/nginx + container_name: ${CLIENT}.nginx.${ENV} + hostname: nginx + volumes: + - ../volume/nginx/etc.nginx.sites-enabled:/etc/nginx/sites-enabled + - ../volume/www:/home/www + restart: always + + node: + build: build/node + container_name: ${CLIENT}.node.${ENV} + hostname: node + volumes: + - ../volume/app:/home/app + restart: always \ No newline at end of file