See kodutöö ei anna valmis koodi - see annab probleemid lahendamiseks! Kasutage lab'is õpitud oskusi ja Ansible dokumentatsiooni, et ehitada LAMP stack samm-sammult.
Põhimõte: Igal sammul antakse ülesanne, kontrollviis ja nõuanded. Kood peate ise kirjutama!
Probleem: Vajate inventory faili, mis töötab nii localhost'iga kui ka teise serveriga.
Nõuded:
- Looge YAML formaat inventory (kasutage lab'is õpitut)
- Gruppi nimi: webservers
- Localhost peab kasutama ansible_connection: local
- Jätke kommentaaridesse näide teise serveri lisamiseks
Fail:inventory/hosts.yml
Kontroll:ansible-inventory --list peaks näitama teie servereid
🔍 Uurige: Käivitage ansible webservers -m ping - kas töötab?
Probleem: LAMP stack vajab palju konfiguratsiooni. Kus muutujaid hoida?
Nõuded: Looge group_vars/webservers.yml ja defineerige:
- MySQL root parool
- Rakenduse andmebaasi nimi
- Rakenduse kasutaja nimi ja parool
- PHP pakettide loend
- Document root tee
- Rakenduse nimi ja versioon
Näpunäide: Vaadake lab'i näiteid muutujate kohta
🤔 Mõelge: Millised muutujad peaksid olema "salajased"? Kuidas neid hiljem kaitsta?
Kontroll:ansible webservers -m debug -a "var=hostvars[inventory_hostname]" - kas näete oma muutujaid?
----name:LAMP Stack Setuphosts:all# <- VIGA 1: vale gruppbecome:truetasks:-name:Update cachepackage:update_cache:true# <- VIGA 2: vale moodul-name:Install Apacheapt:name:apache# <- VIGA 3: vale paketi nimistate:presentnotify:restart apache-name:Start Apachesystemd:# <- VIGA 4: miks mitte service?name:apache2state:startedhandlers:# <- VIGA 5: handlers vale kohas?-name:restart apacheservice:name:apache2state:restarted```bash**Ülesanne:**1. Kopeerige see kood faili `lamp-stack.yml`2. Leidke kõik 5+ viga3. Parandage need4. Lisage proper YAML vormistus (`---` alguses)**Kontroll:** `ansible-playbook --syntax-check lamp-stack.yml`🔍 **Uurige:** Mis vahe on `package` ja `apt` moodulil? Kumb on parem?---## 4. MySQL seadistamine### 4.1 MySQL installimine ja turvamine**Probleem:** MySQL vajab spetsiaalset seadistamist. Lab'is nägite lihtsaid näiteid.**Teie ülesanne:**1. Installige `mysql-server` ja `python3-pymysql`2. Käivitage MySQL teenus3. Seadke MySQL root kasutajale parool (kasutage group_vars muutujat)4. Looge rakenduse andmebaas5. Looge rakenduse kasutaja õigustega ainult sellele andmebaasile**Moodulid, mida vajate:**- `package` või `apt`- `service`- `mysql_user`- `mysql_db`**Nõuanded:**- MySQL root parooli seadistamine on keeruline - uurige `login_unix_socket` parameetrit- `mysql_user` moodul vajab `login_user` ja `login_password` parameetrit- Kasutage `priv:"database_name.*:ALL"`õigusteks📚 **Uurige dokumentatsiooni:** `ansible-doc mysql_user`**Kontroll:**```bashmysql -u [teie_kasutaja] -p [teie_andmebaas] -e "SELECT 'Success!' as test;"```text🔍 **Debugimise küsimus:** Kui MySQL ühendus ei tööta, kuidas te viga otsite?---## 5. Template'ide loomine### 5.1 Puudulik PHP template**Antudon template algus. Lõpetage see:****Fail:** `templates/info.php.j2````php<?php// {{ app_name }} - Info leht// TODO:lisage kuupäev kasutades ansible muutujatecho "<h1>{{ ??? }}</h1>"; // TODO:kasutage app_name muutujatecho "<h2>Serveri info</h2>";// TODO:lisage hostname, IP, OS infoecho "<h2>MySQL test</h2>";$host = 'localhost';$database = '{{ ??? }}'; // TODO:kasutage õiget muutujat$username = '{{ ??? }}'; // TODO:kasutage õiget muutujat$password = '{{ ??? }}'; // TODO:kasutage õiget muutujattry {// TODO:kirjutage PDO ühenduse test// Kui õnnestub, näidake "Ühendus töötab!"// Kui ebaõnnestub, näidake error'it}catch(PDOException $e) {// TODO:error handling}// TODO:lisage phpinfo() kutse?>```bash**Ülesanne:**1. Asendage kõik `{{ ??? }}` õigete muutujatega2. Implementeerige MySQL PDO ühenduse test3. Lisage proper error handling4. Lisage phpinfo() väljund**Nõuanded:**-Vaadake lab'i template näiteid-Ansible faktid:`{{ansible_hostname}}`,`{{ansible_default_ipv4.address}}`-PHP PDO:`new PDO("mysql:host=$host;dbname=$database", $username, $password)`**Kontroll:** PHP ei tohi sisaldada `{{ ??? }}` märke### 5.2 HTML põhileht loomine**Probleem:** Vajate ilusat HTML lehte, mis näitab LAMP stack'i infot.**Nõuded:**-Kasutage template'i `templates/index.html.j2`-Näidake serveri infot (hostname, OS, kuupäev)-Lisage link `/info.php` lehele-Kasutage CSS'i, et see oleks ilus-Kõik info peab tulema Ansible muutujatest/faktidest💡 **Inspiratsioon:** Vaadake lab'i HTML näidet, aga ärge kopeerige!🏆 **Väljakutse:** Kas oskate lisada JavaScripti, mis näitab praegust kellaaega?**Kontroll:** HTML peab valideeruma (saate kontrollida https://validator.w3.org/)---## 6. Playbook lõpetamine### 6.1 Tasks'ide implementeerimine**Nüüdimplementeerige playbook tasks'id:****Vajalikud sammud (kirjutage ise task'id):**1. **Süsteemi ettevalmistus** - pakettide cache uuendamine2. **Apache seadistamine** - installimine, käivitamine, document root loomine3. **MySQL seadistamine** - (juba tegite sektsioonis 4)4. **PHP seadistamine** - installimine koos moodulikega5. **Template'ide deployment** - kopeerige template'id õigetesse kohtadesse6. **Firewall** - lubage HTTP trafik7. **Valideerimised** - kontrollige, et kõik töötab💡 **Nõuanne:** Iga task vajab:-Selget `name` välja-Õiget moodulit-Proper parameetreid-Vajadusel `notify` handler'eid**Tüüpilisedmoodulid:**-`package`/`apt` - pakettide installimine-`service` - teenuste haldamine-`file` - kaustade loomine-`template` - template'ide kopeerimine-`uri` - HTTP testid-`ufw` - firewall reeglid🤔 **Küsimus:** Millises järjekorras task'id käivitada? Miks?### 6.2 Handlers ja error handling**Probleem:** Playbook peab olema robust ja käsitlema vigu.**Nõuded:**1. **Handlers** - Apache ja MySQL taaskäivitamise jaoks2. **Error handling** - kasutage `failed_when`, `ignore_errors`, `retries`3. **Valideerimised** - kontrollige teenuste olekut ja HTTP vastuseid4. **Conditional tasks** - näiteks ainult Debian/Ubuntu süsteemides**Näitederror handling'ust:**```yaml-name:Test HTTPuri:url:http://localhostretries:3delay:10register:http_testfailed_when:http_test.status != 200```text🤔 **Mõelge:** Millal kasutada `ignore_errors:yes` ja millal mitte?---## 7. Testimine ja debugimine### 7.1 Systematic testimine**Probleem:** Kuidas te veendute, et teie playbook töötab?**Teie testiplaan:**1. **Syntax check** - ?2. **Dry run** - ?3. **Tegelik käivitamine** - ?4. **Manuaalne testimine** - ?5. **Idempotency test** - ?**Täitke küsimärgid ja tehke iga test!**💡 **Nõuanne:** Iga testi järel dokumenteerige tulemused**Debugimise küsimused:**- Kui Apache ei käivitu, kuidas te viga otsite?- Kui MySQL ühendus ei tööta, millised logid vaatate?- Kui template ei genereeru, kuidas te seda debugite?### 7.2 Vigade parandamine**Antud on levinud vead. Kas tunnete neid ära?****Viga 1:**
Probleem: Keegi teine peab teie projekti kasutama. Mis infot ta vajab?
Nõutavad sektsioonid:
1. Projekt kirjeldus - mis see teeb?
2. Eeltingimused - mida vaja installimisel?
3. Kasutamise juhend - sammhaaval käivitamine
4. Konfiguratsioon - kuidas muutujaid muuta?
5. Testimine - kuidas kontrollida, et töötab?
6. Troubleshooting - levinud probleemid ja lahendused
7. Projekti struktuur - failide selgitus
Test: Andke README.md kolleegile - kas ta saab projekti käivitada?
Esitage GitHub repository link kursuse süsteemi järgmiste nõuetega:
Repository peab sisaldama:
- Täielikku funktsionaalset Ansible projekti
- README.md täieliku dokumentatsiooniga
- Screenshot'e või video tõendusmaterjali
- Deployment logisid
Repository peab olema:
- Public (et õppejõud saaks üle vaadata)
- Korrektselt nimetatud (ansible-lamp-practice või sarnane)
- Professionaalselt organiseeritud
Peab olema võimalik:
- Repository kloonida
- Juhendite järgi setup teha
- Playbook edukalt käivitada
- Tulemust valideerida
🎯 Edu! Alustage kohe ja küsige abi, kui jääte kinni!