├── Makefile ├── README.md └── srcs ├── .env ├── docker-compose.yml └── requirements ├── bonus ├── ftp-server │ ├── Dockerfile │ ├── conf │ │ └── vsftpd.conf │ └── tools │ │ └── configure.sh └── redis │ ├── Dockerfile │ └── tools │ └── configure.sh ├── mariadb ├── .dockerignore ├── Dockerfile ├── conf │ └── 50-server.cnf └── tools │ └── createdb.sql ├── nginx ├── .dockerignore ├── Dockerfile ├── conf │ └── default └── tools │ └── start.sh └── wordpress ├── .dockerignore ├── Dockerfile ├── conf ├── index.html └── www.conf └── tools ├── start.sh └── wp-config.php /Makefile: -------------------------------------------------------------------------------- 1 | all: up 2 | 3 | # Мы можем запустить наши контейнеры с помощью команды docker-compose up, 4 | # которая будет создавать и запускать наши контейнеры и службы в указанном нами порядке 5 | # Создайте контейнеры с помощью команды docker-compose up и флага -d, 6 | # которые будут запускать контейнеры mariadb​​​, wordpress и nginx в фоновом режиме 7 | up: 8 | @mkdir -p /home/${USER}/data/db 9 | @mkdir -p /home/${USER}/data/wp 10 | @docker-compose -f srcs/docker-compose.yml up -d 11 | 12 | # Команда docker-compose down остановит ваши контейнеры, но также удалит остановленные контейнеры, 13 | # а также все созданные сети 14 | down: 15 | @docker-compose -f srcs/docker-compose.yml down 16 | 17 | # Список контейнеров 18 | ps: 19 | @docker-compose -f srcs/docker-compose.yml ps 20 | 21 | # Команда docker system prune — это ярлык, который удаляет образы, контейнеры и сети. 22 | # Тома не удаляются по умолчанию, и вы должны указать флаг --volumes, 23 | # чтобы система Docker сократила количество томов. По умолчанию вам будет предложено продолжить. 24 | # Чтобы обойти подсказку, используйте флаг -f или --force 25 | # Если указан `-a`, также будут удалены все изображения, на которые не ссылается какой-либо контейнер 26 | fclean: down 27 | @docker rmi -f $$(docker images -qa);\ 28 | docker volume rm $$(docker volume ls -q);\ 29 | docker system prune -a --force 30 | sudo rm -Rf /home/${USER}/data/db 31 | sudo rm -Rf /home/${USER}/data/wp 32 | mkdir /home/${USER}/data/db 33 | mkdir /home/${USER}/data/wp 34 | 35 | # Создавайте или перестраивайте сервисы 36 | re: 37 | @mkdir -p ../data/wp 38 | @mkdir -p ../data/db 39 | @docker-compose -f srcs/docker-compose.yml build 40 | docker-compose -f srcs/docker-compose.yml up 41 | 42 | .PHONY: all up down ps fclean re -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Inception 2 | Цели данного проекта: 3 | - Расширение знаний в области системного администрирования с помощью Docker 4 | - Виртуализация нескольких образов Docker на виртуальной машине 5 | ## Обязательная часть 6 | ## Теоретический материал простым языком 7 | 1. [A beginner’s guide to Docker — how to create your first Docker application](https://www.freecodecamp.org/news/a-beginners-guide-to-docker-how-to-create-your-first-docker-application-cc03de9b639f) 8 | 2. [How to Deploy MariaDB Server to a Docker Container](https://severalnines.com/blog/how-deploy-mariadb-server-docker-container) 9 | 3. [Руководство по Docker Compose для начинающих](https://habr.com/ru/company/ruvds/blog/450312/) 10 | 4. [Nginx, Php-Fpm и что это вообще?](https://perfect-inc.com/journal/nginx-php-fpm-i-chto-eto-voobshche/) 11 | 5. [MariaDB](https://ru.wikipedia.org/wiki/MariaDB) 12 | 6. [**Установка WordPress с помощью Docker Compose**](https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose-ru) 13 | 7. [Running MariaDB in a Docker Container](https://quebit.com/askquebit/quebit-products/running-mariadb-in-a-docker-container/#:~:text=Now%20that%20my,the%20bash%20shell%3A) 14 | >Последняя статья пригодится во время сдачи проекта при проверке базы данных (см. [Checklist](https://github.com/mharriso/school21-checklists/blob/master/ng_3_inception.pdf)) 15 | ## Руководство по реализации VirualBox - Debian 10.12 (buster), Containers - debian:buster 16 | 1. [Как установить Debian в VirualBox. Полная пошаговая инструкция](https://poznyaev.ru/debian-v-virualbox/) 17 | >Скачать образ debian-10.12.0-amd64-xfce-CD-1.iso можно [здесь](https://cdimage.debian.org/cdimage/archive/10.12.0/amd64/iso-cd/debian-10.12.0-amd64-xfce-CD-1.iso) 18 |
19 | Если вы работаете на школьных Mac, не забудьте выбрать папку goinfre 20 | 21 | ![](https://user-images.githubusercontent.com/90090114/169686068-c054eef9-8d84-4684-84d1-2f4d92a590eb.png) 22 |
23 | 24 | >Чтобы увеличить размер окна виртуальной машины в MacOS, либо нажмите на окно виртуальной машины, затем на панели основной ОС в верхей левой части экрана нажмите View->Virtual Screen 1->Scale to 200% (autoscaled output), либо измените разрешение экрана в настройках виртуальной машины (возможно, появление торможения виртуальной машины) 25 | 2. Устанавливаем необходимые для работы программы [Vim](https://vitux.com/how-to-install-vim-editor-on-debian/), [Make](https://ru.stackoverflow.com/questions/51452/%D0%92-linux-debian-%D0%BD%D0%B5%D1%82-%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%BE-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-make-%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D1%82%D1%8C), [Git](https://www.digitalocean.com/community/tutorials/how-to-install-git-on-debian-10) 26 | >- Для установки Git достаточно выполнить пункт статьи "Installing Git with Default Packages" 27 | >- [Включить «sudo» для учетной записи пользователя в Debian](https://milq.github.io/enable-sudo-user-account-debian/) 28 | 3. [Настройка SSH в Debian для работы в терминале в основной ОС](https://losst.ru/nastrojka-ssh-v-debian) 29 | >- Достаточно выполнить пункты статьи "Установка SSH в Debian" и "Настройка сервера SSH" (значение порта менять необязательно) 30 | >- [Не забудьте пробросить порт для SSH в VirtualBox](https://comp-security.net/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BA-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9-%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B5-%D0%BF%D0%BE-ssh/) 31 | >>Поле "Адрес гостя" можно оставить пустым 32 | >- При возникновении ошибки "Такое подключение уже существует", удалите файл known_hosts в директории /Users/$USER/.ssh: 33 | >``` 34 | >rm -rf /Users/$USER/.ssh/known_hosts 35 | >``` 36 | >- Для подключения **Visual Studio Code** к виртуальной машине запустите виртуальную машину. Откройте Visual Studio Code на основной ОС. Слева на панели VS Code выберите Extensions (Расширения) и найдите и скачайте расширение "Remote - SSH". Затем в VS Code откройте меню с помощью сочетания клавиш Command+Shift+P, введите "Remote-SSH: Connect to Host..." и нажмите Enter. Там же введите **@localhost:**, затем введите пароль пользователя виртуальной машины, откройте необходимую папку через Explorer->Open Folder слева на панели VS Code, снова введите пароль пользователя виртуальной машины и создайте новый терминал 37 | 4. Изменим доменное имя в Debian. Открываем файл hosts с правами администратора (root): 38 | ``` 39 | sudo vim /etc/hosts 40 | ``` 41 | Далее в терминале вводим пароль администратора (root) и в файле hosts меняем **localhost** на **.42.fr** 42 | >Надеюсь, что Вы полностью выполнили пункт [2](https://github.com/rbiodies/Inception#:~:text=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B) 43 | 5. [Установите Docker CE и Docker Compose на Debian 11/10](https://computingforgeeks.com/install-docker-and-docker-compose-on-debian/) 44 | >- Тестировать установку Docker Сompose пока необязательно 45 | >- [Советую клонировать виртуальную машину в Oracle VM VirtualBox](https://ddok.ru/klonirovat-virtualnuju-mashinu-v-oracle-vm-virtualbox/) (на случай непредвиденных ошибок) 46 | 6. Создаем ожидаемую структуру каталогов, указанную в Subject 47 | 7. [Создаем Makefile](https://habr.com/ru/company/ruvds/blog/450312/#:~:text=%E2%96%8D5.-,%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0,-%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%82%D0%BE%D0%B3%D0%BE%2C%20%D0%BA%D0%B0%D0%BA) 48 | >Сборка проекта начинается с 5 пункта статьи 49 | 8. Создаем файл [docker-compose.yml](https://github.com/rbiodies/inception/blob/main/srcs/docker-compose.yml), который будет содержать инструкции, необходимые для запуска и настройки сервисов 50 | >Вручную создайте директории, указанные в docker-compose.yml->volumes->device (или пропишите их создание в Makefile). Например: 51 | >``` 52 | >mkdir -p /home/${USER}/data/db 53 | >mkdir -p /home/${USER}/data/wp 54 | >``` 55 | 9. MariaDB 56 | - Создаем [базу данных](https://github.com/rbiodies/inception/blob/main/srcs/requirements/mariadb/tools/createdb.sql) в директории srcs/requirements/mariadb/tools 57 | >host_name должен быть либо %, либо Вы должны задать host_name принудительно и использовать его имя 58 | - Создаем файл [50-server.cnf](https://exampleconfig.com/view/mariadb-ubuntu18-04-etc-mysql-mariadb-conf-d-50-server-cnf) в директории srcs/requirements/mariadb/conf 59 | - Создаем [.dockerignore](https://bitworks.software/2018-11-14-dont-ignore-dockerignore-it-is-expensive.html) и [Dockerfile](https://github.com/rbiodies/inception/blob/main/srcs/requirements/mariadb/Dockerfile) — файл Docker, который будет содержать инструкции, необходимые для создания окружения сервера 60 | >Так как контейнер Docker работает полностью изолированно от хост-среды, то, чтобы получить доступ к среде (файлам) контейнера, необходимо в консоли ввести команду: 61 | >``` 62 | >docker exec -it bash 63 | >``` 64 | 10. Nginx 65 | - Создаем [конфигурационный файл](https://github.com/rbiodies/inception/blob/main/srcs/requirements/nginx/conf/default), который описывает виртуальный хост, в директории srcs/requirements/nginx/conf 66 | - Пишем [скрипт](https://github.com/rbiodies/inception/blob/main/srcs/requirements/nginx/tools/start.sh) для создания самозаверяющего сертификата для сервера в директории srcs/requirements/nginx/tools 67 | - Создаем .dockerignore и Dockerfile. В Dockerfile задаем базовый (родительский) образ, прописываем выполнение команд для установки пакетов nginx и openssl в контейнер, указываем на необходимость открыть порт 443, прописываем копирование конфигурационного файла default в директорию /etc/nginx/sites-enabled и скрипта в любую директорию (например, /var/www/) и описываем команду bash со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен 68 | 11. WordPress + настраиваем работу [php-fpm](https://www.ukraine.com.ua/wiki/hosting/configuration/php-fpm/#:~:text=PHP%2DFPM%20(FastCGI%20Process%20Manager,%2B%20Apache%2C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%B0%D1%8F%20%D0%BF%D0%BE%20%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E.)) 69 | - Создаем файл директив пула [www.conf](https://gist.github.com/rvanzee/2352093), позволяющий запускать несколько «пулов» дочерних процессов и иметь разные конфигурации, в директории srcs/requirements/wordpress/conf 70 | - Создаем файл конфигурации [wp-config.php](https://www.wpbeginner.com/beginners-guide/how-to-edit-wp-config-php-file-in-wordpress/), который является частью всех автономных сайтов WordPress, в директории srcs/requirements/wordpress/tools 71 | - Создаем [скрипт](https://github.com/rbiodies/inception/blob/main/srcs/requirements/wordpress/tools/start.sh) в директории srcs/requirements/wordpress/tools. Скрипт может устанавливать интерфейс командной строки для WordPress и создавать двух пользователей, один из которых является администратором Вашей базы данных WordPress 72 | >Имя пользователя администратора не может содержать admin/Admin или administrator/Administrator (например, admin, administrator, Administrator, admin-123, и так далее) (см. Subject) 73 | - Создаем .dockerignore и Dockerfile. В Dockerfile задаем базовый (родительский) образ, прописываем выполнение команд для установки пакетов php7.3, php-mysqli, php-fpm, curl и sendmail с флагом -y в контейнер, указываем на необходимость открыть порт 9000, прописываем копирование конфигурационного файла [www.conf](https://gist.github.com/rvanzee/2352093) в директорию /etc/php/7.3/fpm/pool.d и скрипта в любую директорию (например, /var/www/) и описываем команду bash со скриптом в качестве аргумента, которую нужно выполнить, когда контейнер будет запущен 74 | 12. Запустите контейнеры с помощью Makefile и зайдите на страницу WordPress в браузере своей виртуальной машины в VirtualBox по адресу своего хоста .42.fr 75 | >Если все работает верно, то при первом входе на сайт появится предупреждение. Нажмите "Дополнительно...", затем спуститесь вниз и нажмите "Принять риск и продолжить" 76 | 77 | ![VirtualBox_Debian Clone_26_05_2022_13_56_48](https://user-images.githubusercontent.com/90090114/170475027-c35c2f83-86e6-412c-a74f-78710f77f316.png) 78 | >Ваша тема WordPress может отличаться от темы, представленной на данном скриншоте 79 | ## Бонусная часть 80 | Список бонусов: 81 | - Настройте кеш Redis для своего веб-сайта WordPress, чтобы правильно управлять кешем. 82 | - Настройте контейнер FTP-сервер, указывающий на том вашего сайта WordPress. 83 | - Создайте простой статический веб-сайт на выбранном вами языке, кроме PHP (да, PHP исключен!). Например, сайт-витрина или сайт для представления вашего резюме. 84 | - Настроить Adminer. 85 | - Настройте сервис по вашему выбору, который вы считаете полезным. Во время защиты вам придется обосновать свой выбор. 86 | ## Полезные источники 87 | 1. [Установка Redis средствами Docker](https://www.elma-bpm.ru/KB/article-7354.html#:~:text=docker%20exec%20%2Dit%20%D0%B8%D0%BC%D1%8F_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0_%D1%80%D0%B5%D0%B4%D0%B8%D1%81%20bash) 88 | 2. [Настройка Redis для WordPress](https://wpgutenberg.top/nastrojka-redis-dlja-wordpress/#:~:text=redis%2Dcli-,monitor,-%D0%92%D1%8B%2C%20%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B5%20%D0%B2%D1%81%D0%B5%D0%B3%D0%BE) 89 | 3. [Установка и настройка Vsftpd в linux Debian с загрузкой файлов в каталог пользователя](https://chuzhoy007.ru/ustanovka-i-nastrojka-ftp-servera-vsftpd-na-linux-debian#:~:text=%D1%83%D0%B4%D0%B0%D0%BB%D0%B0%D1%81%D1%8C.%20%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B2%D1%8B%D0%B9%D1%82%D0%B8.-,%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20FTP%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0%20Filezilla,-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20vsftpd%20%D0%B2) 90 | 4. [WordPress (FPM Edition) - Docker](https://github.com/mjstealey/wordpress-nginx-docker#:~:text=similar%20to%20this.-,Adminer,-An%20Adminer%20configuration) 91 | 5. [Установка Docker Portainer](https://losst.ru/ustanovka-docker-portainer) 92 | -------------------------------------------------------------------------------- /srcs/.env: -------------------------------------------------------------------------------- 1 | USER=rbiodies 2 | DOMAIN_NAME=rbiodies.42.fr 3 | # certificates 4 | CERTS_=/etc/ssl/certs 5 | # MYSQL SETUP 6 | MYSQL_ROOT_PASSWORD=root123123 7 | MYSQL_USER=rbiodies 8 | MYSQL_PASSWORD=123123 9 | # WORDPRESS SETUP 10 | WORDPRESS_NAME=wordpress 11 | WORDPRESS_USER_EMAIL=rbiodies@42.fr 12 | WORDPRESS_ROOT_LOGIN=root 13 | WORDPRESS_ROOT_EMAIL=root@42.fr 14 | # FTP SETUP 15 | FTP_USR=rbiodies 16 | FTP_PWD=rbiodies 17 | # REDIS SETUP 18 | REDIS_HOST=redis -------------------------------------------------------------------------------- /srcs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | # Файл docker-compose должен начинаться с тега версии. 2 | # Мы используем "3.9" так как это - самая свежая версия на момент написания 3 | version: '3.9' 4 | 5 | # Следует учитывать, что docker-composes работает с сервисами. 6 | # 1 сервис = 1 контейнер. 7 | # Сервисом может быть система управления контентом, сервер, сервер баз данных... 8 | # Раздел, в котором будут описаны сервисы, начинается с 'services' 9 | services: 10 | mariadb: 11 | # данный элемент указывает имя контейнера 12 | container_name: mariadb 13 | # Ключевое слово "build" позволяет задать 14 | # путь к файлу Dockerfile, который нужно использовать для создания образа, 15 | # который позволит запустить сервис. 16 | # Здесь './requirements/mariadb' соответствует пути к папке mariadb, 17 | # которая содержит соответствующий Dockerfile 18 | build: ./requirements/mariadb 19 | # данный параметр определяет политику перезапуска контейнера 20 | restart: always 21 | # этот параметр указывает Compose, что мы хотим добавить переменные среды из файла с именем .env, 22 | # расположенного в контексте сборки. 23 | # В этом случае в качестве контекста сборки используется наша текущая директория 24 | env_file: .env 25 | # здесь мы монтируем именованный том с названием db в директорию /var/lib/mysql в контейнере. 26 | # Это стандартная директория данных в большинстве дистрибутивов 27 | volumes: 28 | - db:/var/lib/mysql 29 | # данный параметр указывает, что служба приложения будет подключаться к сети project, 30 | # которую мы определим внизу файла 31 | networks: 32 | - project 33 | 34 | wordpress: 35 | container_name: wordpress 36 | build: ./requirements/wordpress 37 | env_file: .env 38 | # мы монтируем том с именем wordpress на точку монтирования /var/www/html/wordpress, 39 | # созданную образом WordPress. 40 | # Использование тома с именем таким образом позволит разделить наш код приложения с другими контейнерами 41 | volumes: 42 | - wp:/var/www/html/wordpress 43 | # мы добавляем контейнер wordpress в сеть project 44 | networks: 45 | - project 46 | # этот параметр гарантирует, что наши контейнеры будут запускаться в порядке зависимости, 47 | # и контейнер wordpress запускается после контейнера mariadb. 48 | # Наше приложение WordPress зависит от наличия базы данных приложения и пользователя, 49 | # поэтому установка такого порядка зависимостей позволит выполнять запуск приложения корректно 50 | depends_on: 51 | - mariadb 52 | 53 | nginx: 54 | container_name: nginx 55 | build: ./requirements/nginx 56 | hostname: localhost 57 | volumes: 58 | - wp:/var/www/html/wordpress 59 | networks: 60 | - project 61 | depends_on: 62 | - wordpress 63 | # Вспомните о том, что в качестве порта в 'nginx' указан порт 443. 64 | # Если мы хотим обратиться к серверу с нашего компьютера (находясь за пределами контейнера), 65 | # мы должны организовать перенаправление этого порта на порт компьютера. 66 | # Сделать это нам поможет ключевое слово 'ports'. 67 | # При его использовании применяется следующая конструкция: [порт компьютера]:[порт контейнера] 68 | # В нашем случае нужно использовать порт компьютера 443 и организовать его связь с портом 69 | # 443 контейнера (так как именно на этот порт сервер 70 | # ожидает поступления запросов). 71 | ports: 72 | # - "8080:80" # http 73 | - "443:443" # https 74 | 75 | redis: 76 | build: requirements/bonus/redis 77 | container_name: redis 78 | ports: 79 | - "6379:6379" 80 | networks: 81 | - project 82 | restart: always 83 | 84 | ftp-server: 85 | build: requirements/bonus/ftp-server 86 | container_name: ftp-server 87 | ports: 88 | - "21:21" 89 | - "21100-21110:21100-21110" 90 | volumes: 91 | - wp:/var/www/html/wordpress 92 | networks: 93 | - project 94 | restart: always 95 | environment: 96 | FTP_USR: ${FTP_USR} 97 | FTP_PWD: ${FTP_PWD} 98 | 99 | portainer: 100 | # image указывает образ, с которого будет запускаться контейнер 101 | image: portainer/portainer-ce:latest 102 | container_name: portainer 103 | # UI over port 9443 and expose a TCP tunnel server over port 8000 104 | ports: 105 | - "8000:8000" 106 | - "9443:9443" 107 | volumes: 108 | - "/etc/localtime:/etc/localtime:ro" 109 | # это сокет Unix, который демон Docker прослушивает по умолчанию, 110 | # и его можно использовать для связи с демоном из контейнера 111 | - "/var/run/docker.sock:/var/run/docker.sock:ro" 112 | # Отключить процессы-контейнеры от получения новых привилегий 113 | # Это означает, что команды, повышающие привилегии, такие как suили sudo, больше не будут работать 114 | security_opt: 115 | - no-new-privileges:true 116 | restart: always 117 | 118 | # adminer - bring up only as needed - bypasses nginx 119 | adminer: 120 | # default port 8080 121 | image: adminer:4 122 | container_name: adminer 123 | # Аналогичен always, за исключением того, что когда контейнер останавливается (вручную или иным образом), 124 | # он не перезапускается даже после перезапуска демона Docker 125 | restart: unless-stopped 126 | networks: 127 | - project 128 | depends_on: 129 | - mariadb 130 | ports: 131 | - "9000:8080" 132 | 133 | # Наш ключ верхнего уровня volumes определяет тома db и wp. 134 | # Когда Docker создает тома, содержимое тома сохраняется в директории файловой системы хоста, 135 | # /var/lib/docker/volumes/, а данным процессом управляет Docker. 136 | # После этого содержимое каждого тома монтируется из этой директории в любой контейнер, использующий том. 137 | # Таким образом мы можем делиться кодом и данными между контейнерами 138 | volumes: 139 | db: 140 | name: db 141 | driver: local 142 | driver_opts: 143 | type: none 144 | o: bind 145 | device: /home/${USER}/data/db 146 | wp: 147 | name: wp 148 | driver: local 149 | driver_opts: 150 | type: none 151 | o: bind 152 | device: /home/${USER}/data/wp 153 | 154 | # Создаваемая пользователем мостовая система project позволяет организовать коммуникацию между нашими контейнерами, 155 | # поскольку они находятся на одном хосте демона Docker. 156 | # Это позволяет организовать трафик и коммуникации внутри приложения, 157 | # поскольку она открывает все порты между контейнерами в одной мостовой сети, скрывая все порты от внешнего мира. 158 | # Таким образом, наши контейнеры mariadb, wordpress и nginx могут взаимодействовать друг с другом, 159 | # и нам нужно будет только открыть порт 440 для внешнего доступа к приложению 160 | networks: 161 | project: 162 | driver: bridge -------------------------------------------------------------------------------- /srcs/requirements/bonus/ftp-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt update 4 | RUN apt install -y vsftpd 5 | 6 | COPY conf/vsftpd.conf /var/www/vsftpd.conf 7 | COPY tools/configure.sh /var/www/configure.sh 8 | 9 | CMD bash /var/www/configure.sh -------------------------------------------------------------------------------- /srcs/requirements/bonus/ftp-server/conf/vsftpd.conf: -------------------------------------------------------------------------------- 1 | # Example config file /etc/vsftpd.conf 2 | # 3 | # The default compiled in settings are fairly paranoid. This sample file 4 | # loosens things up a bit, to make the ftp daemon more usable. 5 | # Please see vsftpd.conf.5 for all compiled in defaults. 6 | # 7 | # READ THIS: This example file is NOT an exhaustive list of vsftpd options. 8 | # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's 9 | # capabilities. 10 | # 11 | # Allow anonymous FTP? (Beware - allowed by default if you comment this out). 12 | anonymous_enable=NO 13 | # 14 | # Uncomment this to allow local users to log in. 15 | local_enable=YES 16 | # 17 | # Uncomment this to enable any form of FTP write command. 18 | write_enable=YES 19 | # 20 | # Default umask for local users is 077. You may wish to change this to 022, 21 | # if your users expect that (022 is used by most other ftpd's) 22 | #local_umask=022 23 | # 24 | # Uncomment this to allow the anonymous FTP user to upload files. This only 25 | # has an effect if the above global write enable is activated. Also, you will 26 | # obviously need to create a directory writable by the FTP user. 27 | #anon_upload_enable=YES 28 | # 29 | # Uncomment this if you want the anonymous FTP user to be able to create 30 | # new directories. 31 | #anon_mkdir_write_enable=YES 32 | # 33 | # Activate directory messages - messages given to remote users when they 34 | # go into a certain directory. 35 | dirmessage_enable=YES 36 | # 37 | # Activate logging of uploads/downloads. 38 | xferlog_enable=YES 39 | # 40 | # Make sure PORT transfer connections originate from port 20 (ftp-data). 41 | connect_from_port_20=YES 42 | # 43 | # If you want, you can arrange for uploaded anonymous files to be owned by 44 | # a different user. Note! Using "root" for uploaded files is not 45 | # recommended! 46 | #chown_uploads=YES 47 | #chown_username=whoever 48 | # 49 | # You may override where the log file goes if you like. The default is shown 50 | # below. 51 | #xferlog_file=/var/log/vsftpd.log 52 | # 53 | # If you want, you can have your log file in standard ftpd xferlog format. 54 | # Note that the default log file location is /var/log/xferlog in this case. 55 | #xferlog_std_format=YES 56 | # 57 | # You may change the default value for timing out an idle session. 58 | #idle_session_timeout=600 59 | # 60 | # You may change the default value for timing out a data connection. 61 | #data_connection_timeout=120 62 | # 63 | # It is recommended that you define on your system a unique user which the 64 | # ftp server can use as a totally isolated and unprivileged user. 65 | #nopriv_user=ftpsecure 66 | # 67 | # Enable this and the server will recognise asynchronous ABOR requests. Not 68 | # recommended for security (the code is non-trivial). Not enabling it, 69 | # however, may confuse older FTP clients. 70 | #async_abor_enable=YES 71 | # 72 | # By default the server will pretend to allow ASCII mode but in fact ignore 73 | # the request. Turn on the below options to have the server actually do ASCII 74 | # mangling on files when in ASCII mode. 75 | # Beware that on some FTP servers, ASCII support allows a denial of service 76 | # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd 77 | # predicted this attack and has always been safe, reporting the size of the 78 | # raw file. 79 | # ASCII mangling is a horrible feature of the protocol. 80 | #ascii_upload_enable=YES 81 | #ascii_download_enable=YES 82 | # 83 | # You may fully customise the login banner string: 84 | ftpd_banner=Welcome to FTP server of inception! 85 | # 86 | # You may specify a file of disallowed anonymous e-mail addresses. Apparently 87 | # useful for combatting certain DoS attacks. 88 | #deny_email_enable=YES 89 | # (default follows) 90 | #banned_email_file=/etc/vsftpd.banned_emails 91 | # 92 | # You may specify an explicit list of local users to chroot() to their home 93 | # directory. If chroot_local_user is YES, then this list becomes a list of 94 | # users to NOT chroot(). 95 | # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that 96 | # the user does not have write access to the top level directory within the 97 | # chroot) 98 | chroot_local_user=YES 99 | allow_writeable_chroot=YES 100 | user_sub_token=$USER 101 | local_root=/var/www/html/wordpress 102 | 103 | #chroot_list_enable=YES 104 | # (default follows) 105 | #chroot_list_file=/etc/vsftpd.chroot_list 106 | # 107 | # You may activate the "-R" option to the builtin ls. This is disabled by 108 | # default to avoid remote users being able to cause excessive I/O on large 109 | # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume 110 | # the presence of the "-R" option, so there is a strong case for enabling it. 111 | #ls_recurse_enable=YES 112 | # 113 | # When "listen" directive is enabled, vsftpd runs in standalone mode and 114 | # listens on IPv4 sockets. This directive cannot be used in conjunction 115 | # with the listen_ipv6 directive. 116 | listen=YES 117 | listen_port=21 118 | listen_address=0.0.0.0 119 | seccomp_sandbox=NO 120 | 121 | # 122 | # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 123 | # sockets, you must run two copies of vsftpd with two configuration files. 124 | # Make sure, that one of the listen options is commented !! 125 | #listen_ipv6=YES 126 | 127 | pasv_enable=YES 128 | pasv_min_port=21100 129 | pasv_max_port=21110 130 | 131 | userlist_enable=YES 132 | userlist_file=/etc/vsftpd.userlist 133 | userlist_deny=NO -------------------------------------------------------------------------------- /srcs/requirements/bonus/ftp-server/tools/configure.sh: -------------------------------------------------------------------------------- 1 | if [ ! -f "/etc/vsftpd.conf.bak" ]; then 2 | 3 | mkdir -p /var/run/vsftpd/empty 4 | 5 | cp /etc/vsftpd.conf /etc/vsftpd.conf.bak 6 | mv /var/www/vsftpd.conf /etc/vsftpd.conf 7 | 8 | # Добавьте FTP_USER, измените его пароль и объявите его владельцем папки wordpress и всех подпапок 9 | adduser $FTP_USR --disabled-password 10 | echo "$FTP_USR:$FTP_PWD" | /usr/sbin/chpasswd &> /dev/null 11 | chown -R $FTP_USR:$FTP_USR /var/www/html/wordpress 12 | 13 | # dev/null выглядит пустым при чтении из него, тогда как данные, записанные на это устройство, просто «исчезают». 14 | echo $FTP_USR | tee -a /etc/vsftpd.userlist &> /dev/null 15 | 16 | fi 17 | 18 | echo "FTP started on :21" 19 | /usr/sbin/vsftpd /etc/vsftpd.conf -------------------------------------------------------------------------------- /srcs/requirements/bonus/redis/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt update 4 | RUN apt install -y redis 5 | 6 | COPY tools/configure.sh /var/www/configure.sh 7 | 8 | CMD bash /var/www/configure.sh -------------------------------------------------------------------------------- /srcs/requirements/bonus/redis/tools/configure.sh: -------------------------------------------------------------------------------- 1 | if [ ! -f "/etc/redis/redis.conf.bak" ]; then 2 | 3 | cp /etc/redis/redis.conf /etc/redis/redis.conf.bak 4 | 5 | # Чтобы изменить IP-адрес во всех файлах зоны, используйте следующую команду: 6 | # -i изменить файл на месте s означает замену 7 | sed -i "s|bind 127.0.0.1|#bind 127.0.0.1|g" /etc/redis/redis.conf 8 | # измените foobared на свой пароль 9 | # sed -i "s|# requirepass foobared|requirepass $REDIS_PWD|g" /etc/redis.conf 10 | # Когда память вашего экземпляра Redis заполнена и поступает новая запись, 11 | # Redis вытесняет ключи, чтобы освободить место для записи, в соответствии с политикой maxmemory вашего экземпляра 12 | sed -i "s|# maxmemory |maxmemory 2mb|g" /etc/redis/redis.conf 13 | # noevicrion 14 | # Эта политика вытеснения говорит Redis не удалять данные при достижении предела памяти. 15 | # Вместо этого Redis вернет ошибку и не сможет выполнить команду добавления данных. 16 | # Эта политика особенно применима, когда вам нужно удалить ключи вручную или 17 | # предотвратить случайную потерю данных. 18 | # Allkeys-LRU 19 | # Вторая политика — allkeys-lru. Этот тип политики вытесняет любой последний использованный ключ или LRU. 20 | # Эта политика предполагает, что вам не нужны недавно использованные ключи, и удаляет их. 21 | # Это предотвращает ошибку Redis в случае ограничения памяти. 22 | sed -i "s|# maxmemory-policy noevicrion|maxmemory-policy allkeys-lru|g" /etc/redis/redis.conf 23 | 24 | fi 25 | 26 | # Сервер Redis вернет ошибку любому клиенту, подключающемуся к внешним петлевым адресам в защищенном режиме 27 | redis-server --protected-mode no -------------------------------------------------------------------------------- /srcs/requirements/mariadb/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /srcs/requirements/mariadb/Dockerfile: -------------------------------------------------------------------------------- 1 | # задаёт базовый (родительский) образ 2 | FROM debian:buster 3 | 4 | # выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов 5 | RUN apt update 6 | RUN apt install -y mariadb-server 7 | 8 | # копирует в контейнер файлы и папки 9 | COPY ./conf/50-server.cnf /etc/mysql/mariadb.conf.d/ 10 | COPY ./tools /var/www/ 11 | 12 | # указывает на необходимость открыть порт 13 | EXPOSE 3306 14 | 15 | RUN service mysql start && mysql < /var/www/createdb.sql && rm -f /var/www/createdb.sql 16 | 17 | # описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен 18 | CMD /usr/bin/mysqld_safe -------------------------------------------------------------------------------- /srcs/requirements/mariadb/conf/50-server.cnf: -------------------------------------------------------------------------------- 1 | # 2 | #These groups are read by MariaDB server. 3 | #Use it for options that only the server (but not clients) should see 4 | # 5 | #See the examples of server my.cnf files in /usr/share/mysql 6 | 7 | #this is read by the standalone daemon and embedded servers 8 | [server] 9 | 10 | #this is only for the mysqld standalone daemon 11 | [mysqld] 12 | 13 | # 14 | # * Basic Settings 15 | # 16 | user = mysql 17 | pid-file = /run/mysqld/mysqld.pid 18 | socket = /run/mysqld/mysqld.sock 19 | port = 3306 20 | basedir = /usr 21 | datadir = /var/lib/mysql 22 | tmpdir = /tmp 23 | lc-messages-dir = /usr/share/mysql 24 | #skip-external-locking 25 | 26 | #Instead of skip-networking the default is now to listen only on 27 | #localhost which is more compatible and is not less secure. 28 | #bind-address = 127.0.0.1 29 | 30 | # 31 | # * Fine Tuning 32 | # 33 | #key_buffer_size = 16M 34 | #max_allowed_packet = 16M 35 | #thread_stack = 192K 36 | #thread_cache_size = 8 37 | # This replaces the startup script and checks MyISAM tables if needed 38 | # the first time they are touched 39 | #myisam_recover_options = BACKUP 40 | #max_connections = 100 41 | #table_cache = 64 42 | #thread_concurrency = 10 43 | 44 | # 45 | # * Query Cache Configuration 46 | # 47 | #query_cache_limit = 1M 48 | query_cache_size = 16M 49 | 50 | # 51 | # * Logging and Replication 52 | # 53 | # Both location gets rotated by the cronjob. 54 | # Be aware that this log type is a performance killer. 55 | # As of 5.1 you can enable the log at runtime! 56 | #general_log_file = /var/log/mysql/mysql.log 57 | #general_log = 1 58 | # 59 | # Error log - should be very few entries. 60 | # 61 | log_error = /var/log/mysql/error.log 62 | # 63 | # Enable the slow query log to see queries with especially long duration 64 | #slow_query_log_file = /var/log/mysql/mariadb-slow.log 65 | #long_query_time = 10 66 | #log_slow_rate_limit = 1000 67 | #log_slow_verbosity = query_plan 68 | #log-queries-not-using-indexes 69 | # 70 | # The following can be used as easy to replay backup logs or for replication. 71 | # note: if you are setting up a replication slave, see README.Debian about 72 | # other settings you may need to change. 73 | #server-id = 1 74 | #log_bin = /var/log/mysql/mysql-bin.log 75 | expire_logs_days = 10 76 | #max_binlog_size = 100M 77 | #binlog_do_db = include_database_name 78 | #binlog_ignore_db = exclude_database_name 79 | 80 | # 81 | # * Security Features 82 | # 83 | # Read the manual, too, if you want chroot! 84 | #chroot = /var/lib/mysql/ 85 | # 86 | # For generating SSL certificates you can use for example the GUI tool "tinyca". 87 | # 88 | #ssl-ca = /etc/mysql/cacert.pem 89 | #ssl-cert = /etc/mysql/server-cert.pem 90 | #ssl-key = /etc/mysql/server-key.pem 91 | # 92 | # Accept only connections using the latest and most secure TLS protocol version. 93 | # ..when MariaDB is compiled with OpenSSL: 94 | #ssl-cipher = TLSv1.2 95 | # ..when MariaDB is compiled with YaSSL (default in Debian): 96 | #ssl = on 97 | 98 | # 99 | # * Character sets 100 | # 101 | # MySQL/MariaDB default is Latin1, but in Debian we rather default to the full 102 | # utf8 4-byte character set. See also client.cnf 103 | # 104 | character-set-server = utf8mb4 105 | collation-server = utf8mb4_general_ci 106 | 107 | # 108 | # * InnoDB 109 | # 110 | # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. 111 | # Read the manual for more InnoDB related options. There are many! 112 | 113 | # 114 | # * Unix socket authentication plugin is built-in since 10.0.22-6 115 | # 116 | # Needed so the root database user can authenticate without a password but 117 | # only when running as the unix root user. 118 | # 119 | # Also available for other users if required. 120 | # See https://mariadb.com/kb/en/unix_socket-authentication-plugin/ 121 | 122 | # this is only for embedded server 123 | [embedded] 124 | 125 | # This group is only read by MariaDB servers, not by MySQL. 126 | # If you use the same .cnf file for MySQL and MariaDB, 127 | # you can put MariaDB-only options here 128 | [mariadb] 129 | 130 | # This group is only read by MariaDB-10.3 servers. 131 | # If you use the same .cnf file for MariaDB of different versions, 132 | # use this group for options that older servers don't understand 133 | [mariadb-10.3] -------------------------------------------------------------------------------- /srcs/requirements/mariadb/tools/createdb.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE wordpress; 2 | CREATE USER 'rbiodies'@'%' IDENTIFIED BY '123123'; 3 | -- Для GRANT ALL привилегий для rbiodies, предоставляющих этому пользователю полный контроль над database wordpress 4 | -- Эти привилегии предназначены для wordpress применяются ко всем таблицам этой базы данных, 5 | -- что обозначено .*следующим образом 6 | GRANT ALL PRIVILEGES ON wordpress.* TO 'rbiodies'@'%'; 7 | -- Сохранение ваших изменений 8 | FLUSH PRIVILEGES; 9 | 10 | -- Чтобы изменить аутентификацию или характеристики ресурса базы данных пользователя базы данных 11 | -- Чтобы разрешить прокси-серверу подключаться в качестве клиента без аутентификации 12 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123123'; -------------------------------------------------------------------------------- /srcs/requirements/nginx/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /srcs/requirements/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt update 4 | RUN apt install -y nginx openssl 5 | 6 | EXPOSE 443 7 | 8 | COPY ./conf/default /etc/nginx/sites-enabled/default 9 | COPY ./tools/start.sh /var/www 10 | 11 | CMD bash /var/www/start.sh -------------------------------------------------------------------------------- /srcs/requirements/nginx/conf/default: -------------------------------------------------------------------------------- 1 | server { 2 | # данный элемент просит Nginx прослушивать порт 80 3 | listen 443 ssl; 4 | listen [::]:443 ssl; 5 | 6 | # этот элемент определяет имя вашего сервера и серверный блок, 7 | # которые должны использоваться для запросов к вашему серверу 8 | server_name rbiodies.42.fr; 9 | 10 | ssl_certificate_key /etc/ssl/private/nginx.key; 11 | ssl_certificate /etc/ssl/certs/nginx.crt; 12 | ssl_protocols TLSv1.3; 13 | 14 | # директива index определяет файлы, 15 | # которые будут использоваться в качестве индексов при обработке запросов к вашему серверу 16 | index index.php index.html index.htm; 17 | # наша директива root назначает имя корневой директории для запросов к нашему серверу. 18 | # Эта директория, /var/www/html/wordpress, 19 | # создается в качестве точки монтирования в момент сборки с помощью инструкций в Dockerfile WordPress. 20 | # Эти инструкции Dockerfile также гарантируют, что файлы релиза WordPress монтируются в этот том 21 | root /var/www/html/wordpress; 22 | 23 | # в этом блоке расположения мы будем использовать директиву try_files для проверки файлов, 24 | # соответствующих отдельным запросам URI. Вместо того, чтобы возвращать по умолчанию статус 404 не найдено, 25 | # мы будем передавать контроль файлу index.php Wordpress с аргументами запроса 26 | location / { 27 | try_files $uri $uri/ /index.php$is_args$args; 28 | } 29 | # этот блок расположения будет обрабатывать PHP-запросы и проксировать эти запросы в наш контейнер wordpress. 30 | # Поскольку наш образ WordPress Docker будет опираться на образ php:fpm, 31 | # мы также добавим параметры конфигурации, принадлежащие протоколу FastCGI, в этот блок. 32 | # Nginx требует наличия независимого процессора PHP для запросов PHP: 33 | # в нашем случае эти запросы будут обрабатываться процессором php-fpm, который будет включать образ php:fpm. 34 | # Кроме того, этот блок расположения содержит директивы FastCGI, переменные и опции, 35 | # которые будут проксировать запросы для приложения WordPress, запущенного в нашем контейнере wordpress, 36 | # задавать предпочитаемый индекс захваченного URI запроса, а также выполнять парсинг URI-запросов 37 | location ~ [^/]\.php(/|$) { 38 | try_files $uri =404; 39 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 40 | fastcgi_pass wordpress:9000; 41 | fastcgi_index index.php; 42 | include fastcgi_params; 43 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 44 | fastcgi_param PATH_INFO $fastcgi_path_info; 45 | } 46 | } -------------------------------------------------------------------------------- /srcs/requirements/nginx/tools/start.sh: -------------------------------------------------------------------------------- 1 | # -openssl 2 | # Утилита для создания сертификата 3 | # -Команда req 4 | # В первую очередь создает и обрабатывает запросы сертификатов 5 | # -x509 6 | # эта опция выводит самозаверяющий сертификат вместо запроса сертификата. 7 | # Обычно это используется для создания тестового сертификата или самозаверяющего корневого ЦС 8 | # -nodes 9 | # если эта опция указана, то если будет создан закрытый ключ, он не будет зашифрован 10 | # days n 11 | # когда используется опция -x509 , она указывает количество дней для сертификации сертификата 12 | # -newkey аргумент 13 | # эта опция создает новый запрос сертификата и новый закрытый ключ. Аргумент принимает одну из нескольких форм. 14 | # rsa:nbits , где nbits — количество битов, генерирует ключ RSA размером nbits 15 | # -keyout имя файла 16 | # это дает имя файла для записи вновь созданного закрытого ключа 17 | # -out имя файла 18 | # Это указывает имя выходного файла для записи или стандартный вывод по умолчанию 19 | # -subj аргумент 20 | # Заменяет поле темы входного запроса указанными данными и выводит измененный запрос 21 | if [ ! -f /etc/ssl/certs/nginx.crt ]; then 22 | echo "Nginx: setting up ssl ..."; 23 | openssl req -x509 -nodes -days 365 -newkey rsa:4096 \ 24 | -keyout /etc/ssl/private/nginx.key \ 25 | -out /etc/ssl/certs/nginx.crt \ 26 | -subj "/C=RU/ST=Tatarstan/L=Kazan/O=wordpress/CN=rbiodies.42.fr"; 27 | echo "Nginx: ssl is set up!"; 28 | fi 29 | 30 | # Run nginx 31 | # Nginx использует daemon off директиву для запуска на переднем плане 32 | nginx -g 'daemon off;'; -------------------------------------------------------------------------------- /srcs/requirements/wordpress/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .DS_Store -------------------------------------------------------------------------------- /srcs/requirements/wordpress/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | RUN apt update 4 | RUN apt install -y php7.3 php-mysqli php-fpm curl sendmail 5 | 6 | EXPOSE 9000 7 | 8 | COPY ./conf/www.conf /etc/php/7.3/fpm/pool.d 9 | COPY ./tools /var/www/ 10 | 11 | # static website 12 | COPY conf/index.html /var/www/index.html 13 | 14 | CMD bash /var/www/start.sh -------------------------------------------------------------------------------- /srcs/requirements/wordpress/conf/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Inception 5 | 6 | 7 | 8 | 9 | 10 |

11 | 12 | 13 | 14 | 15 | 16 |

17 | 18 |

19 | 20 |

21 |

22 | INCEPTION 23 |

24 |

25 | This project aims to broaden your knowledge of system administration by using Docker 26 |

27 | 28 |

29 | Evaluation 30 |

31 |

32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |

46 | 47 |

48 | Contact 49 |

50 |

51 | This is my inception project from the 42 cursus, need help: rbiodies@student.21-school.ru 52 |

53 | 54 |

55 | 56 | 57 |

58 | 59 | 84 | -------------------------------------------------------------------------------- /srcs/requirements/wordpress/conf/www.conf: -------------------------------------------------------------------------------- 1 | ; Запустите новый пул с именем «www». переменная $pool может использоваться в любой директиве и будет заменена на 2 | ; имя пула (здесь "www") вы можете запускать несколько пулов процессов с разными настройками 3 | ; Это параметры, которые можно настроить для каждого пула 4 | [www] 5 | 6 | ; Пользователь Unix процессов 7 | user = www-data 8 | ; Группа Unix процессов 9 | group = www-data 10 | 11 | ; Адрес, по которому можно принимать запросы 12 | listen = wordpress:9000 13 | 14 | ; количество дочерних процессов задается динамически на основе следующих директив: 15 | ; pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers 16 | pm = dynamic 17 | ; максимальное количество создаваемых дочерних процессов 18 | pm.max_children = 5 19 | ; Количество дочерних процессов, созданных при запуске 20 | pm.start_servers = 2 21 | ; Желаемое минимальное количество простаивающих серверных процессов 22 | pm.min_spare_servers = 1 23 | ; Желаемое максимальное количество простаивающих серверных процессов 24 | pm.max_spare_servers = 3 -------------------------------------------------------------------------------- /srcs/requirements/wordpress/tools/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Замените все вхождения строки в файле, перезаписав файл (т.е. на месте): 4 | sed -i "s/listen = \/run\/php\/php7.3-fpm.sock/listen = 9000/" "/etc/php/7.3/fpm/pool.d/www.conf"; 5 | # -R рекурсивное изменение прав доступа для каталогов и их содержимого 6 | chmod -R 775 /var/www/html/wordpress; 7 | # Следующий пример изменит владельца всех файлов и 8 | # подкаталогов в /var/www/html/wordpress каталоге на нового владельца и группу с именем www-data : 9 | chown -R www-data /var/www/html/wordpress; 10 | mkdir -p /run/php/; 11 | touch /run/php/php7.3-fpm.pid; 12 | 13 | # php -S 0.0.0.0:9000 -t /var/www/html/wordpress 14 | 15 | if [ ! -f /var/www/html/wordpress/wp-config.php ]; then 16 | echo "Wordpress: setting up..." 17 | # После проверки требований загрузите файл wp-cli.phar , используя wget или curl: 18 | curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar; 19 | # «+x» означает — установить разрешение на запуск (x) файла для всех пользователей. 20 | chmod +x wp-cli.phar; 21 | # Чтобы использовать WP-CLI из командной строки, набрав wp, сделайте файл исполняемым и 22 | # переместите его куда-нибудь в PATH. Например: 23 | mv wp-cli.phar /usr/local/bin/wp; 24 | cd /var/www/html/wordpress; 25 | # Загружает и извлекает основные файлы WordPress по указанному пути 26 | 27 | # static website 28 | mkdir -p /var/www/html/wordpress/mysite; 29 | mv /var/www/index.html /var/www/html/wordpress/mysite/index.html; 30 | 31 | wp core download --allow-root; 32 | mv /var/www/wp-config.php /var/www/html/wordpress; 33 | echo "Wordpress: creating users..." 34 | # Создает таблицы WordPress в базе данных, 35 | # используя URL-адрес, заголовок и предоставленные данные пользователя-администратора по умолчанию 36 | # --url=<адрес> 37 | # Адрес нового сайта. 38 | # --title=<название сайта> 39 | # Название нового сайта. 40 | # --admin_user=<имя пользователя> 41 | # Имя пользователя-администратора. 42 | # [--admin_password=<пароль>] 43 | # Пароль для пользователя admin. По умолчанию используется случайно сгенерированная строка. 44 | # --admin_email=<электронная почта> 45 | # Адрес электронной почты администратора. 46 | wp core install --allow-root --url=${DOMAIN_NAME} --title=${WORDPRESS_NAME} --admin_user=${WORDPRESS_ROOT_LOGIN} --admin_password=${MYSQL_ROOT_PASSWORD} --admin_email=${WORDPRESS_ROOT_EMAIL}; 47 | # Создает нового пользователя 48 | # 49 | # Логин пользователя для создания. 50 | # 51 | # Адрес электронной почты пользователя для создания. 52 | # [--role=] 53 | # Роль пользователя для создания. По умолчанию: роль по умолчанию 54 | # Возможные значения включают «администратор», «редактор», «автор», «участник», «подписчик». 55 | # [--user_pass=] 56 | # Пароль пользователя. По умолчанию: генерируется случайным образом 57 | wp user create ${MYSQL_USER} ${WORDPRESS_USER_EMAIL} --user_pass=${MYSQL_PASSWORD} --role=author --allow-root; 58 | # Тема для WordPress 59 | wp theme install inspiro --activate --allow-root 60 | 61 | # enable redis cache 62 | sed -i "40i define( 'WP_REDIS_HOST', '$REDIS_HOST' );" wp-config.php 63 | sed -i "41i define( 'WP_REDIS_PORT', 6379 );" wp-config.php 64 | #sed -i "42i define( 'WP_REDIS_PASSWORD', '$REDIS_PWD' );" wp-config.php 65 | sed -i "42i define( 'WP_REDIS_TIMEOUT', 1 );" wp-config.php 66 | sed -i "43i define( 'WP_REDIS_READ_TIMEOUT', 1 );" wp-config.php 67 | sed -i "44i define( 'WP_REDIS_DATABASE', 0 );\n" wp-config.php 68 | 69 | wp plugin install redis-cache --activate --allow-root 70 | wp plugin update --all --allow-root 71 | 72 | echo "Wordpress: set up!" 73 | else 74 | echo "Wordpress: is already set up!" 75 | fi 76 | 77 | wp redis enable --allow-root 78 | 79 | echo "Wordpress started on :9000" 80 | /usr/sbin/php-fpm7.3 -F -------------------------------------------------------------------------------- /srcs/requirements/wordpress/tools/wp-config.php: -------------------------------------------------------------------------------- 1 | ZoP9Wkx bn.4/tlj)Bw%o`/*|W`vWr%@w7TF?%qx zYDPbki7pxW-l@L-t%bMzsGl@IYiM*snAf-PMR{EnwY[j?Pi|%IuDAV)+s=N:H~C'); 51 | define('LOGGED_IN_KEY', '(#VoxhH?=1s)_-Vh%MSnkN|r0_Tw]P@LwrglG |jlG~X$Z^f6M@eNx{;xP2|6X%6I.1]55wmn#-%:Q05Ekp[c=K+2y^xl)f=2'); 53 | define('AUTH_SALT', 'tD]>>[,KjyNo9[kNpVZI#%@#}=`8$zy $X_={Z^%6i|&Y]nmb(/6gi@5{46Q)2`-'); 54 | define('SECURE_AUTH_SALT', '55;6OND[.l+_wM,de.(+~9?txSdd>W:#jTKl1}1N;``'); 57 | 58 | /**#@-*/ 59 | 60 | /** 61 | * WordPress Database Table prefix. 62 | * 63 | * You can have multiple installations in one database if you give each 64 | * a unique prefix. Only numbers, letters, and underscores please! 65 | */ 66 | $table_prefix = 'wp_'; 67 | 68 | /** 69 | * For developers: WordPress debugging mode. 70 | * 71 | * Change this to true to enable the display of notices during development. 72 | * It is strongly recommended that plugin and theme developers use WP_DEBUG 73 | * in their development environments. 74 | * 75 | * For information on other constants that can be used for debugging, 76 | * visit the documentation. 77 | * 78 | * @link https://wordpress.org/support/article/debugging-in-wordpress/ 79 | */ 80 | define( 'WP_DEBUG', false ); 81 | 82 | /* That's all, stop editing! Happy publishing. */ 83 | 84 | /** Absolute path to the WordPress directory. */ 85 | if ( ! defined( 'ABSPATH' ) ) { 86 | define( 'ABSPATH', __DIR__ . '/' ); 87 | } 88 | 89 | /** Sets up WordPress vars and included files. */ 90 | require_once ABSPATH . 'wp-settings.php'; --------------------------------------------------------------------------------