diff --git a/.env.template b/.env.template new file mode 100644 index 000000000..9afb898ba --- /dev/null +++ b/.env.template @@ -0,0 +1,8 @@ +# PostgreSQL +POSTGRES_DB=project +POSTGRES_USER=ps_user +POSTGRES_PASSWORD=ps_password +POSTGRES_HOST=postgres + +# Redis +REDIS_REPLICATION_MODE=master diff --git a/.gitignore b/.gitignore index b28e598f1..3811a47aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .idea/ -/vendor/ .DS_Store .AppleDouble .LSOverride +.env diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..2f1b4edcb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,69 @@ +version: '3' + +services: + nginx: + build: + context: . + dockerfile: docker/nginx/Dockerfile + restart: on-failure + ports: + - "80:80" + volumes: + - ./project:/var/www/project + - ./docker/sock:/sock + networks: + - project-network + + php: + build: + context: . + dockerfile: docker/php-fpm/Dockerfile + restart: on-failure + volumes: + - ./project:/var/www/project + - ./docker/sock:/sock + networks: + - project-network + + postgres: + build: + context: . + dockerfile: docker/postgres/Dockerfile + restart: on-failure + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + PGDATA: /var/lib/postgresql/data + volumes: + - db-data:/var/lib/postgresql/data:rw + ports: + - "5432:5432" + networks: + - project-network + + redis: + image: "redis:alpine" + command: redis-server + restart: on-failure + ports: + - "6379:6379" + environment: + - REDIS_REPLICATION_MODE=${REDIS_REPLICATION_MODE} + networks: + - project-network + + memcached: + image: "memcached:alpine" + restart: on-failure + ports: + - "11211:11211" + networks: + - project-network + +volumes: + db-data: + +networks: + project-network: + driver: bridge diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 000000000..d5f488f1e --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,8 @@ +ARG NGINX_VERSION=1.25.3 + +FROM nginx:${NGINX_VERSION} + +COPY docker/nginx/default.conf /etc/nginx/conf.d/ + +EXPOSE 80 +EXPOSE 443 diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf new file mode 100644 index 000000000..b7d757969 --- /dev/null +++ b/docker/nginx/default.conf @@ -0,0 +1,27 @@ +server { + server_name localhost; + root /var/www/project/public; + + location / { + try_files $uri /index.php$is_args$args; + } + + location ~ ^/index\.php(/|$) { + fastcgi_pass unix:/sock/docker.sock; + + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + + internal; + } + + location ~ \.php$ { + return 404; + } + + error_log /var/log/nginx/project_error.log; + access_log /var/log/nginx/project_access.log; +} diff --git a/docker/php-fpm/Dockerfile b/docker/php-fpm/Dockerfile new file mode 100644 index 000000000..7bd60a8b7 --- /dev/null +++ b/docker/php-fpm/Dockerfile @@ -0,0 +1,42 @@ +ARG PHP_VERSION=8.3-fpm + +FROM php:${PHP_VERSION} + +RUN apt-get update && apt-get install -y \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libpq-dev \ + libonig-dev \ + libzip-dev \ + libmemcached-dev \ + libssl-dev \ + libmcrypt-dev \ + && pecl install mcrypt-1.0.7 \ + && docker-php-ext-enable mcrypt \ + && docker-php-ext-install -j$(nproc) pgsql pdo pdo_pgsql opcache bcmath zip \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) gd \ + && pecl install memcached \ + && docker-php-ext-enable memcached \ + && pecl install redis \ + && docker-php-ext-enable redis + +COPY docker/php-fpm/php.ini $PHP_INI_DIR/conf.d/php.ini +COPY docker/php-fpm/www.conf /usr/local/etc/php-fpm.d/zz-docker.conf + +RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer + +RUN usermod -u 1000 www-data + +COPY --chown=www-data:www-data project/ /var/www/project/ + +RUN chown -R www-data:www-data /var/www + +WORKDIR /var/www/project + +USER www-data + +RUN export COMPOSER_HOME=$(pwd) && composer --no-progress --prefer-dist --no-interaction install; + +CMD ["php-fpm"] diff --git a/docker/php-fpm/php.ini b/docker/php-fpm/php.ini new file mode 100644 index 000000000..c7e09fc5f --- /dev/null +++ b/docker/php-fpm/php.ini @@ -0,0 +1 @@ +date.timezone=Europe/Moscow diff --git a/docker/php-fpm/www.conf b/docker/php-fpm/www.conf new file mode 100644 index 000000000..edb67d0a2 --- /dev/null +++ b/docker/php-fpm/www.conf @@ -0,0 +1,6 @@ +[global] +daemonize = no + +[www] +listen = /sock/docker.sock +listen.mode = 0666 diff --git a/docker/postgres/Dockerfile b/docker/postgres/Dockerfile new file mode 100644 index 000000000..43c59e708 --- /dev/null +++ b/docker/postgres/Dockerfile @@ -0,0 +1,3 @@ +ARG POSTGRESQL_VERSION=16.2-alpine + +FROM postgres:${POSTGRESQL_VERSION} diff --git a/project/.gitignore b/project/.gitignore new file mode 100644 index 000000000..54bc4d5b0 --- /dev/null +++ b/project/.gitignore @@ -0,0 +1,7 @@ +/var/ +/vendor/ +/cache/ +/.env.local +.env +/.env.*.local +.htaccess diff --git a/project/composer.json b/project/composer.json new file mode 100644 index 000000000..3f689639f --- /dev/null +++ b/project/composer.json @@ -0,0 +1,16 @@ +{ + "name": "sfadeev/project", + "type": "project", + "autoload": { + "psr-4": { + "Sfadeev\\Project\\": "src/" + } + }, + "authors": [ + { + "name": "Sergey Fadeev", + "email": "fadeevsn92@gmail.com" + } + ], + "require": {} +} diff --git a/project/composer.lock b/project/composer.lock new file mode 100644 index 000000000..c63811fee --- /dev/null +++ b/project/composer.lock @@ -0,0 +1,18 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "00535cceabb9b534045e4b2a7f9eace3", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/project/public/index.php b/project/public/index.php new file mode 100644 index 000000000..61ace196d --- /dev/null +++ b/project/public/index.php @@ -0,0 +1,2 @@ +