Avtomatizacija nastavitve VPS z Ansible: Inventar in Prva Igralna Knjiga | INTROSERV
EUR
european

EUR

usa

USD

Slovenia Sl
Ex. VAT Ex. VAT 0%

Avtomatizacija nastavitve VPS z Ansible: Inventar in Prva Igralna Knjiga

Uvod

Ansible je odprtokodno orodje za avtomatizacijo, ki se uporablja za upravljanje konfiguracij, nameščanje aplikacij in zagotavljanje infrastrukture. Povezuje se s strežniki prek SSH in ne zahteva namestitve agenta na oddaljenih napravah, kar ga naredi enostavnega in varnega za uporabo. Pogosti primeri uporabe vključujejo avtomatizacijo nastavitve strežnikov, ohranjanje skladnosti konfiguracij in nameščanje aplikacij na več sistemih hkrati.

V tem vodiču nastavite Ansible na svojem lokalnem računalniku in ga uporabite za avtomatizacijo konfiguracije več VPS instanc. Namesto da bi vsak strežnik konfigurirali ročno, enkrat definirate naloge in jih uporabite povsod. Ustvarite inventar, napišete svoj prvi playbook in namestite delujoč spletni aplikacijski sklad.

Razumevanje osnovnih konceptov Ansible

Ne pišete skripta, ki izvaja ukaze enega za drugim. Opisujete, kako naj vaši strežniki izgledajo po končanem playbooku.

V tem vodiču uporabljate le nekaj osnovnih komponent. Inventarna datoteka definira vaše VPS strežnike in kako se Ansible poveže z njimi. Playbook je mesto, kjer opisujete želeno stanje vaših strežnikov. Znotraj playbooka naloge definirajo posamezne dele tega želenega stanja, kot so nameščeni paketi, delujoče storitve ali konfiguracijske datoteke.

Najpomembnejši koncept tukaj je deklarativnost. Namesto da bi pisali točne ukaze, kot bi jih v shell skriptu, opisujete rezultat, ki ga želite. Na primer, ne poveste Ansible, da zažene ukaz za namestitev Nginxa. Definirate, da mora biti Nginx nameščen. Ne poveste mu, da ročno zažene storitev. Definirate, da mora biti storitev delujoča in omogočena. Ansible nato odloči, katere akcije so potrebne za dosego tega stanja.

To je drugače od tradicionalnega pristopa, kjer bi ročno izvajali ukaze v določenem vrstnem redu. V takih skriptih morate sami obravnavati vsako možno situacijo. Z Ansible je logika vgrajena v module, ki jih uporabljate, kot so upravljanje paketov, nadzor storitev, upravljanje datotek in HTTP preverjanja.

Drug ključni koncept je idempotentnost. To pomeni, da večkratno izvajanje istega playbooka ne povzroča nepotrebnih sprememb. Če sistem že ustreza želenemu stanju, ga Ansible pusti nespremenjenega. Na primer, če je Nginx že nameščen, ga ne bo ponovno namestil. Če konfiguracijska datoteka že ustreza tistemu, kar ste definirali, je ne bo ponovno zapisal.

Zaradi deklarativnosti in idempotentnosti lahko playbook varno izvajate večkrat. Ob prvem zagonu Ansible namesti in konfigurira vse. Pri naslednjih zagonih le preveri stanje sistema in ga spremeni, če je to potrebno.

Predpogoji

  • Ciljna publika: Začetniki sistemski administratorji
  • Ocenjeni čas: ~40–60 minut
  • Operacijski sistem: Debian 13 na lokalnem računalniku in vseh VPS vozliščih
  • VPS vozlišča:
    • ans0: 192.168.10.10
    • ans1: 192.168.10.11
    • ans2: 192.168.10.12
  • Dostop:
    • SSH dostop do vseh VPS instanc
    • Uporabnik s sudo privilegiji na vsakem VPS
  • Mreža:
    • Port 22 odprt za SSH
    • Port 80 odprt za HTTP
  • Lokalni računalnik:
    • Python 3 nameščen
    • Dostop do interneta
  • Končni cilj: Do konca tega vodiča boste samodejno konfigurirali več VPS strežnikov, namestili Nginx, namestili PocketBase in ga naredili dostopnega prek spletnega strežnika.

Korak 1: Namestite Ansible na lokalni računalnik

Ansible teče na vašem lokalnem računalniku in se povezuje z oddaljenimi strežniki. Namestite ga le enkrat.

Posodobite sezname paketov:

sudo apt update

Namestite Ansible:

sudo apt install ansible -y

Preverite namestitev:

ansible --version

Pričakovani rezultat: Vidite informacije o različici. To potrjuje, da je Ansible nameščen in pripravljen.

Korak 2: Pripravite SSH dostop

Ansible uporablja SSH za povezovanje s strežniki. Da bi se izognili vnosu gesel vsakič, uporabite SSH ključe.

Ustvarite SSH ključ:

ssh-keygen

Pritisnite Enter, da sprejmete privzete nastavitve. To ustvari par ključev:

  • Zasebni ključ ostane na vašem računalniku
  • Javni ključ se kopira na strežnike

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

Preizkusite dostop:

ssh <YOUR_USERNAME>@192.168.10.10

Pričakovani rezultat: Prijavite se brez vnosa gesla.

Korak 3: Ustvarite Ansible projekt in inventar

Ansible uporablja inventarno datoteko, da ve, katere strežnike upravljati.

Ustvarite projektno mapo:

mkdir ~/ansible-vps

cd ~/ansible-vps

Ustvarite inventarno datoteko:

nano inventory.ini

Vstavite naslednjo vsebino v inventarno datoteko:

[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

Pojasnilo:

  • [vps] je ime skupine
  • ans0, ans1, ans2 so logična imena
  • ansible_host določa prave IP naslove
  • ansible_user pove Ansible, kot kateri uporabnik naj se prijavi

Preizkusite povezljivost:

ansible -i inventory.ini vps -m ping

Pričakovani rezultat: Vsak strežnik vrne "pong".

Korak 4: Ustvarite svoj prvi Playbook

Playbook je datoteka, kjer opisujete naloge, ki jih želite izvesti na strežnikih.

Ustvarite datoteko:

nano playbook.yml

Vstavite naslednjo vsebino v datoteko playbook:

- 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

Pojasnilo:

  • hosts: vps pomeni vse strežnike v skupini
  • become: true izvaja naloge z višjimi privilegiji
  • Vsaka naloga opisuje eno dejanje
  • Moduli kot apt, service, file so vgrajeni v Ansible

Korak 5: Zaženite Playbook

ansible-playbook -i inventory.ini playbook.yml

Pričakovani rezultat: Naloge se izvedejo na vseh vozliščih brez napak.

Info

Prvi zagon lahko traja nekaj minut, odvisno od hitrosti omrežja.

Preverjanje

Preverite spletni strežnik:

curl http://192.168.10.10/

Pričakovani rezultat: Vrnjen je HTTP odgovor.

Odprite v brskalniku: http://192.168.10.10/_/

Pričakovani rezultat: Naloži se vmesnik PocketBase.

Ponovite za druga vozlišča.

Vračanje sprememb

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 naložite systemd:

sudo systemctl daemon-reload

Odpravljanje težav

  • SSH ne uspe: preverite ključe in uporabnika
  • Ansible ping ne uspe: zagotovite omrežno povezavo med gostitelji
  • Težave z Nginx: systemctl status nginx
  • Težave s PocketBase: journalctl -u pocketbase

Zaključek

Namestili ste orodje za avtomatizacijo Ansible, ustvarili inventar in napisali svoj prvi playbook. Avtomatizirali ste nameščanje Nginx in PocketBase na več strežnikih.

Naslednji koraki:

  • Uporabite vloge za boljšo strukturo
  • Dodajte spremenljivke in predloge
  • 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