From 5a81015de82bf174c02d0e85d067874c969f9130 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sat, 28 Dec 2019 01:20:39 +0300 Subject: [PATCH] Adding Dockerfile, docker-compose.yml, sample Nginx config, etc. --- .env | 4 ++ README.md | 7 +++ docker-compose.yml | 18 ++++++ docker/Dockerfile | 11 ++++ etc/nginx/sites-available/magnetico-web.conf | 61 ++++++++++++++++++++ 5 files changed, 101 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker/Dockerfile create mode 100644 etc/nginx/sites-available/magnetico-web.conf diff --git a/.env b/.env index b313b47..c13b453 100644 --- a/.env +++ b/.env @@ -20,3 +20,7 @@ MAGNETICOD_DATABASE_URL=postgres://$PGUSER:$PGPASSWORD@127.0.0.1:5436/test?appli ###> sentry/sentry-symfony ### SENTRY_DSN= ###< sentry/sentry-symfony ### + +# docker-compose +PHP_FPM_PORT=9000 +APP_LOCAL_PATH=/var/www/magnetico-web/current diff --git a/README.md b/README.md index c92db0b..b2953ea 100644 --- a/README.md +++ b/README.md @@ -67,4 +67,11 @@ php app/console user:add [your_password] [--invites ```bash php app/console assets:install public --symlink ``` +## Running using Docker Compose +```shell +docker-compose up + +# or with image rebuild +docker-compose up --build +``` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bb0f22a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.7' + +services: + magnetico-web: + image: skobkin/magnetico-web-fpm + build: + context: ./docker + container_name: magnetico-web-fpm + ports: + - "127.0.0.1:${PHP_FPM_PORT:-9000}:9000/tcp" + restart: unless-stopped + volumes: + - "${APP_LOCAL_PATH}:${APP_LOCAL_PATH}" + logging: + driver: "json-file" + options: + max-size: "${LOG_MAX_SIZE:-5m}" + max-file: "${LOG_MAX_FILE:-5}" diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..0c13ebc --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,11 @@ +FROM php:7.4-fpm-alpine + +ENV PHP_TIMEZONE Europe/Moscow + +RUN apk update && \ + apk add postgresql-dev libpq && \ + docker-php-ext-configure pdo_pgsql && \ + docker-php-ext-install -j$(nproc) pdo_pgsql && \ + apk del postgresql-dev && \ + mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" && \ + echo "date.timezone = $PHP_TIMEZONE" > $PHP_INI_DIR/conf.d/timezone.ini diff --git a/etc/nginx/sites-available/magnetico-web.conf b/etc/nginx/sites-available/magnetico-web.conf new file mode 100644 index 0000000..fe8ff51 --- /dev/null +++ b/etc/nginx/sites-available/magnetico-web.conf @@ -0,0 +1,61 @@ +server { + root /var/www/magnetico-web/current/public; + + # Add index.php to the list if you are using PHP + index index.php; # index.html index.htm index.nginx-debian.html; + server_name magnetico.pw; + + location / { + # try to serve file directly, fallback to index.php + try_files $uri /index.php$is_args$args; + } + + location ~ ^/index\.php(/|$) { + #fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; + fastcgi_pass 127.0.0.1:9000; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + fastcgi_intercept_errors on; + + # When you are using symlinks to link the document root to the + # current version of your application, you should pass the real + # application path instead of the path to the symlink to PHP + # FPM. + # Otherwise, PHP's OPcache may not properly detect changes to + # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126 + # for more information). + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + # Prevents URIs that include the front controller. This will 404: + # http://domain.tld/index.php/some-path + # Remove the internal directive to allow URIs like this + internal; + } + + # return 404 for all other php files not matching the front controller + # this prevents access to other php files you don't want to be accessible. + location ~ \.php$ { + return 404; + } + + listen [::]:443 ssl http2 ipv6only=on; + listen 443 ssl http2; + + include /etc/nginx/ssl/magnetico.pw.conf; + include /etc/nginx/config/ssl.conf; + + error_log /var/log/nginx/magnetico-web_error.log; + access_log /var/log/nginx/magnetico-web_access.log; +} + +server { + if ($host = magnetico.pw) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80 ; + listen [::]:80 ; + server_name magnetico.pw; + return 404; # managed by Certbot +}