diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a09c56df5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea diff --git a/docker/.env b/docker/.env new file mode 100644 index 000000000..91a80adb9 --- /dev/null +++ b/docker/.env @@ -0,0 +1,2 @@ +UID=3000 +NGINX_PHP_USER=nginxphpuser \ No newline at end of file diff --git a/docker/.env.example b/docker/.env.example new file mode 100644 index 000000000..91a80adb9 --- /dev/null +++ b/docker/.env.example @@ -0,0 +1,2 @@ +UID=3000 +NGINX_PHP_USER=nginxphpuser \ No newline at end of file diff --git a/docker/.gitignore b/docker/.gitignore new file mode 100644 index 000000000..d70ad070a --- /dev/null +++ b/docker/.gitignore @@ -0,0 +1,2 @@ +.env +data \ No newline at end of file diff --git a/docker/app/public/index.php b/docker/app/public/index.php new file mode 100644 index 000000000..1be69d4e2 --- /dev/null +++ b/docker/app/public/index.php @@ -0,0 +1,12 @@ +addServer("memcached", 11211); + + $redis = new Redis(); + $redis->connect('redis'); + +} catch (\Throwable $e) { + echo $e->getMessage(); +} diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 000000000..893c415ad --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,52 @@ +version: '3.8' + +services: + nginx: + container_name: nginx + build: + context: ./docker/nginx + args: + UID: $UID + NGINX_PHP_USER: $NGINX_PHP_USER + volumes: + - ./app:/var/www/html + - ./docker/sock:/sock + ports: + - "8787:80" + + php-fpm: + container_name: php-fpm + build: + context: ./docker/php-fpm + args: + UID: $UID + NGINX_PHP_USER: $NGINX_PHP_USER + volumes: + - ./app:/var/www/html + - ./docker/sock:/sock + + postgres: + image: postgres:9.5.6 + restart: always + container_name: postgres + volumes: + - ./data/postgres:/var/lib/postgresql/data + environment: + POSTGRES_DB: user + POSTGRES_USER: user + POSTGRES_PASSWORD: user + ports: + - "5432:5432" + + redis: + build: + context: ./docker/redis + + memcached: + build: + context: ./docker/memcached + ports: + - '11211:11211' + + + diff --git a/docker/docker/memcached/Dockerfile b/docker/docker/memcached/Dockerfile new file mode 100644 index 000000000..53f1ac51f --- /dev/null +++ b/docker/docker/memcached/Dockerfile @@ -0,0 +1 @@ +FROM memcached:1.6.9 \ No newline at end of file diff --git a/docker/docker/nginx/Dockerfile b/docker/docker/nginx/Dockerfile new file mode 100644 index 000000000..fe1f2670b --- /dev/null +++ b/docker/docker/nginx/Dockerfile @@ -0,0 +1,11 @@ +FROM nginx +WORKDIR /var/www/html + +ARG UID +ARG NGINX_PHP_USER + +COPY nginx.conf /etc/nginx/nginx.conf +COPY mysite.conf /etc/nginx/conf.d/default.conf +RUN addgroup --gid $UID --system $NGINX_PHP_USER \ + && adduser --uid $UID --system --disabled-login --disabled-password --gid $UID $NGINX_PHP_USER \ + && sed -i -r "s/%REPLACE_USERNAME%/$NGINX_PHP_USER/g" /etc/nginx/nginx.conf \ No newline at end of file diff --git a/docker/docker/nginx/mysite.conf b/docker/docker/nginx/mysite.conf new file mode 100644 index 000000000..2678122e7 --- /dev/null +++ b/docker/docker/nginx/mysite.conf @@ -0,0 +1,21 @@ +server { + listen 80; + listen [::]:80; + + index index.php; + root /var/www/html/public; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass unix:/sock/docker.sock; + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + error_log /var/log/nginx/error.log; + access_log /var/log/nginx/access.log; +} \ No newline at end of file diff --git a/docker/docker/nginx/nginx.conf b/docker/docker/nginx/nginx.conf new file mode 100644 index 000000000..29b8d8a6c --- /dev/null +++ b/docker/docker/nginx/nginx.conf @@ -0,0 +1,40 @@ +user %REPLACE_USERNAME%; +worker_processes auto; + +pid /var/run/nginx.pid; +error_log /var/log/nginx/error.log crit; + +events { + use epoll; + worker_connections 4096; + multi_accept on; +} +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + access_log off; + + keepalive_timeout 30; + keepalive_requests 100; + + client_max_body_size 1m; + client_body_timeout 10; + reset_timedout_connection on; + send_timeout 2; + sendfile on; + tcp_nodelay on; + tcp_nopush on; + + gzip on; + gzip_disable "msie6"; + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; + + open_file_cache max=200000 inactive=20s; + open_file_cache_valid 30s; + open_file_cache_min_uses 2; + open_file_cache_errors on; + + include /etc/nginx/conf.d/*.conf; + +} \ No newline at end of file diff --git a/docker/docker/php-fpm/Dockerfile b/docker/docker/php-fpm/Dockerfile new file mode 100644 index 000000000..1bab9d5f4 --- /dev/null +++ b/docker/docker/php-fpm/Dockerfile @@ -0,0 +1,50 @@ +FROM php:7.4-fpm + +ARG UID +ARG NGINX_PHP_USER +ENV DOCKER_PATH=/usr/local/etc/php-fpm.d/zz-docker.conf + +COPY zz-docker.conf $DOCKER_PATH + + +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \ + && apt-get update \ + && apt-get install -y \ + git \ + curl \ + wget \ + grep \ + zip \ + unzip \ + libmemcached-dev \ + zlib1g-dev \ + libzip-dev \ + libcurl4-openssl-dev \ + libbrotli-dev \ + libevent-dev \ + libicu-dev \ + libidn11-dev \ + libidn2-0-dev \ + libssl-dev \ + libpq-dev \ + libonig-dev \ + librabbitmq-dev \ + nano \ + && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \ + && pecl install memcached \ + && docker-php-ext-enable memcached \ + && docker-php-ext-install pdo pdo_pgsql pgsql \ + && pecl install xdebug-2.9.8 && docker-php-ext-enable xdebug \ + && pecl install -o redis && docker-php-ext-enable redis \ + && docker-php-ext-install zip sockets bcmath mbstring \ + && pecl install amqp && docker-php-ext-enable amqp \ + && addgroup --gid $UID --system $NGINX_PHP_USER \ + && adduser --uid $UID --system --disabled-login --disabled-password --gid $UID $NGINX_PHP_USER \ + && sed -i -r "s/%REPLACE_USERNAME%/$NGINX_PHP_USER/g" $DOCKER_PATH \ + && rm -rf /tmp/pear + +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +WORKDIR /var/www/html + +CMD ["php-fpm"] \ No newline at end of file diff --git a/docker/docker/php-fpm/zz-docker.conf b/docker/docker/php-fpm/zz-docker.conf new file mode 100644 index 000000000..322ee8743 --- /dev/null +++ b/docker/docker/php-fpm/zz-docker.conf @@ -0,0 +1,8 @@ +[global] +daemonize = no + +[www] +listen = /sock/docker.sock +listen.owner = %REPLACE_USERNAME% +listen.group = %REPLACE_USERNAME% +listen.mode = 0660 \ No newline at end of file diff --git a/docker/docker/redis/Dockerfile b/docker/docker/redis/Dockerfile new file mode 100644 index 000000000..d0d17051e --- /dev/null +++ b/docker/docker/redis/Dockerfile @@ -0,0 +1 @@ +FROM redis:6.2-rc2 \ No newline at end of file diff --git a/virtual/.gitignore b/virtual/.gitignore new file mode 100644 index 000000000..1005aa592 --- /dev/null +++ b/virtual/.gitignore @@ -0,0 +1 @@ +homestead \ No newline at end of file diff --git a/virtual/Homestead.yaml b/virtual/Homestead.yaml new file mode 100644 index 000000000..21d88f911 --- /dev/null +++ b/virtual/Homestead.yaml @@ -0,0 +1,32 @@ +--- +ip: "192.168.10.10" +memory: 2048 +cpus: 2 +provider: virtualbox + +authorize: ~/.ssh/id_rsa.pub + +keys: + - ~/.ssh/id_rsa + +folders: + - map: ~/Documents/OTUS_HW/virtual/app + to: /home/vagrant/code + +sites: + - map: application.local + to: /home/vagrant/code/public + +databases: + - homestead + +features: + - mysql: true + - mariadb: false + - postgresql: false + - ohmyzsh: false + - webdriver: false + +ports: + - send: 8089 + to: 80 diff --git a/virtual/app/public/index.php b/virtual/app/public/index.php new file mode 100644 index 000000000..bf0c8fa16 --- /dev/null +++ b/virtual/app/public/index.php @@ -0,0 +1,2 @@ +