Блог компанії 3v-Hosting

Налаштування веб-сервера на VPS за допомогою Ansible

Адміністрування

8 хв.


Автоматизація інфраструктури - одна з ключових практик у сучасних робочих процесах DevOps. Ansible, інструмент управління конфігурацією та автоматизації, значно спрощує налаштування серверів, сервісів і додатків. Ansible використовується для налаштування веб-серверів на віртуальних приватних серверах (VPS), забезпечуючи відтворюване і масштабоване розгортання.

 

 

 

 

Введення в Ansible і VPS

 

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

Ansible, розроблений компанією Red Hat, - найкращий інструмент автоматизації без агентів на ринку. Він взаємодіє за протоколом SSH. Його плейбуки на основі YAML визначають завдання, що робить його доступним і легко читабельним. Незалежно від того, керуєте ви одним сервером чи тисячами, Ansible забезпечує послідовний і ефективний підхід до автоматизації.

 

 

 

 

Підготовка VPS до розгортання Ansible

 

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

Для початку на віддаленому VPS має бути створений користувач, який не є root, з привілеями sudo. Цей користувач буде використовуватися Ansible для безпечного виконання завдань.

 

Створіть нового користувача:

    adduser deployer
    usermod -aG sudo deployer


Увімкніть автентифікацію за допомогою ключа SSH: Скопіюйте свій відкритий ключ на сервер:

    ssh-copy-id deployer@your-vps-ip


На вузлі управління (ваша локальна машина або хост Ansible) переконайтеся, що Ansible встановлено. Це можна зробити за допомогою pip або вашого менеджера пакетів:

    pip install ansible


Створіть файл інвентаризації (hosts.ini), що описує VPS:

    [web]
    your-vps-ip ansible_user=deployer

 

 

 

 

Написання Ansible Playbook

 

Збірка сценаріїв Ansible - це набір інструкцій з налаштування цільової машини. Для налаштування веб-сервера ця збірка зазвичай містить такі завдання, як установлення веб-сервера (наприклад, Nginx або Apache), налаштування брандмауера і розгортання базового HTML-сайту або динамічного додатка.

 

Ось базовий приклад встановлення Nginx:

    ---
    - name: Configure web server on VPS
      hosts: web
      become: yes
      tasks:
        - name: Update apt cache
          apt:
            update_cache: yes

        - name: Install Nginx
          apt:
            name: nginx
            state: present

        - name: Start and enable Nginx
          service:
            name: nginx
            state: started
            enabled: yes

        - name: Copy custom index.html
          copy:
            src: files/index.html
            dest: /var/www/html/index.html
            mode: '0644'

 

Цей плейбук гарантує, що останню версію Nginx встановлено, запущено й увімкнено під час завантаження системи. Він також демонструє, як скопіювати статичний вміст веб-сайту на сервер.
Структурування каталогу проекту


Добре організована директорія проєкту спрощує обслуговування і спільну роботу команди. Стандартна структура може мати такий вигляд:

    webserver-ansible/
    ├──── hosts.ini
    ├──── site.yml
    ├──── files/
    │ └──── index.html
    ├──── roles/
    │ └──── nginx/
    │ ├──── tasks/
    │ │ │ └──── main.yml
    │ └──── templates/
    └──── vars/
        └──── main.yml

 

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

 

 

 

 

Додавання TLS/SSL за допомогою Let's Encrypt

 

Захист веб-сервера за допомогою SSL необхідний для сучасних веб-сайтів. В Ansible цей процес можна автоматизувати за допомогою ролей спільноти, таких як geerlingguy.certbot.

Щоб використовувати її, включіть роль у ваш файл requirements.yml:

    - src: geerlingguy.certbot


Встановіть роль:

    ansible-galaxy install -r requirements.yml


Потім визначте завдання для автоматичного отримання та налаштування SSL-сертифіката:

    - name: Install and configure Let's Encrypt SSL
      hosts: web
      become: yes
      roles:
        - geerlingguy.certbot
      vars:
        certbot_email: "[email protected]"
        certbot_certs:
          - domains:
              - yourdomain.com

 

Цей крок гарантує, що ваш веб-сервер VPS захищений HTTPS, що покращує SEO та довіру користувачів.

 


 

Інші статті на тему DevOps у нашому Блозі:


    - Шпаргалка з Docker: Основні команди для початку роботи

    - Як перейменувати локальну та віддалену гілку в Git

    - Як створити власний Docker образ

    - Проблеми з продуктивністю VPS або Чому гальмує мій сервер?

 


 

 

Налаштування брандмауера

 

Більшість VPS-провайдерів встановлюють свої екземпляри з мінімальними налаштуваннями брандмауера. Рекомендується явно визначити правила брандмауера, щоб обмежити доступ до служб.

Використання ufw (Uncomplicated Firewall) через Ansible:

    - name: Configure UFW
      hosts: web
      become: yes
      tasks:
        - name: Allow HTTP
          ufw:
            rule: allow
            name: "Nginx Full"
            port: 80
            proto: tcp

        - name: Allow HTTPS
          ufw:
            rule: allow
            name: "Nginx Full"
            port: 443
            proto: tcp

        - name: Enable UFW
          ufw:
            state: enabled
            policy: deny

 

Це дозволить HTTP/HTTPS трафік і заблокує всі інші порти за замовчуванням.

 

 

 

 

Розгортання динамічного веб-додатку

 

Крім обслуговування статичного контенту, на веб-серверах часто розміщуються динамічні додатки, написані на PHP, Python (наприклад, Django, Flask) або Node.js. Ansible може автоматизувати і ці розгортання.

Наприклад, щоб розгорнути додаток Flask:

    - name: Install Python and dependencies
      apt:
        name:
          - python3
          - python3-pip
        state: present

    - name: Install Flask
      pip:
        name: flask

    - name: Copy Flask app
      copy:
        src: files/app.py
        dest: /home/deployer/app.py

    - name: Run Flask app with systemd
      template:
        src: templates/flask.service.j2
        dest: /etc/systemd/system/flask.service
      notify: Restart Flask

 

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

 

 

 

 

Обробка помилок та ідемпотентність

 

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

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

    handlers:
      - name: Restart Nginx
        service:
          name: nginx
          state: restarted

 

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

 

 

 

 

Тестування та контроль версій

 

Управління плейбуками Ansible за допомогою систем контролю версій, таких як Git, є найкращою практикою. Це забезпечує спільну роботу, відстеження історії та інтеграцію CI/CD. Для команд також рекомендується використовувати тестові середовища перед розгортанням змін у виробництві.

Тестування можна проводити за допомогою таких інструментів, як Molecule, які імітують розгортання за допомогою контейнерів для перевірки ролей та ігрових сценаріїв.

 

 

 

 

Масштабування на кілька серверів

 

У міру зростання проектів може знадобитися масштабування веб-серверів. За допомогою Ansible ви можете розширити інвентаризацію, включивши в неї кілька хостів, і використовувати групи для розмежування середовищ (наприклад, staging, production).

Приклад інвентаризації:

    [staging]
    staging-vps-ip

    [production]
    prod-vps-ip1
    prod-vps-ip2


Після цього можна виконувати ігрові книги для обраних груп:

    ansible-playbook -i hosts.ini site.yml --limit production

Така гнучкість робить Ansible надійним інструментом для створення інфраструктури як коду, що підходить як для простих, так і для складних середовищ.

 

 

 

 

Висновок

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

Інтеграція Ansible у робочий процес вашого VPS-хостингу економить час і відповідає сучасним практикам управління інфраструктурою. У міру зростання ваших проектів переваги автоматизації зростають, роблячи Ansible не просто зручністю, а необхідністю.