Oma moduli - Palvelinten hallinta viikkotehtävä 7
TLDR
Modulin tarkoitus on automatisoida saltin avulla kaksi kehitysympäristöä vagrant virtuaalikoneisiin. Tämän modulin avulla muutama komento muuttuu käyttövalmiiksi kehitysympäristöksi. Vagrant koneita on kaksi ja kehitysympäristöt ovat Python flask sekä React. Vagrantin käyttöjärjestelmänä toimii Debian 10. Alkuperäisenä suunnitelmana oli tehdä myös Spring boottia, flaskiä sekä nodea varten omat järjestelmät. Tajusin kesken modulin tekemisen, ettei minulla ole nodejs käytöstä aikaisempaa kokemusta, joten päätin vaihtaa sen front-end puolen Reactiksi. Aikarajan lähestyessä springboot sai myös väistyä.
Python flask ympäristö apachen kanssa toimi loistavasti saltin avulla. React ympäristöä tehdessä saltin kanssa oli hieman ongelmia, mutta paikallisen ajon perusteella, mikäli salt masteriin saa paremmin yhteyden pitäisi tilankin toimia.
Projekti on nähtävillä githubissani
Tehtävä A
Kaikki raportit on palautettu, sekä lähteisiin viitattu. Myöhästyneestä palautuksesta keskusteltu sähköpostitse opettajan kanssa.
Virtualboxin ja Vagrantin asennus - Tehtävä B
Aluksi täytyi asentaa virtualbox sekä vagrant. Virtualboxia ei löytä apt paketinhallinnasta, joten täytyi lisätä virtualboxin pakettivarasto järjestelmään. Huomasin myös, että vagrant ei toimi mikäli käyttää virtualboxista uudempaa versiota kuin 6.0
# vbox.list tiedoston sisältö
deb [arch=amd64 signed-by="/etc/apt/trusted.gpg.d/oracle.gpg"] https://download.virtualbox.org/virtualbox/debian buster contrib
Tämä tiedosto täytyy lisätä /etc/apt/sources.list.d/
hakemistoon, jotta paketinhallinta voi käyttää listaa.
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc
$ gpg --dearmor oracle_vbox_2016.asc
$ mv oracle_vbox_2016.asc.gpg oracle.gpg
$ sudo cp oracle.gpg /etc/apt/trusted.gpg.d/oracle.gpg
Näillä komennoilla sai oraclen gpg avaimen muutettua binäärimuotoiseksi, sekä siirrettyä oikeaan paikkaan.
$ sudo apt-get update
Salt tila osa 1
# /srv/salt/vbox/init.sls sisältö
/etc/apt/sources.list.d/vbox.list:
file.managed:
- source: salt://vbox.list
/etc/apt/trusted.gpg.d/oracle.gpg:
file.managed:
- source: salt://oracle.gpg
virtualbox-6.0:
pkg.installed
Tila näyttäisi toimivan tähän asti. Lisäsin vielä edellisen perään
# /srv/salt/vbox/init.sls sisältö
/etc/apt/sources.list.d/vbox.list:
file.managed:
- source: salt://vbox.list
/etc/apt/trusted.gpg.d/oracle.gpg:
file.managed:
- source: salt://oracle.gpg
virtualbox-6.0:
pkg.installed
vagrant:
pkg.installed
Loin kansion testi
käyttäjän kotihakemistoon ja siirryin siihen. Ajoin vagrant init debian/contrib-buster64
sekä vagrant up
komennot sen sisällä.
Ensimmäinen komento loi Vagrant
nimisen tiedoston, joka sisältää kyseisen vagrant koneen asetukset.
Vagrant näyttäisi toimivan myös esimerkillisesti.
Vagrantin konfigurointi
Molemmat järjestelmät voi konfiguroida päällepäin Vagrantfilen kautta, joten lopputuloksena esimerkiksi vagrant up python
nostaisi
python kehitysympäristön omaavan järjestelmän henkiin.
Seuraavaksi tein pieniä muutoksia Vagrantfile
n sisälle. Seurasin
Tero Karvisen ohjeita, kuinka useampi kone määritetään
samasta tiedostosta. Samalla lisäsin myös provisionin, joka asentaa automaattisesti salt-minionin sekä asettaa tarvittavat tiedot /etc/salt/minion
tiedostoon.
Vagrantfilessä täytyi myös määrittää verkon asetuksia, jotta vagrant löytää yhteyden
isäntäjärjestelmään samassa verkossa.
Muokkasin myös vagrantfilen sisällön siten, että siihen voi lisätä useamman koneen samaan tiedostoon. Nimesin tämän ensimmäisen vagpy
ksi
Seuraavaksi vuorossa olikin ympäristön asentaminen. Otin omista salt tiedostoistani mallia apachen sekä postgresin asennukseen.
Näiden lisäksi täytyi asentaa python3-flask
, python3-flask-sqlalchemy
, python3-psycopg2
sekä niiden käyttöön tarvittava libapache2-mod-wsgi-py3
.
Aikaisemmasta raportistani voi katsoa tarkemman esimerkin.
Vagrantfilen sisältö oli seuraavanlainen tähän mennessä. Salt tilassa automatisoin edellisessä kappaleessani linkkaamat ohjeet. Tilassa syötetään suoraan vagrant
käyttäjän kotihakemistoon tietoja. Vagrantfilessä olevat port_forward
it mahdollistavat host järjestelmässä localhost:9000 tai localhost:9001 osoitteista
vagrantin sisällä olevan palvelun tarkastelun.
Salt tilasta tuli pitkä, mutta toimiva.
Esimerkki kuinka suoraa sql kyselyä voi ajaa python flaskin kautta on otettu Tero Karvisen sivuilta
Viimeisestä kuvasta näkee, kuinka molemmista järjestelmistä on tarkastettu, että modwsgi toimii oletetulla tavalla, ja flask on saanut haettua tietokannasta
tarjolla olleen tiedon. Porttien uudelleenohjauskin toimi, sillä host järjestelmän portista 9000
löytyi sama sisältö.
Github ja scriptit
Seuraavaksi loin projektille oman repositorion Githubiin. Tämän olisi voinut tehdä heti ensimmäisenä, mutta parempi myöhään kuin ei milloinkaan.
Asennus scriptejä tein kaksi. Toisen salt-masteria varten ja toisen salt-minionia varten.
Molemmat komennot täytyy ajaa samassa kansiossa, missä loputkin projektiin liittyvät tiedostot ovat. Komennot tulee myös ajaa sudo
n avulla.
Minion asennus scripti kysyy käyttäjältä salt masterin ip osoitetta, sekä haluttua id:tä minioniansa varten.
React
Tein tarvittavat muutokset vagrantfileen, jotta sai toisen koneen reactin nimellä valmiiksi.
Poistin myös ensimmäiseen kuvaan verraten virtualbox__intnet
kohdan, koska se sisälsi kirjoitusvirheen. Mikäli se olisi ollut oikein kirjoitettu, salt-minionin avain
ei olisi tullut vagrantista ulos masterille.
Minionin avain pääsi perille master koneeseen, mutta salt ei silti suostu ajamaan komentoa. Tein valmiiksi salt tilan, jonka pitäisi asentaa kaikki
tarpeellinen react projektia varten, sekä ajaa npx create-react-app
komento, jotta käyttäjää odottaisi valmis alusta jolle rakentaa.
Vaihdoin masterin /etc/salt/master
tiedostosta timeout
arvoa suuremmaksi, toivoen sen olevan avuksi. Tämä kuitenkin johti aina samaan lopputulokseen.
Ensimmäisen vagrantin kohdalla salt komentoon lisäsin -t 300
jotta ajettavan komennon timeout raja muuttuu 300 sekunniksi. Kumpikaan vaihtoehto
ei auttanut tähän tilanteeseen.
Muutin init.sls tiedoston sisältöä hieman, sillä micro editoria ei löydy tavallisesta paketinhallinnasta, mutta se löytyy backporteista, jotka on asetettu vagrant
boksiin jo valmiiksi. Muutin myös cmd.run
komennon runas
osion paikallisen koneen käyttäjäksi vagrantin sijaan. Paikallisesti komento toimi kuten pitikin ja
myproject kansioon siirtymisen jälkeen yarnpkg start
komennolla sai development serverin käyntiin.
Omat ajatukset
Lopputulos tälle modulille ei ollut aivan se, mitä itse olin ajatellut. Pythonin kohdalla asiat onnistuivat melko mutkattomasti ihan tuotantokelpoiseen asennukseen asti. Pythonin kohdalla kohtasin samoja kompastuskiviä, kuin react version kanssa, mutta ne korjaantuivat melko vaivatta timeoutin lisäämisen avulla. React konetta konfiguroidessa vagrant kone ei suostunut kirveelläkään antamaan vastausta masterille. En ole täysin varma johtuuko se masterista, vai minionista. Joka tapauksessa etänä kyseisiä komentoja en pystynyt vagrant koneeseen ajamaan. Paikallisen testin perusteella mestarikoneella kaikki kuitenkin vaikutti toimivan.
Alkuperäinen idea kaikista kolmesta ympäristöstä tuotantokelpoisena ja tietokantayhteydellä oli jälkeenpäin ajateltuna melko kunnianhimoinen. Itseltä ei yksinkertaisesti löytynyt tarpeeksi aikaa antaa tälle projektille, jotta se olisi ollut mahdollinen.