diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..191381ee74dec49c89f99a62d055cb1058ba0de9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git \ No newline at end of file diff --git a/build/fpm/Dockerfile b/build/fpm/Dockerfile index 8b404cf3e197694f9e7f082badcb821e4ddaa673..fd035e3a057a8075ea7528e06feb8529a7db3ea4 100644 --- a/build/fpm/Dockerfile +++ b/build/fpm/Dockerfile @@ -1,7 +1,7 @@ -FROM php:8.1-fpm as composer +FROM php:7.4-fpm as composer # Add Composer installation to image -ADD installcomposer.sh /usr/bin/installcomposer +ADD build/fpm/installcomposer.sh /usr/bin/installcomposer RUN /usr/bin/installcomposer && \ rm /usr/bin/installcomposer @@ -27,16 +27,30 @@ RUN apt update && apt install -y \ docker-php-ext-enable redis && \ docker-php-ext-enable --ini-name=xdebug.ini xdebug +# Add working dir for the code base +RUN mkdir -p /metager/metager_app && \ + chown -R metager:metager /metager +WORKDIR /metager/metager_app + +# Add composer Cache Directory +RUN mkdir /composer_cache && \ + chown metager:metager /composer_cache +VOLUME [ "/composer_cache" ] +# Add composer vendor Directory +RUN mkdir -p /metager/metager_app/vendor && \ + chown metager:metager /metager/metager_app/vendor +VOLUME [ "metager/metager_app/vendor" ] + # Add General Customizations to php.ini -ADD configuration/php/custom.ini $PHP_INI_DIR/conf.d/custom.ini +ADD build/fpm/configuration/php/custom.ini $PHP_INI_DIR/conf.d/custom.ini # Configure PHP (use development configuration as base) RUN mv $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini # Add Development Customizations -ADD configuration/php/development.ini $PHP_INI_DIR/conf.d/development.ini +ADD build/fpm/configuration/php/development.ini $PHP_INI_DIR/conf.d/development.ini # Configure FPM -ADD configuration/fpm/www_01_development.conf $PHP_INI_DIR/../php-fpm.d/www_01.conf +ADD build/fpm/configuration/fpm/www_01_development.conf $PHP_INI_DIR/../php-fpm.d/www_01.conf USER metager:metager ENTRYPOINT [ "/usr/local/sbin/php-fpm" ] @@ -54,6 +68,6 @@ RUN mv $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini # Remove development php.ini RUN rm $PHP_INI_DIR/conf.d/development.ini # Add production php.ini -ADD configuration/php/production.ini $PHP_INI_DIR/conf.d/production.ini +ADD build/fpm/configuration/php/production.ini $PHP_INI_DIR/conf.d/production.ini USER metager:metager \ No newline at end of file diff --git a/build/fpm/configuration/fpm/www_01_development.conf b/build/fpm/configuration/fpm/www_01_development.conf index 546659f148ace3212e3e2eb9b9257ccf729d649b..6acb40d358a09b2e852df4a5466345fd5e0ebea5 100644 --- a/build/fpm/configuration/fpm/www_01_development.conf +++ b/build/fpm/configuration/fpm/www_01_development.conf @@ -1,4 +1,4 @@ ; This File holds custom www pool configurations for development deployments [www] ; Do not limit request length -request_terminate_timeout = 0 \ No newline at end of file +request_terminate_timeout = 0 diff --git a/build/nginx/Dockerfile b/build/nginx/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..8068cd8257e6b965dce46b74cc0892719db940d7 --- /dev/null +++ b/build/nginx/Dockerfile @@ -0,0 +1,28 @@ +FROM nginx:1.21.6 as setup + +ARG UID=1000 +ARG GID=1000 +ARG USER_HOME=/metager + +# Create User +RUN groupadd -g ${GID} metager && \ + useradd -b $USER_HOME -g ${GID} -u ${UID} -M -s /bin/bash metager && \ + mkdir -p $USER_HOME && \ + mkdir ${USER_HOME}/nginx_tmp && \ + mkdir ${USER_HOME}/metager_app && \ + chown -R ${UID}:${GID} $USER_HOME + +WORKDIR ${USER_HOME}/metager_app + +FROM setup as development + +ADD build/nginx/configuration/nginx.conf /etc/nginx/nginx.conf +ADD build/nginx/configuration/nginx-default-dev.conf /etc/nginx/conf.d/default.conf + +USER metager:metager + +FROM development as production + +USER root:root +ADD build/nginx/configuration/nginx-default.conf /etc/nginx/conf.d/default.conf +USER metager:metager \ No newline at end of file diff --git a/metager/config/nginx-default-dev.conf b/build/nginx/configuration/nginx-default-dev.conf similarity index 91% rename from metager/config/nginx-default-dev.conf rename to build/nginx/configuration/nginx-default-dev.conf index 7baa09880c8ef72e347c8b542e081adcc1275d8e..9cbb21e1e299f6106ab1d9d4cdeb43b6ace0fe9c 100644 --- a/metager/config/nginx-default-dev.conf +++ b/build/nginx/configuration/nginx-default-dev.conf @@ -1,7 +1,7 @@ server { listen 8080; server_name localhost; - root /html/public; + root /metager/metager_app/public; index index.php index.html index.htm; client_max_body_size 30M; @@ -13,7 +13,7 @@ server { location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass phpfpm:9000; + fastcgi_pass fpm:9000; fastcgi_index index.php; fastcgi_read_timeout 900; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; diff --git a/metager/config/nginx-default.conf b/build/nginx/configuration/nginx-default.conf similarity index 87% rename from metager/config/nginx-default.conf rename to build/nginx/configuration/nginx-default.conf index b676c8da08f6d6767d39dc77b651ebb295fd9139..3f027d68c9235a53156c3b4cae54fa8b3d221268 100644 --- a/metager/config/nginx-default.conf +++ b/build/nginx/configuration/nginx-default.conf @@ -1,9 +1,10 @@ server { listen 8080; server_name localhost; - root /html/public; + root /metager/nginx_app/public; index index.php index.html index.htm; + server_tokens off; client_max_body_size 30M; location / { @@ -13,7 +14,7 @@ server { location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass phpfpm:9000; + fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; diff --git a/metager/config/nginx.conf b/build/nginx/configuration/nginx.conf similarity index 66% rename from metager/config/nginx.conf rename to build/nginx/configuration/nginx.conf index 3f8cb5d05aa1a9b8e3f4d0ce63a7d1920ff318e1..cdffe4bb1704da78e06dc3c1104450a1b9a129f1 100644 --- a/metager/config/nginx.conf +++ b/build/nginx/configuration/nginx.conf @@ -1,10 +1,7 @@ -#user www-data; worker_processes auto; error_log /dev/stdout warn; -# pid /run/nginx.pid; - -daemon off; +pid /metager/nginx_tmp/nginx.pid; events { worker_connections 1024; @@ -12,6 +9,13 @@ events { http { + client_body_temp_path /metager/nginx_tmp/client_temp; + proxy_temp_path /metager/nginx_tmp/proxy_temp_path; + fastcgi_temp_path /metager/nginx_tmp/fastcgi_temp; + uwsgi_temp_path /metager/nginx_tmp/uwsgi_temp; + scgi_temp_path /metager/nginx_tmp/scgi_temp; + + include /etc/nginx/mime.types; default_type application/octet-stream; @@ -22,8 +26,6 @@ http { access_log /dev/null main; sendfile on; - #tcp_nopush on; - client_max_body_size 30M; keepalive_timeout 65; diff --git a/docker-compose.yml b/docker-compose.yml index 332cbd5fe34699f547bf295b695b73bbc3021381..c432880fae5b83808cab45554a1a7ded122b4afe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,38 @@ version: "3" # Volumes - +volumes: + vendor: {} + composer_cache: {} # Services services: fpm: build: - context: build/fpm - dockerfile: Dockerfile - target: ${APP_ENV} \ No newline at end of file + &fpm_build + context: ./ + dockerfile: build/fpm/Dockerfile + target: ${APP_ENV} + volumes: + - ./metager:/metager/metager_app + - vendor:/metager/metager_app/vendor + composer: + build: + <<: *fpm_build + entrypoint: /usr/bin/composer + command: install + environment: + - COMPOSER_HOME=/composer_cache + volumes: + - ./metager:/metager/metager_app + - vendor:/metager/metager_app/vendor + - composer_cache:/composer_cache + nginx: + build: + context: ./ + dockerfile: build/nginx/Dockerfile + target: ${APP_ENV} + volumes: + - ./metager/public:/metager/metager_app/public + ports: + - 8080:8080 + \ No newline at end of file