diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..dfd8ac483 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +MYSQL_USER= +MYSQL_PASSWORD= +MYSQL_ROOT_PASSWORD= +REDIS_PASSWORD= diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..2e5aaeb04 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +init: docker-down docker-build docker-up + +docker-down: + docker compose down --remove-orphans + +docker-build: + docker compose build + +docker-up: + docker compose up -d diff --git a/code/index.php b/code/index.php new file mode 100644 index 000000000..8fac08803 --- /dev/null +++ b/code/index.php @@ -0,0 +1,48 @@ +"; + +$redis = new Redis(); +$redis->connect('redis', 6379); +$redis->auth(getenv("REDIS_PASSWORD")); + +if ($redis->ping()) { + print_r('Redis is alive!!!!!!'); + echo "
"; +} + +$mc = new Memcached(); +$mc->addServer("memcached", 11211); +$mc->set("foo", "Hello!"); +$mc->set("bar", "Memcached..."); +$data = [ + $mc->get("foo"), + $mc->get("bar") +]; + +print_r($data); +echo "
"; + +try { + $user = getenv("DB_USER"); + $pass = getenv("DB_PASSWORD"); + $opt = [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => false, + ]; + $pdo = new PDO("mysql:host=mysql;dbname=mysite", $user, $pass, $opt); + $stmt = $pdo->query('SHOW DATABASES;'); + + while ($row = $stmt->fetch()) { + print_r($row); + } +} catch (\Throwable $e) { + print_r($e->getMessage()); +} + +echo "
"; + +echo ""; + +phpinfo(); diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..4a0cb809a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,70 @@ +version: '3' + +services: + nginx: + image: nginx:latest + container_name: mysite-nginx + depends_on: + - php-fpm + ports: + - "80:80" + volumes: + - ./code:/data/mysite.local + - ./nginx/hosts/mysite.local.conf:/etc/nginx/conf.d/mysite.local.conf + networks: + - app-network + + php-fpm: + build: + context: ./fpm + dockerfile: Dockerfile + image: mysite/php-fpm + container_name: mysite-php-fpm + environment: + - REDIS_PASSWORD=${REDIS_PASSWORD} + - DB_USER=${MYSQL_USER} + - DB_PASSWORD=${MYSQL_PASSWORD} + depends_on: + - memcached + - redis + volumes: + - ./code:/data/mysite.local + networks: + - app-network + + memcached: + image: memcached:latest + container_name: mysite-memcached + networks: + - app-network + + redis: + image: redis:latest + container_name: mysite-redis + environment: + - REDIS_PASSWORD=${REDIS_PASSWORD} + command: sh -c 'exec redis-server --requirepass "$REDIS_PASSWORD"' + networks: + - app-network + + mysql: + image: mysql:8.0 + container_name: mysite-mysql + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_DATABASE: mysite + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + volumes: + - mysite-dbdata:/var/lib/mysql + networks: + - app-network + +networks: + app-network: + driver: bridge + +volumes: + mysite-dbdata: diff --git a/fpm/Dockerfile b/fpm/Dockerfile new file mode 100644 index 000000000..d1b249e40 --- /dev/null +++ b/fpm/Dockerfile @@ -0,0 +1,36 @@ +FROM php:8.2-fpm + +# ставим необходимые для нормальной работы модули +RUN apt-get update \ + && apt-get install -y \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libpng-dev \ + libonig-dev \ + libzip-dev \ + libmemcached-dev \ + zlib1g-dev \ + libssl-dev \ + libz-dev \ + libmcrypt-dev \ + && pecl install mcrypt-1.0.6 \ + && docker-php-ext-enable mcrypt \ + && docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) gd \ + && pecl install redis \ + && docker-php-ext-enable redis + +RUN yes '' | pecl install -f memcached-3.2.0 \ + && docker-php-ext-enable memcached + +# Устанавливаем Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +COPY ./php.ini /usr/local/etc/php/conf.d/php-custom.ini + +WORKDIR /data + +VOLUME /data + +CMD ["php-fpm"] diff --git a/fpm/php.ini b/fpm/php.ini new file mode 100644 index 000000000..ed0de8695 --- /dev/null +++ b/fpm/php.ini @@ -0,0 +1,2 @@ +session.save_handler = memcache +session.save_path = "tcp://memcache:11211" diff --git a/nginx/hosts/mysite.local.conf b/nginx/hosts/mysite.local.conf new file mode 100644 index 000000000..b725d7b11 --- /dev/null +++ b/nginx/hosts/mysite.local.conf @@ -0,0 +1,25 @@ +server { + listen 80; + server_name mysite.local; + root /data/mysite.local; + index index.php index.html; + + location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ { + access_log off; + expires max; + } + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~* .php$ { + try_files $uri = 404; + fastcgi_split_path_info ^(.+.php)(/.+)$; + fastcgi_pass php-fpm:9000; + #fastcgi_pass unix:/var/run/php-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } +}