Automatizacija postavljanja VPS-a s Ansibleom: Inventar i prva playbook skripta | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

Automatizacija postavljanja VPS-a s Ansibleom: Inventar i prva playbook skripta

Uvod

Ansible je alat za automatizaciju otvorenog koda koji se koristi za upravljanje konfiguracijom, implementaciju aplikacija i osiguravanje infrastrukture. Povezuje se s poslužiteljima putem SSH-a i ne zahtijeva instalaciju agenta na udaljenim strojevima, što ga čini jednostavnim i sigurnim za korištenje. Uobičajeni slučajevi upotrebe uključuju automatizaciju postavljanja poslužitelja, održavanje konzistentnosti konfiguracija i implementaciju aplikacija na više sustava odjednom.

U ovom vodiču postavljate Ansible na svom lokalnom računalu i koristite ga za automatizaciju konfiguracije više VPS instanci. Umjesto da ručno konfigurirate svaki poslužitelj, definirate zadatke jednom i primjenjujete ih svugdje. Kreirate inventar, pišete svoju prvu playbook datoteku i implementirate radni web aplikacijski stack.

Razumijevanje osnovnih koncepata Ansible-a

Ne pišete skriptu koja pokreće naredbe jednu po jednu. Opisujete kako bi vaši poslužitelji trebali izgledati nakon što playbook završi.

U ovom vodiču koristite samo nekoliko osnovnih komponenti. Inventar datoteka definira vaše VPS poslužitelje i kako se Ansible povezuje s njima. Playbook je mjesto gdje opisujete željeno stanje vaših poslužitelja. Unutar playbooka, zadaci definiraju pojedinačne dijelove tog željenog stanja, kao što su instalirani paketi, pokrenute usluge ili konfiguracijske datoteke.

Najvažniji koncept ovdje je deklarativnost. Umjesto da pišete točne naredbe kao što biste to učinili u shell skripti, opisujete rezultat koji želite. Na primjer, ne kažete Ansible-u da pokrene naredbu za instalaciju Nginxa. Definirate da Nginx mora biti instaliran. Ne kažete mu da ručno pokrene uslugu. Definirate da usluga mora biti pokrenuta i omogućena. Ansible tada odlučuje koje su radnje potrebne da bi se postiglo to stanje.

Ovo je drugačije od tradicionalnog pristupa gdje biste ručno pokretali naredbe u određenom redoslijedu. U takvim skriptama morate sami riješiti svaku moguću situaciju. S Ansible-om, logika je ugrađena u module koje koristite, kao što su upravljanje paketima, kontrola usluga, upravljanje datotekama i HTTP provjere.

Još jedan ključni koncept je idempotentnost. To znači da pokretanje iste playbook datoteke više puta ne uzrokuje nepotrebne promjene. Ako sustav već odgovara željenom stanju, Ansible ga ostavlja nepromijenjenim. Na primjer, ako je Nginx već instaliran, neće ga ponovno instalirati. Ako konfiguracijska datoteka već odgovara onome što ste definirali, neće biti prepisana.

Zbog deklarativnosti i idempotentnosti, možete sigurno pokrenuti playbook više puta. Prilikom prvog pokretanja, Ansible instalira i konfigurira sve. Prilikom sljedećih pokretanja, samo provjerava stanje sustava i mijenja ga ako je potrebno.

Preduvjeti

  • Ciljana publika: Početnici sistem administratori
  • Procijenjeno vrijeme: ~40–60 minuta
  • Operativni sustav: Debian 13 na lokalnom računalu i svim VPS čvorovima
  • VPS čvorovi:
    • ans0: 192.168.10.10
    • ans1: 192.168.10.11
    • ans2: 192.168.10.12
  • Pristup:
    • SSH pristup svim VPS instancama
    • Korisnik s sudo privilegijama na svakom VPS-u
  • Mreža:
    • Port 22 otvoren za SSH
    • Port 80 otvoren za HTTP
  • Lokalno računalo:
    • Instaliran Python 3
    • Pristup internetu
  • Krajnji cilj: Do kraja ovog vodiča automatski ćete konfigurirati više VPS poslužitelja, instalirati Nginx, implementirati PocketBase i učiniti ga dostupnim putem web poslužitelja.

Korak 1: Instalirajte Ansible na lokalnom računalu

Ansible se pokreće na vašem lokalnom računalu i povezuje se s udaljenim poslužiteljima. Instalirate ga samo jednom.

Ažurirajte popise paketa:

sudo apt update

Instalirajte Ansible:

sudo apt install ansible -y

Provjerite instalaciju:

ansible --version

Očekivani rezultat: Vidite informacije o verziji. Ovo potvrđuje da je Ansible instaliran i spreman.

Korak 2: Pripremite SSH pristup

Ansible koristi SSH za povezivanje s poslužiteljima. Kako biste izbjegli upisivanje lozinki svaki put, koristite SSH ključeve.

Generirajte SSH ključ:

ssh-keygen

Pritisnite Enter za prihvaćanje zadanih postavki. Ovo stvara par ključeva:

  • Privatni ključ ostaje na vašem računalu
  • Javni ključ se kopira na poslužitelje

Kopirajte ključ na VPS:

ssh-copy-id <YOUR_USERNAME>@192.168.10.10

ssh-copy-id <YOUR_USERNAME>@192.168.10.11

ssh-copy-id <YOUR_USERNAME>@192.168.10.12

Testirajte pristup:

ssh <YOUR_USERNAME>@192.168.10.10

Očekivani rezultat: Prijavljujete se bez unosa lozinke.

Korak 3: Kreirajte Ansible projekt i inventar

Ansible koristi inventar datoteku kako bi znao koje poslužitelje upravljati.

Kreirajte direktorij projekta:

mkdir ~/ansible-vps

cd ~/ansible-vps

Kreirajte inventar datoteku:

nano inventory.ini

Umetnite sljedeći sadržaj u inventar datoteku:

[vps] ans0 ansible_host=192.168.10.10 ans1 ansible_host=192.168.10.11 ans2 ansible_host=192.168.10.12 [vps:vars] ansible_user=<YOUR_USERNAME> ansible_python_interpreter=/usr/bin/python3

Objašnjenje:

  • [vps] je naziv grupe
  • ans0, ans1, ans2 su logička imena
  • ansible_host definira stvarne IP adrese
  • ansible_user govori Ansible-u kojim korisnikom se prijaviti

Testirajte povezivost:

ansible -i inventory.ini vps -m ping

Očekivani rezultat: Svaki poslužitelj vraća "pong".

Korak 4: Kreirajte svoju prvu playbook datoteku

Playbook je datoteka u kojoj opisujete zadatke koje želite pokrenuti na poslužiteljima.

Kreirajte datoteku:

nano playbook.yml

Umetnite sljedeći sadržaj u playbook datoteku:

- name: Configure VPS nodes hosts: vps become: true tasks: - name: Test connectivity ping: - name: Update apt cache apt: update_cache: yes - name: Upgrade packages apt: upgrade: dist - name: Install Nginx apt: name: nginx state: present - name: Ensure Nginx is running service: name: nginx state: started enabled: true - name: Test HTTP connectivity uri: url: http://127.0.0.1/ return_content: no - name: Create directory for PocketBase file: path: /opt/pocketbase/pb_public state: directory - name: Install unzip apt: name: unzip state: present - name: Download PocketBase get_url: url: https://github.com/pocketbase/pocketbase/releases/download/v0.36.7/pocketbase_0.36.7_linux_amd64.zip dest: /opt/pocketbase/pocketbase.zip - name: Unpack PocketBase unarchive: src: /opt/pocketbase/pocketbase.zip dest: /opt/pocketbase/ remote_src: yes - name: Create Pocketbase index.html copy: dest: /opt/pocketbase/pb_public/index.html content: | <h1>Pocketbase</h1> - name: Create systemd service copy: dest: /etc/systemd/system/pocketbase.service content: | [Unit] Description=PocketBase Service After=network.target [Service] Type=simple ExecStart=/opt/pocketbase/pocketbase serve --http=127.0.0.1:8090 Restart=always [Install] WantedBy=multi-user.target - name: Reload systemd command: systemctl daemon-reexec - name: Enable and start PocketBase service: name: pocketbase enabled: true state: started - name: Configure Nginx site copy: dest: /etc/nginx/sites-available/pocketbase content: | server { listen 80; server_name _; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - name: Enable Nginx site file: src: /etc/nginx/sites-available/pocketbase dest: /etc/nginx/sites-enabled/pocketbase state: link - name: Remove default site file: path: /etc/nginx/sites-enabled/default state: absent - name: Restart Nginx service: name: nginx state: restarted - name: Check PocketBase availability uri: url: http://127.0.0.1:8090/_/ return_content: no

Objašnjenje:

  • hosts: vps znači svi poslužitelji u grupi
  • become: true pokreće zadatke s povišenim privilegijama
  • Svaki zadatak opisuje jednu radnju
  • Moduli kao što su apt, service, file su ugrađeni u Ansible

Korak 5: Pokrenite playbook

ansible-playbook -i inventory.ini playbook.yml

Očekivani rezultat: Zadatci se izvršavaju na svim čvorovima bez grešaka.

Info

Prvo pokretanje može potrajati nekoliko minuta ovisno o brzini mreže.

Verifikacija

Provjerite web poslužitelj:

curl http://192.168.10.10/

Očekivani rezultat: Vraća se HTTP odgovor.

Otvorite u pregledniku: http://192.168.10.10/_/

Očekivani rezultat: Učitava se sučelje PocketBase-a.

Ponovite za druge čvorove.

Vraćanje promjena

sudo systemctl stop pocketbase

sudo systemctl disable pocketbase

sudo rm /etc/systemd/system/pocketbase.service

sudo rm -rf /opt/pocketbase

sudo apt remove nginx unzip -y

Ponovno učitajte systemd:

sudo systemctl daemon-reload

Rješavanje problema

  • SSH ne uspijeva: provjerite ključeve i korisnika
  • Ansible ping ne uspijeva: osigurajte mrežnu povezanost između domaćina
  • Problemi s Nginx-om: systemctl status nginx
  • Problemi s PocketBase-om: journalctl -u pocketbase

Zaključak

Instalirali ste alat za automatizaciju Ansible, kreirali inventar i napisali svoju prvu playbook datoteku. Automatizirali ste implementaciju Nginx-a i PocketBase-a na više poslužitelja.

Sljedeći koraci:

  • Koristite role za bolju strukturu
  • Dodajte varijable i predloške
  • Konfigurirajte HTTPS

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA