diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..739e3e8
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,6 @@
+# Настройки для MySQL
+DB_HOST=db
+DB_PORT=3306
+DB_DATABASE=mydatabase
+DB_USERNAME=myuser
+DB_PASSWORD=mypassword
\ No newline at end of file
diff --git a/code/img/2832713.jpg b/code/img/2832713.jpg
new file mode 100644
index 0000000..f4eaf22
Binary files /dev/null and b/code/img/2832713.jpg differ
diff --git a/code/index.php b/code/index.php
new file mode 100644
index 0000000..5b44d9a
--- /dev/null
+++ b/code/index.php
@@ -0,0 +1,62 @@
+
+
+
+
+ Домашнее задание 1
+
+
+
+ Домашнее задание 1
+ Проверка загрузки css и картинок
+
+
+
+
+
+
+
+";
+
+$redis = new Redis();
+try {
+ $redis->connect('redis', 6379);
+ $redis->set('message', 'Привет из Redis!');
+ $message = $redis->get('message');
+ echo "Соединение с Redis установлено: $message";
+} catch (Exception $e) {
+ echo "Ошибка подключения к Redis: " . $e->getMessage();
+}
+
+echo "
";
+
+$memcached = new Memcached();
+$memcached->addServer('memcached', 11211);
+if ($memcached->getVersion()) {
+ $memcached->set('memcached_message', 'Привет из Memcached!');
+ echo "Соединение с Memcached установлено: " . $memcached->get('memcached_message');
+} else {
+ echo "Ошибка подключения к Memcached";
+}
+
+echo "
";
+
+$host = getenv('DB_HOST');
+$db = getenv('DB_DATABASE');
+$user = getenv('DB_USERNAME');
+$pass = getenv('DB_PASSWORD');
+$charset = 'utf8mb4';
+$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
+$options = [
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::ATTR_EMULATE_PREPARES => false,
+];
+
+try {
+ $pdo = new PDO($dsn, $user, $pass, $options);
+ echo "Соединение с MySQL установлено!";
+} catch (\PDOException $e) {
+ echo "Ошибка подключения к MySQL: " . $e->getMessage();
+}
diff --git a/code/style.css b/code/style.css
new file mode 100644
index 0000000..b08e4f9
--- /dev/null
+++ b/code/style.css
@@ -0,0 +1,3 @@
+img {
+ width:200px
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..dbbef43
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,4 @@
+{
+ "name": "napastyuk/hw",
+ "require": {}
+}
diff --git a/docker-compose.yaml b/docker-compose.yaml
new file mode 100644
index 0000000..78d96aa
--- /dev/null
+++ b/docker-compose.yaml
@@ -0,0 +1,76 @@
+
+# в этом блоке мы описываем контейнеры, которые будут запускаться
+services:
+ #контейнер с Nginx
+ nginx:
+ # Если нет секции build, то система будет искать образ в репозиториях
+ build:
+ context: ./nginx
+ dockerfile: Dockerfile
+ image: myapp/nginx # имя будущего образа
+ container_name: nginx # имя контейнера после запуска
+ ports:
+ - "80:80"
+ volumes:
+ - ./code:/data/mysite.local
+ networks:
+ - app-network
+ depends_on:
+ - app
+ - redis
+ - memcached
+
+ #Контейнер с PHP-FPM
+ app:
+ build:
+ context: ./fpm
+ dockerfile: Dockerfile
+ image: myapp/php
+ container_name: app
+ volumes:
+ - ./code:/data/mysite.local
+ networks:
+ - app-network
+ depends_on:
+ - redis
+ - memcached
+ env_file:
+ - .env
+
+ #Контейнер с MySQL
+ db:
+ image: mysql
+ container_name: mysql
+ environment:
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
+ MYSQL_DATABASE: ${DB_DATABASE}
+ MYSQL_USER: ${DB_USERNAME}
+ MYSQL_PASSWORD: ${DB_PASSWORD}
+ ports:
+ - "${DB_PORT}:3306"
+ networks:
+ - app-network
+ volumes:
+ - db_data:/var/lib/mysql
+
+ #Контейнер с Redis
+ redis:
+ image: redis
+ container_name: redis
+ networks:
+ - app-network
+
+ #Контейнер с Memcached
+ memcached:
+ image: memcached
+ container_name: memcached
+ networks:
+ - app-network
+
+volumes:
+ db_data:
+
+#виртуальная сеть
+networks:
+ app-network:
+ driver: bridge
\ No newline at end of file
diff --git a/fpm/Dockerfile b/fpm/Dockerfile
new file mode 100644
index 0000000..da775f2
--- /dev/null
+++ b/fpm/Dockerfile
@@ -0,0 +1,57 @@
+FROM php:8.2-fpm
+
+RUN apt-get update && apt-get install -y \
+ libfreetype6-dev \
+ libjpeg62-turbo-dev \
+ libpng-dev \
+ libonig-dev \
+ libzip-dev \
+ pkg-config \
+ build-essential \
+ default-mysql-client \
+ && docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip
+
+RUN apt install -y libmemcached-dev zlib1g-dev libssl-dev && \
+ pecl install memcached && docker-php-ext-enable memcached
+
+RUN pecl install redis && docker-php-ext-enable redis
+
+COPY ./php.ini /usr/local/etc/php/conf.d/php-custom.ini
+
+# Копирование Composer из официального образа
+COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
+
+WORKDIR /data
+
+VOLUME /data
+
+CMD ["php-fpm"]
+
+
+# # Установка зависимостей и расширений
+# RUN apt-get update && apt-get install -y \
+# libfreetype6-dev \
+# libjpeg62-turbo-dev \
+# libpng-dev \
+# libonig-dev \
+# libzip-dev \
+# pkg-config \
+# build-essential \
+# && docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip
+
+# RUN apt install -y libmemcached-dev zlib1g-dev libssl-dev
+
+# # Установка расширения Memcached
+# RUN pecl install -f memcached-3.3.0 \
+# && docker-php-ext-enable memcached
+
+# # Установка расширения Redis
+# RUN pecl install redis && docker-php-ext-enable redis
+
+# 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 0000000..ff806bb
--- /dev/null
+++ b/fpm/php.ini
@@ -0,0 +1,2 @@
+session.save_handler = memcache
+session.save_path = "tcp://memcache:11211"
\ No newline at end of file
diff --git a/nginx/Dockerfile b/nginx/Dockerfile
new file mode 100644
index 0000000..c26b4e8
--- /dev/null
+++ b/nginx/Dockerfile
@@ -0,0 +1,11 @@
+FROM nginx:latest
+
+COPY ./hosts/mysite.local.conf /etc/nginx/conf.d/mysite.local.conf
+
+WORKDIR /data
+
+VOLUME /data
+
+EXPOSE 80
+
+CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
diff --git a/nginx/hosts/mysite.local.conf b/nginx/hosts/mysite.local.conf
new file mode 100644
index 0000000..f983927
--- /dev/null
+++ b/nginx/hosts/mysite.local.conf
@@ -0,0 +1,36 @@
+server {
+ # указываем 80 порт для соединения
+ listen 80;
+ # нужно указать, какому доменному имени принадлежит наш конфиг
+ server_name mysite.local;
+
+ # задаём корневую директорию
+ root /data/mysite.local;
+
+ # стартовый файл
+ index index.php index.html;
+
+ # при обращении к статическим файлам логи не нужны, равно как и обращение к fpm
+ # http://mysite.local/static/some.png
+ location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ {
+ access_log off;
+ expires max;
+ }
+
+ # помним про единую точку доступа
+ # все запросы заворачиваются в корневую директорию root на index.php
+ location / {
+ try_files $uri $uri/ /index.php?$query_string;
+ }
+
+ # и наконец правило обращения к php-fpm
+ location ~* .php$ {
+ try_files $uri = 404;
+ fastcgi_split_path_info ^(.+.php)(/.+)$;
+ # fastcgi_pass app: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;
+ }
+}