Oma moduli

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änanto

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

updatedrepos

installed

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

saltlocal

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

vagrantinstall

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.

vagrantinitup

vagrantssh

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 Vagrantfilen 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 vagpyksi

vagfile

testping

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.

vagfile2

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_forwardit mahdollistavat host järjestelmässä localhost:9000 tai localhost:9001 osoitteista vagrantin sisällä olevan palvelun tarkastelun.

salt1

salt2

salt3

Salt tilasta tuli pitkä, mutta toimiva.

testingpy

Esimerkki kuinka suoraa sql kyselyä voi ajaa python flaskin kautta on otettu Tero Karvisen sivuilta

prodpy

home

prodconf

prodwsgi

finished

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.

master

minion

Molemmat komennot täytyy ajaa samassa kansiossa, missä loputkin projektiin liittyvät tiedostot ovat. Komennot tulee myös ajaa sudon 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.

reactvagrant

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.

errors

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.

modified

worklocal

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.

Linkkejä