Palvelinten hallinta H6: Moduulin ensimmäinen versio

Tein harjoitusta to 10.5.2018 klo 13:00-17:00 ja pe 11.5 klo 11:30-19:00 . Käytin Lenovon ideapad Z500 ja Ubuntun 16.04 LTS versiota, joka oli asennettuna koneelle.

Tarkoituksena oli rakentaa oma Salt-moduuli. Päädyin rakentamaan MERN-stackin eli Mongo Database, Express, React ja Node.js.

Harjoituksen tehtävänanto suoraan Tero Karvisen sivulta (http://terokarvinen.com/2018/aikataulu-%E2%80%93-palvelinten-hallinta-ict4tn022-4-ti-5-ke-5-loppukevat-2018-5p):

“a) Kultainen polku. Tee ensimmäinen versio moduulistasi, joka toimii ainakin optimiolosuhteissa. Jos jokin säätö on poikkeuksellisen hankala, voit tehdä sen tässä versiossa käsin, ja dokumentoida ajamasi käskyt. (Valmis moduuli tarvitaan vasta esitykseen ensi viikolla).

b) Kokeile moduuliasi tyhjässä koneessa. Voit käyttää virtualboxia, vagranttia tai livetikkua.

c) Käyttäjätarina (user story): ketkä ovat moduulisi käyttäjät? Mitä he haluavat saada aikaan moduulillasi? Missä tilanteessa he sitä käyttävät? Mitkä ovat tärkeimmät parannukset käyttäjän kannalta, joita moduuliin pitäisi vielä tehdä? Tähän c-kohtaan vain sanallinen vastaus, tämä kohta ei poikkeuksellisesti edellytä testejä tietokoneella.”

Tässä harjoituksessa pohjana on käytetty Tero Karvisen oppitunteja Palvelinten hallinta -kurssilla sekä hänen nettisivujaan: http://terokarvinen.com/.

 a) Ensimmäinen versio

Ensimmäinen versio moduulistani löytyy Github-sivuiltani: https://github.com/jputro/mern-module.

READ.me-tiedostosta löytyy myös ohje, miten tuon saa omalle koneelle. Tällä hetkellä siinä kylläkin oli ongelmana, että run.sh piti ajaa kahteen kertaan, jotta Mongo DB asentui.

Tuo Github-varasto on vielä puutteellinen, sillä sieltä puuttuu npm:n asennus ja käyttöönotto. Lisäksi puuttuu tekstieditorin (Brackets) asennus.

Npm:n kanssa minulla oli paljonkin ongelmia, enkä saanut sitä nyt ollenkaan laitettua tilaksi.

Aloitin luomalla uuden projektin GitHubissa. Annoin sille nimeksi mern-module. Kopioin toisesta GitHub-repositoriostani run.sh-tiedoston:

#!/bin/bash
# Copyright 2018 Tero Karvinen http://TeroKarvinne.com GPL 3

echo "Suolakivi Live USB configuration Starting... jputro/suolakivi"
set -o verbose

echo "Installing Salt and Git..."
sudo apt-get update
sudo apt-get -y install git salt-minion

echo "Retrieving and Applying Settings..."
echo 'master: localhost' | sudo tee /etc/salt/minion
git clone https://github.com/jputro/suolakivi
cd suolakivi/
./highstate.sh

echo "Configuring Live Desktop"
setxkbmap fi
sudo timedatectl set-timezone Europe/Helsinki
git config --global credential.helper "cache --timeout=3600"
git config --global push.default simple
# git config --global user.email "terosstudent@example.com"
# git config --global user.name "Tero's Student"

echo "More tips on https://jaanaputro.wordpress.com"
echo "Done."

Tein GitHubiin kansion /srv/salt/ ja lisäsin sinne kansion nodejs ja tiedoston init.sls. Siirryin nyt terminaalin puolelle ja käsin asennukseen. Päätin aloittaa Nodesta, sillä se oli helpoin ja käsittääkseni se oli hyödyllisintä asentaa ensimmäsienä. Katsoin täältä apua: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-16-04

Ensin siis hain pävitykset “sudo apt-get update” ja sitten “sudo apt-get -y install nodejs“. Kirjoitin nopeasti uuden tiedoston: “nano hei.js” ja sinne laitoin: “console.log(“Hei!”);” ja tallensin. Testasin: “nodejs hei.js” ja terminaaliin tuli “Hei!”. Joten toimi.

Seuraavaksi päätin asentaa Mongodb:n. Käyin lähteenä: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

Aloitin siis hakemalla avaimen:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

Tämän jälkeen piti luoda listatiedosto:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
 Sitten taas päivitys, jotta oikea paketti löytyisi ja sen jälkeen:
sudo apt-get install -y mongodb-org

Tietokannan käynnistys:

sudo service mongod start

Tämän jälkeen kävin lokista katsomassa, että oliko Mongodb käynnistynyt:

tail -F /var/log/mongodb/mongod.log

Siellä näkyi: [initandlisten] waiting for connections on port 27017. Onnistui siis tuokin.

Sekä npm:n että Bracketsin asennus käsin löytyy b-kohdasta, sillä niitä en saanut tällä kertaa vielä automatisoitua. Kun olin päässyt npm:n asennuksessa kohtaan “sudo npm install -g mern-cli“, tuli kuitenkin aluksi virheilmoitus siitä, ettei gitiä löytynyt. Asensin siis sen: “sudo apt-get -y install git” ja kokeilin uudestaan. Nyt onnistui. Seuraavassa kohdassa tuli taas ongelma. Annoin komennon “mern init dev” ja tuli ilmoitus: /usr/bin/env: ‘node’: No such file or directory. Hetken aikaa asiaa tutkittuani, löysin ohjeen, jolla tehdään symlink: https://github.com/nodejs/node-v0.x-archive/issues/3911

Annoin siis komennon: “sudo ln -s /usr/bin/nodejs /usr/bin/node” ja kokeilin uudestaan. Nyt näytti toimivan.

Jotta toistoa ei tosiaan hirveästi tulisi, on npm:n ja Bracketsin loput asennusohjeet b-kohdassa.

Seuraavaksi siis automatisointiin. Loin ensin masterin ja minionin: “sudo apt-get -y install salt-master salt-minion“. Menin “sudoedit /etc/salt/minion” ja annoin sinne tiedoiksi masterin ip-osoitteen sekä koneen omavalintaisen id:n. Sitten käynnistin minionin uudelleen: “sudo systemctl restart salt-minion.service“. Seuraavaksi “sudo salt-key -A” ja hyväksyin minionin avaimen. Testasin: “sudo salt ‘*’ cmd.run ‘echo moi’“. Toimi. Loin uuden kansion: “sudo mkdir -p /srv/salt/“. Tein uuden kansion ja sinne tiedoston: “sudoedit /srv/salt/nodejs/init.sls“. Siitä tuli tällainen:

nodejs:
 pkg.installed

/usr/bin/node:
 file.symlink:
   - target: /usr/bin/nodejs

Poistin nodejs:n “sudo apt-get -y purge nodejs” ja vielä “sudo apt-get autoremove“. Kokeilin tuota tilaa: “sudo salt ‘*’ state.apply nodejs“. Toimi. Lisäsin tuon GitHubiin /srv/salt/nodejs/init.sls -tiedostoon.

Sitten oli Mongodb:n vuoro. Pitkän säätämisen ja parin tunnin tauon jälkeen siitä tuli tällainen:

publickey:
 cmd.run:
   - name: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

list_file:
 cmd.run:
   - name: echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

update:
 cmd.run:
   - name: sudo apt-get update

mongodb_pkg:
 pkg.latest:
   - pkgs:
     - mongodb-org

mongodb_service:
 service.running:
   - name: mongod
   - enable: True

Testasin: “sudo salt ‘*’ state.apply mongodb” ja toimi. Lisäsin tuonkin GitHubiin /srv/salt/mongodb/init.sls -tiedostoon.

Päivitin etusivun run.sh-tiedoston näyttämään tältä:

echo "Mern-module Live USB configuration Starting... jputro/mern-module"
set -o verbose

echo "Installing Salt and Git"
sudo apt-get update
sudo apt-get -y install git salt-minion

echo "Retrieving and Applying Settings"
echo 'master: localhost'|sudo tee /etc/salt/minion
git clone https://github.com/jputro/mern-module
cd mern-module/
bash highstate.sh

echo "Configuring Live Desktop"
setxkbmap fi
sudo timedatectl set-timezone Europe/Helsinki

echo "More tips on https://jaanaputro.wordpress.com"
echo "Done."

Päivitin myös README.md:n. Tein top.sls tiedoston kansioon /srv/salt/, ja siitä tuli tämän näköinen:

base:
 '*':
   - nodejs
   - mongodb

Kopioin vanhasta projektistani highstate.sh-tiedoston ja muokkasin siitä tällaisen:

sudo salt-call --local --file-root srv/salt/ state.highstate --state-output terse

 

b) Kokeile moduulia tyhjässä koneessa

Boottasin koneen live-tikulta ja ensin jouduin asettamaan kielen “setxkbmap fi“, jotta sain nettiyhteyden päälle.

Sitten:

wget https://raw.githubusercontent.com/jputro/mern-module/master/run.sh
bash run.sh

Tuo bash run.sh piti tosiaan ajaa kahteen kertaan, jotta tuo tietokanta asentui. Tämän jälkeen jatkoin käsin: “sudo apt-get -y install npm“. Seurasin ohjetta täältä: http://mern.io/documentation.html.

sudo npm install -g mern-cli
mern init dev
cd dev
npm install
npm start

Tämän jälkeen selaimella osoitteeseen localhost:8000 ja näytti tältä:

h6_testi1

Seuraavaksi tekstieditorin asentaminen. Päätin asentaa Bracketsin, sillä se oli itselle tuttu editori.  Ohje täältä: http://www.webupd8.org/2013/11/install-brackets-in-ubuntu-via-ppa-open.html.
Asennus ja käynnistys:

sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get -y install brackets
brackets

h6_testi2

c) Käyttäjätarina

Käyttäjätarina (user story): ketkä ovat moduulisi käyttäjät? Mitä he haluavat saada aikaan moduulillasi? Missä tilanteessa he sitä käyttävät? Mitkä ovat tärkeimmät parannukset käyttäjän kannalta, joita moduuliin pitäisi vielä tehdä?

Moduulin käyttäjiä ovat Javascriptiin tutustuvat tai kokeneemmat front end -kehittäjät sekä SPA:ta (single page application) toteuttavat. Jos projektin haluaa aloittaa tyhjästä, mutta ei halua asentaa kaikkia softia itse, olisi tämä moduuli hyvä.

Vielä pitää saada npm toimimaan automaatiolla sekä siihen liittyvä mern-cli -paketti. Tämän lisäksi Bracketsin automaatio puuttuu vielä.

Lähteet

Lähteitä on tekstin seassa sitä mukaa, kun niitä on käytetty.

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s