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