Требуемые условия завершения
Задача:
- Project 5 – Разворачивание веб сайта на базе контейнеров Docker
- Проект должен быть выполнен средствами Ansible
- Используйте папку project_5
- В качестве плейбука используйте файл playbook_5.yml в каталоге project_5
- Проект должен включать в себя все необходимые действия по установке Docker
- Проект должен включать в себя все необходимые действия по развертыванию сервера баз данных MySQL (MariaDB), реверс-прокси Nginx и веб сервера Apache с поддержкой PHP и MySQL (MariaDB) на Docker
- Проект должен включать в себя все необходимые действия по развертыванию сайта на контейнере Docker из Git репозитория заказчика.
- Сайт должен быть доступен по протоколам http и https
- Проект должен включать в себя все необходимые действия по импорту базы данных из дампа базы данных заказчика
- Все используемые пароли должны быть выделены в отдельные переменные и зашифрованы
- Проект должен включать в себя все необходимые действия по развертыванию сайта на контейнере Docker из Git репозитория заказчика.
Вариант реализации:
ANS:
- Из под пользователя user переходим в директорию /opt/ansible:
cd /opt/ansible
- Создаём первый playbook_5.yml в директории project_5:
vim project_5/playbook_5.yml
-
- Содержимое playbook_5.yml:
- в переменную git_repo_url - нужно поместить репозиторий заказчика;
- переменные db_root_password и db_user_password - определены в файле /opt/ansible/include_vars/passwords.yml и зашифрованы с помощь ansible-vault (пароль prof);
- сертификаты в первом Play - забираются с RTR на ANS в директорию /opt/ansible/project_5/file/;
- Содержимое playbook_5.yml:
---
- name: We take the certificate and the private key from the RTR
hosts: rtr
become: true
tasks:
- name: We take the certificate and the private key from the RTR
ansible.builtin.fetch:
src: "/opt/ca/{{ item }}"
dest: "file/{{ item }}"
flat: true
with_items:
- "site.company.prof.crt"
- "site.company.prof.key"
- name: Project 5 – Deploying a website based on Docker containers
hosts: Redos
become: true
vars:
git_repo_url: "https://github.com/NewErr0r/preparation_company.prof.git"
tasks:
- name: Include vars
ansible.builtin.include_vars:
dir: /opt/ansible/include_vars
- name: Install docker
ansible.builtin.dnf:
name:
- docker-ce
- python3-docker
state: present
- name: Adding a user to a docker group
ansible.builtin.user:
name: user
group: docker
state: present
- name: Started and enabled docker
ansible.builtin.systemd:
name: docker
enabled: true
state: started
- name: Install Git
ansible.builtin.dnf:
name: git
state: present
update_cache: true
- name: "Git clone repo {{ git_repo_url }}"
ansible.builtin.git:
repo: "{{ git_repo_url }}"
dest: /opt/www
update: false
- name: Creating the necessary directory structure
ansible.builtin.file:
path: "/opt/{{ item }}"
state: directory
recurse: true
group: "{{ ansible_ssh_user }}"
owner: "{{ ansible_ssh_user }}"
with_items:
- mariadb
- nginx
- ssl
- name: Copying the database dump file from /opt/www to /opt/mariadb
ansible.builtin.copy:
src: /opt/www/test_db.sql.gz
dest: /opt/mariadb/
group: "{{ ansible_ssh_user }}"
owner: "{{ ansible_ssh_user }}"
remote_src: yes
- name: Docker run container mariadb for database
community.docker.docker_container:
name: mariadb
image: mariadb:11.2
hostname: mariadb
ports:
- "3306:3306"
volumes:
- /opt/mariadb/:/docker-entrypoint-initdb.d/
env:
MARIADB_ROOT_PASSWORD: "{{ db_root_password }}"
MARIADB_USER: "user"
MARIADB_PASSWORD: "{{ db_user_password }}"
MARIADB_DATABASE: "test_db"
restart_policy: always
- name: Copy Dockerfile for Apache2
ansible.builtin.copy:
src: file/Dockerfile_apache
dest: /opt/www/Dockerfile
group: "{{ ansible_ssh_user }}"
owner: "{{ ansible_ssh_user }}"
- name: Docker build image apache for web-server
community.docker.docker_image:
build:
path: /opt/www
name: apache
source: build
- name: Docker run container apache for web-server
community.docker.docker_container:
name: apache
image: apache
hostname: apache
ports:
- "8080:8080"
volumes:
- /opt/www/:/var/www/html
restart_policy: always
- name: Copy SSL Certificates in /opt/ssl
ansible.builtin.copy:
src: "file/{{ item }}"
dest: /opt/ssl
group: "{{ ansible_ssh_user }}"
owner: "{{ ansible_ssh_user }}"
with_items:
- "site.company.prof.crt"
- "site.company.prof.key"
- name: Copy file site.conf by container nginx in /opt/nginx
ansible.builtin.copy:
src: file/nginx_site.conf
dest: /opt/nginx/site.conf
group: "{{ ansible_ssh_user }}"
owner: "{{ ansible_ssh_user }}"
- name: Docker run container nginx for reverse-proxy-server
community.docker.docker_container:
name: nginx
image: nginx:1.27
hostname: nginx
expose:
- "80"
- "443"
- "8433"
ports:
- "80:80"
- "443:443"
- "8443:8443"
volumes:
- /opt/ssl/:/etc/ssl/private/
- /opt/nginx/:/etc/nginx/conf.d/
restart_policy: always
- Устанавливаем необходимые для работы ansible - коллекции:
- из под пользователя user
ansible-galaxy collection install community.docker
- Создаём директорию для хранения файлов для данного проекта:
mkdir project_5/file
- Создаём Dockerfile для сборки образа веб-сервера Apache2:
vim project_5/file/Dockerfile_apache
-
- Содержимое:
- Создаём конфигурационный файл для обратного-прокси-сервера используя Nginx:
vim project_5/file/nginx_site.conf
-
- Содержимое:
- Таким образом, получается следующая структура для project_5:
- Выполняем запуск playbook-сценария:
- передаём параметр для запроса пароля на дешифрование файла с паролями;
ansible-playbook project_5/playbook_5.yml --ask-vault-pass
-
-
- передаём пароль - prof:
-
-
-
- Результат:
-
- Проверяем на удалённом сервере запущенные контейнеры:
- Проверяем работоспособность контейнера веб-сервера Apache2 на порту 8080:
- Проверяем работоспособность обратного-прокси сервера на Nginx - на порту 80:
- Проверяем работоспособность обратного-прокси сервера на Nginx - на порту 443:
- Проверяем работоспособность обратного-прокси сервера на Nginx - на порту 8443:
Последнее изменение: четверг, 4 июля 2024, 18:17