Налаштування Ansible для автоматизації серверів сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Ansible для автоматизації серверів сайту
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування автоматизації серверів Ansible

Ansible — це інструмент управління конфігурацією. Описує бажаний стан серверів у YAML-плейбуках, застосовує його через SSH без агентів на удалених машинах.

Структура проекту

ansible/
├── inventory/
│   ├── production
│   └── staging
├── group_vars/
│   ├── all.yml
│   └── webservers.yml
├── host_vars/
│   └── web01.yml
├── roles/
│   ├── common/
│   ├── nginx/
│   ├── php/
│   └── myapp/
├── playbooks/
│   ├── setup.yml
│   └── deploy.yml
└── ansible.cfg

Inventory

# inventory/production
[webservers]
web01 ansible_host=10.0.0.10
web02 ansible_host=10.0.0.11

[dbservers]
db01 ansible_host=10.0.0.20

[webservers:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/id_rsa

Плейбук налаштування

# playbooks/setup.yml
---
- name: Setup web servers
  hosts: webservers
  become: true

  roles:
    - common
    - nginx
    - php
    - myapp

  vars:
    app_name: myapp
    app_domain: example.com
    php_version: "8.3"

Role: nginx

# roles/nginx/tasks/main.yml
---
- name: Install Nginx
  ansible.builtin.apt:
    name: nginx
    state: present
    update_cache: yes

- name: Deploy Nginx config
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: "/etc/nginx/sites-available/{{ app_name }}"
    owner: root
    group: root
    mode: "0644"
  notify: reload nginx

- name: Enable site
  ansible.builtin.file:
    src: "/etc/nginx/sites-available/{{ app_name }}"
    dest: "/etc/nginx/sites-enabled/{{ app_name }}"
    state: link
  notify: reload nginx

- name: Start and enable Nginx
  ansible.builtin.service:
    name: nginx
    state: started
    enabled: yes
# roles/nginx/handlers/main.yml
---
- name: reload nginx
  ansible.builtin.service:
    name: nginx
    state: reloaded

Role: розгортання додатку

# roles/myapp/tasks/main.yml
---
- name: Create deploy user
  ansible.builtin.user:
    name: deploy
    shell: /bin/bash
    groups: www-data
    append: yes

- name: Clone/update repository
  ansible.builtin.git:
    repo: "https://github.com/user/{{ app_name }}.git"
    dest: "/var/www/{{ app_name }}"
    version: "{{ app_branch | default('main') }}"
    force: yes
  become_user: deploy

- name: Install PHP dependencies
  community.general.composer:
    command: install
    working_dir: "/var/www/{{ app_name }}"
    no_dev: yes
    optimize_autoloader: yes
  become_user: deploy

- name: Copy .env file
  ansible.builtin.template:
    src: .env.j2
    dest: "/var/www/{{ app_name }}/.env"
    owner: deploy
    group: www-data
    mode: "0640"

- name: Run migrations
  ansible.builtin.command:
    cmd: php artisan migrate --force
    chdir: "/var/www/{{ app_name }}"
  become_user: deploy
  changed_when: false

- name: Clear caches
  ansible.builtin.command:
    cmd: "php artisan {{ item }}"
    chdir: "/var/www/{{ app_name }}"
  loop:
    - config:cache
    - route:cache
    - view:cache
  become_user: deploy
  changed_when: false

Плейбук розгортання

# playbooks/deploy.yml
---
- name: Deploy application
  hosts: webservers
  serial: 1         # по одному серверу (rolling)
  become: true

  vars:
    app_branch: "{{ branch | default('main') }}"

  pre_tasks:
    - name: Enable maintenance mode
      ansible.builtin.command:
        cmd: php artisan down --refresh=15
        chdir: "/var/www/{{ app_name }}"

  roles:
    - myapp

  post_tasks:
    - name: Disable maintenance mode
      ansible.builtin.command:
        cmd: php artisan up
        chdir: "/var/www/{{ app_name }}"
# Запуск
ansible-playbook -i inventory/production playbooks/deploy.yml

# Розгортання конкретної гілки
ansible-playbook -i inventory/production playbooks/deploy.yml \
    -e "branch=feature/new-api"

# Dry run
ansible-playbook -i inventory/production playbooks/setup.yml \
    --check --diff

Vault для секретів

# Зашифрувати файл з секретами
ansible-vault encrypt group_vars/all/vault.yml

# Запуск з vault
ansible-playbook playbooks/deploy.yml --ask-vault-pass
# або
ansible-playbook playbooks/deploy.yml --vault-password-file ~/.vault_pass

Лінія часу

Ansible-автоматизація для типового PHP-проекту (setup + deploy playbooks): 3–5 днів.