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/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 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c3b87c9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3.7' + +services: + magnetico-web: + image: skobkin/magnetico-web-fpm + 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 + 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..3542a81 --- /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; + 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 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; + } + + server_name magnetico.pw; + + listen 80 ; + listen [::]:80 ; + + return 404; +}