Блог компанії 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: "your-email@example.com"
        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 не просто зручністю, а необхідністю.

Вразливості WordPress та як їх виявити
Вразливості WordPress та як їх виявити

Вразливості WordPress на практиці: як їх виявляють за допомогою WPScan, де шукати слабкі місця та які помилки найчастіше призводять до злому сайту та втрати кон...

10 хв
Налаштування WireGuard на VPS
Налаштування WireGuard на VPS

Покрокова інструкція з налаштування WireGuard на VPS: встановлення, генерація ключів, конфігурація сервера та клієнта, запуск VPN і вирішення типових проблем. Ш...

14 хв