From 5a81015de82bf174c02d0e85d067874c969f9130 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sat, 28 Dec 2019 01:20:39 +0300 Subject: [PATCH 1/4] 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 +} From 3df787b313f412e8cf48b3e95c1f104bdb260978 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sun, 29 Dec 2019 01:48:53 +0300 Subject: [PATCH 2/4] Setting default database version to 10.10 to avoid unnecessary DB connections from CLI. --- config/packages/doctrine.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 2f4a930..7b61471 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -4,6 +4,7 @@ parameters: # environment variables are not available yet. # You should not need to change this value. env(APP_DATABASE_URL): '' + env(POSTGRES_VERSION): '10.10' env(MAGNETICOD_DATABASE_URL): '' doctrine: @@ -13,10 +14,11 @@ doctrine: default: driver: 'pdo_pgsql' url: '%env(resolve:APP_DATABASE_URL)%' - #server_version: 9.6 + server_version: '%env(resolve:POSTGRES_VERSION)%' magneticod: driver: 'pdo_pgsql' url: '%env(resolve:MAGNETICOD_DATABASE_URL)%' + server_version: '%env(resolve:POSTGRES_VERSION)%' orm: auto_generate_proxy_classes: '%kernel.debug%' default_entity_manager: default From 6a7f3b13144382ba3fc4ef4b004656596271047c Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sun, 29 Dec 2019 02:31:56 +0300 Subject: [PATCH 3/4] Changing network mode to "host" for FPM container. --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index bb0f22a..c3b87c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,7 @@ services: build: context: ./docker container_name: magnetico-web-fpm + network_mode: host ports: - "127.0.0.1:${PHP_FPM_PORT:-9000}:9000/tcp" restart: unless-stopped From 88b7163f1e6fc6352deb73d914995cc2c6485d90 Mon Sep 17 00:00:00 2001 From: Alexey Skobkin Date: Sun, 29 Dec 2019 02:59:42 +0300 Subject: [PATCH 4/4] Cleaning nginx config. --- etc/nginx/sites-available/magnetico-web.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/etc/nginx/sites-available/magnetico-web.conf b/etc/nginx/sites-available/magnetico-web.conf index fe8ff51..3542a81 100644 --- a/etc/nginx/sites-available/magnetico-web.conf +++ b/etc/nginx/sites-available/magnetico-web.conf @@ -2,7 +2,7 @@ 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; + index index.php; server_name magnetico.pw; location / { @@ -11,7 +11,6 @@ server { } 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; @@ -51,11 +50,12 @@ server { 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 + + listen 80 ; + listen [::]:80 ; + + return 404; }