Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Ansible podstawy — automatyzacja konfiguracji VPS

Co to jest Ansible i dlaczego warto go używać?

Ansible to narzędzie do Infrastructure as Code — pozwala opisać konfigurację serwerów w plikach YAML (playbooks) i uruchomić ją na dziesiątkach maszyn jednocześnie. Kluczowe cechy:

  • Agentless — nie wymaga instalacji agenta na zarządzanych serwerach, używa SSH
  • Idempotentny — uruchomienie playbooka dwa razy daje ten sam wynik (nie duplikuje zmian)
  • Deklaratywny — opisujesz stan docelowy, nie sekwencję kroków
  • Reużywalny — role to gotowe moduły (np. nginx, php-fpm, postgresql)

Powiązane tematy: SSH keys na VPS, Docker na VPS, Nginx vhost konfiguracja oraz UFW firewall. Porównaj serwery VPS na stronie VPS.

Instalacja Ansible

# Ubuntu/Debian (na maszynie sterującej — twój laptop lub CI/CD)
sudo apt update
sudo apt install ansible

# macOS
brew install ansible

# pip (cross-platform)
pip3 install ansible

# Sprawdź wersję
ansible --version

Inventory — lista serwerów

Plik inventory definiuje, którymi serwerami zarządza Ansible:

# inventory/hosts.ini
[webservers]
web1 ansible_host=10.0.0.1 ansible_user=root
web2 ansible_host=10.0.0.2 ansible_user=ubuntu ansible_become=yes

[databases]
db1 ansible_host=10.0.0.3 ansible_user=root

[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
# Test połączenia ze wszystkimi serwerami
ansible all -i inventory/hosts.ini -m ping

# Tylko webservery
ansible webservers -i inventory/hosts.ini -m ping

Pierwszy playbook — konfiguracja serwera bazowego

# playbooks/setup-server.yml
---
- name: Konfiguracja bazowa serwera Ubuntu
  hosts: webservers
  become: yes  # sudo

  vars:
    packages:
      - nginx
      - php8.2-fpm
      - php8.2-mysql
      - php8.2-redis
      - git
      - ufw

  tasks:
    - name: Aktualizacja apt cache
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Instalacja pakietów
      apt:
        name: "{{ packages }}"
        state: present

    - name: Uruchom i włącz Nginx
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Uruchom i włącz PHP-FPM
      service:
        name: php8.2-fpm
        state: started
        enabled: yes

    - name: UFW — zezwól SSH
      ufw:
        rule: allow
        port: '22'
        proto: tcp

    - name: UFW — zezwól HTTP/HTTPS
      ufw:
        rule: allow
        port: "{{ item }}"
        proto: tcp
      loop:
        - '80'
        - '443'

    - name: Włącz UFW
      ufw:
        state: enabled
# Uruchom playbook
ansible-playbook -i inventory/hosts.ini playbooks/setup-server.yml

# Dry run (--check) — pokaż co się zmieni bez wykonania
ansible-playbook -i inventory/hosts.ini playbooks/setup-server.yml --check

Zmienne i szablony Jinja2

# playbooks/nginx-vhost.yml
---
- name: Konfiguracja vhost Nginx
  hosts: webservers
  become: yes

  vars:
    domain: "mojastrona.pl"
    webroot: "/var/www/{{ domain }}"
    php_socket: "/run/php/php8.2-fpm-{{ domain | replace('.', '_') }}.sock"

  tasks:
    - name: Stwórz katalog strony
      file:
        path: "{{ webroot }}"
        state: directory
        mode: '0755'

    - name: Skopiuj szablon konfiguracji Nginx
      template:
        src: templates/nginx-vhost.conf.j2
        dest: "/etc/nginx/sites-available/{{ domain }}"
      notify: Reload Nginx

  handlers:
    - name: Reload Nginx
      service:
        name: nginx
        state: reloaded
# templates/nginx-vhost.conf.j2
server {
    listen 80;
    server_name {{ domain }} www.{{ domain }};
    root {{ webroot }}/public;

    location ~ \.php$ {
        fastcgi_pass unix:{{ php_socket }};
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Roles — reużywalne moduły

Ansible roles to standardowa struktura katalogów dla złożonej konfiguracji:

roles/
└── nginx/
    ├── tasks/
    │   └── main.yml      # Lista tasków
    ├── handlers/
    │   └── main.yml      # Handlery (np. reload nginx)
    ├── templates/
    │   └── nginx.conf.j2 # Szablony Jinja2
    ├── files/
    │   └── ssl.conf      # Statyczne pliki
    ├── vars/
    │   └── main.yml      # Zmienne roli
    └── defaults/
        └── main.yml      # Domyślne wartości zmiennych
# playbooks/site.yml — użycie roli
---
- name: Pełna konfiguracja serwera
  hosts: webservers
  become: yes
  roles:
    - nginx
    - php-fpm
    - certbot
# Pobierz gotowe role z Ansible Galaxy
ansible-galaxy install geerlingguy.nginx
ansible-galaxy install geerlingguy.php
ansible-galaxy install geerlingguy.certbot

Przydatne komendy Ansible

Komenda Co robi
ansible all -m ping Test połączenia ze wszystkimi hostami
ansible web1 -m shell -a "df -h" Uruchom polecenie na konkretnym hoście
ansible-playbook site.yml --limit web1 Uruchom playbook tylko na web1
ansible-playbook site.yml --tags nginx Uruchom tylko taski z tagiem nginx
ansible-playbook site.yml --check Dry run — bez zmian
ansible-playbook site.yml -v Verbose — szczegółowe logi
ansible-vault encrypt secrets.yml Zaszyfruj plik z hasłami