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
- ans0:
- Pristup:
- SSH pristup svim VPS instancama
- Korisnik s sudo privilegijama na svakom VPS-u
- Mreža:
- Port
22otvoren za SSH - Port
80otvoren za HTTP
- Port
- 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 grupeans0,ans1,ans2su logička imenaansible_hostdefinira stvarne IP adreseansible_usergovori 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: vpsznači svi poslužitelji u grupibecome: truepokreće zadatke s povišenim privilegijama- Svaki zadatak opisuje jednu radnju
- Moduli kao što su
apt,service,filesu 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.
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