Задача:

  • Project 6 – Разворачивание приложений с помощью Docker-compose
    • Проект должен быть выполнен средствами Ansible
    • Используйте папку project_6
    • В качестве плейбука используйте файл playbook_6.yml в каталоге project_6
    • Проект должен включать в себя все необходимые действия по установке плагина Docker-compose
    • Проект должен включать в себя все необходимые действия по развертыванию NextCloud на Docker с помощью Docker-compose
      • Использование плагина shell и command НЕ допускается
      • Приложение должно начать работать без дополнительного конфигурирования его пользователем
        • Приложение должен быть доступно по протоколу http, порту 8088 и IP адресу сервера, на котором разворачивается приложение.
      • Файл docker-compose.yml должен быть зашифрован.
    • Проект должен включать в себя все необходимые действия по переконфигурированию реверс-прокси Nginx из Project 5
      • Использование плагина shell и command НЕ допускается
      • Приложение NextCloud должно быть доступно по протоколу https и порту 8443 без ошибки сертификата
        • Используйте имя сайта из Project 5.

Вариант реализации:

  • Из под пользователя user переходим в директорию /opt/ansible:
cd /opt/ansible
  • Создаём первый playbook_6.yml в директории project_6:
vim project_6/playbook_6.yml
    • Содержимое playbook_6.yml:
---
- name: Project 6 – Deploying applications using Docker-compose
  hosts: Redos
  become: true

  tasks:
    - name: Install python3 module pip and docker-compose
      ansible.builtin.dnf:
        name: 
          - docker-compose
          - python3-pip
        state: present

    - name: Pip install docker
      ansible.builtin.pip: 
        name: 
          - docker
          - compose

    - 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: 
        - postgres
        - nextcloud

    - name: Start nextcloud in docker-compose
      community.docker.docker_compose:
        project_src: /opt/ansible/project_6

    - 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 container nginx restart
      community.docker.docker_container:
        name: nginx
        image: nginx:1.27
        hostname: nginx
        restart: true
        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
  • Создаём директорию для хранения файлов для данного проекта:
mkdir project_6/file
  • Создаём конфигурационный файл для обратного-прокси-сервера используя Nginx:
cp project_5/file/nginx_site.conf project_6/file/nginx_site.conf
vim project_6/file/nginx_site.conf
    • Содержимое:
      • добавляем в конец файла действия необходимые действия по переконфигурированию реверс-прокси Nginx из Project 5

  • Описываем docker-compose.yml - для поднятия NextCloud с базой данный PostgreSQL:
ansible-vault edit project_6/docker-compose.yml
    • Содержимое:
version: '2'

services:
  postgres:
    image: postgres:16
    restart: always
    hostname: postgres
    container_name: postgres
    volumes:
      - /opt/postgres/:/var/lib/postgresql/data/
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=nextcloud

  nextcloud:
    image: nextcloud:29
    restart: always
    hostname: nextcloud
    container_name: nextcloud
    ports:
      - "8088:80"
    links:
      - postgres
    volumes:
      - /opt/nextcloud:/var/www/html
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=nextcloud
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=P@ssw0rd
      - NEXTCLOUD_TRUSTED_DOMAINS=192.168.100.20 site.company.prof
  • Таким образом, получается следующая структура для project_6:

  • Выполняем запуск playbook-сценария:
    • передаём параметр для запроса пароля на дешифрование файла с паролями;
ansible-playbook project_6/playbook_6.yml --ask-vault-pass
  • Проверяем запущенные контейнеры на удалённом сервере:

  • Проверяем работоспособность nextcloud по http://<IP-адрес>:8088:

Последнее изменение: пятница, 5 июля 2024, 10:03