Linux palvelimet
Linux Server Course - Linux palvelimet ict4tn021-3014 - alkukevät 2021.
Haaga-Helia ammattikorkeakoulu
ICT4TN021-3014 - Alkukevät 2021
Opettajana: Tero Karvinen.
Harjoitus 1 - Linux livetikku - 24.1.2021
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, versio 2004, OsBuild 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Rufus, versio 3.13.1730
Tehtävä A
a) Tee oma Linux livetikku. Kokeile sitä jossain muussa kuin koulun koneessa. _Tämä kohta ei edellytä asentamista – jos kuitenkin asennat, ota ensin varmuuskopiot. Jos ehdit tehdä tikun jo tunnilla, voit poikkeuksellisesti raportoida muistin perusteella jälkikäteen, mutta muista silloin mainita muistinvaraisuudesta.
Linuxin valinta ja lataus
Opettajan suosituksesta valitsemme 'Debian xfce nonfree' version. Ladataan 'debian-live-10.7.0-amd64-xfce+nonfree.iso' tiedosto sivustolta https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/current-live/amd64/iso-hybrid/
Asennus
Muistitikkuna toimii 2014 ostettu 'DataTraveler 100 g2 16GB', vanhassa ja paljon käytetyssä tikussa on aina riski, että se ei kunnolla toimi. Muistitikusta tehdään buuttaustikku Rufus, https://rufus.ie/, ohjelman versio 3.13.1730 avulla. Rufus päälle ja aloitetaan, valitaan 'Device' tippuvalikosta muistitikku ja 'Boot selection' valikosta etukäteen ladattu debian .iso tiedosto.
Ja näin tikku on valmis, seuraavaksi kokeilemaan miten se toimii. Jos asennuksessa esintyisi ongelmia, kannattaisi kokeilla uutta tikkua tai eri ohjelmaa jolla asennustiedosto tikulle tehdään.
Tehtävä B
b) Listaa testaamasi koneen rauta (‘sudo lshw -short -sanitize’).
Tietokoneen käynnistys livetikulta
Vaikka livetikku on tietokoneessa kiinni, niin käynnistys tapahtuu kuitenkin kovalevyltä, eli tässä tapauksessa Windows10 käynnistyy. Tämän voi kyseisessä Lenovon tietokoneessa ohittaa painamalla F12 näppäintä käynnistyksen yhteydessä. Näin pääsemme itse valitsemaan mistä tietokone käyttöjärjestelmän käynnistää, valitsin USB:n. Jossain tietokoneissa tämä valinta voi olla BIOS:in kautta estetty.
Nyt pääsemme valitsemaan mitä haluamme tikulta tehdä, tässä tapauksessa emme halua asentaa Debiania, vaan pyörittää sitä tikulta ns. livetilassa, joten valitsemme 'Debian GNU/Linux Live' vaihtoehdon.
Tässä se sitten on, Debian Linux.
Terminaali
Vaikka mahdollisuus olisi käyttää graafista liittymää, niin kurssin idea on käyttää komentoriviä ja suorittaa komennot sitä kautta.
Käynnistetään lshw ohjelma joka kertoo meille tietoja tietokoneesta:sudo lshw -short -sanitize
Tehtävä C
c) Asenna kolme itsellesi uutta ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa.
Ohjelmien asennus
Suurimman käytön Windowsin ohjelmista saa Office paketti, tätä korvaamaan valitaa LibreOffice. Elokuvien ja sarjojen katseluun valitaan saman kuin Windowsin puolella, VLC player. Ja selaimeksi Chromen tilalle sama, mutta ei ihan, eli Chromium. Ensin päivitämme paketinhallinnan, jotta löydämme haluamme ohjelmat ja sen jälkeen aennetaan jokainen ohjelma.
$ sudo apt-get update
$ sudo apt-get install libreoffice
$ sudo apt-get install vlc
$ sudo apt-get install chromium
Tehtävä D
d) Mitä lisenssiä kukin näistä ohjelmista käyttää? Selitä lyhyesti, mitä oikeuksia ja velvolisuuksia tuosta lisenssistä seuraa.
Lisenssit
LibreOffice on Mozilla Public License Version 2.0 lisenssin alla ja VLC käyttää hyvin samankaltaista GNU General Public (GPL) lisenssiä. Chromium on hieman monimutkaisempi, Googlen tekemä osuus on Berkeley Software Distributionin (BSD) lisenssillä, muiden tekemät lisäyksen ovat useiden lisenssien alla, käytössä on mm. MIT, GPL ja LGPV. Näiden lisenssien erojen ymmärtäminen vaatii hieman enemmän tutkimusta.Tehtävä E
e) Listaa käyttämäsi ohjelmat (esim. MS Word), kunkin ohjelman käyttötarkoitus (esim. Tekstinkäsittely) ja vastaava vapaa Linux-ohjelma (esim. LibreOffice Writer). Jos johonkin tarkoitukseen ei löydy vapaata Linux-ohjelmaa, listaa sekin.
Windows ohjelmia, niiden käyttötarkoitus ja vastineita Linuxin puolella
Excel - Taulukonkäsittely - LibreOffice calc
Paint - Kuvankäsittely - Gimp
Visual Studio Code - Lähdekoodieditori - Saman saa asennettua Linuxille
Harjoitus 2 - Komentokehote - 30.1.2021
Tässä harjoituksessa harjoiteltiin komentoterminaalin käyttöä. Tehtävässä käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Tehtävä A
a) Aiheuta lokiin kaksi eri tapahtumaa: yksi esimerkki onnistuneesta ja yksi esimerkki epäonnistuneesta tai kielletystä toimenpiteestä. Analysoi rivit yksityiskohtaisesti.
Onnistunut tapahtuma
Aloitetaan päivittämällä paketinhallinta komentokehotteen kautta komennolla sudo apt-get update
.
Tämän jälkeen siirrytään lokien puolelle tutkimaan miltä ne näyttää. Lokit löytyvät kohdasta /var/log
.
Komennolla $ ls
näemme mitä tiedostoja ja kansioita tuo kansio sisältää.
tail
komennolla, joka näyttää 10 viimeisintä merkintää
$ sudo tail auth.log
.
Jan 30 12:14:38 localhost sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/apt-get update
Jan 30 12:14:38 localhost sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 30 12:14:40 localhost sudo: pam_unix(sudo:session): session closed for user root
Tammikuun 30päivä kello 12:14, terminaalia käyttäen, home/user kansiossa olessaan on käyttäjä halunut suorittaa komennon apt-get update
.
Oikeudet on annettu, tehtävä on suoritettu ja suorituksen jälkeen oikeudet on poistettu.
Epäonnistunut tapahtuma
Kirjaudutaan ulos ja yritetään kirjautua sisälle väärällä salasanalla. Tämän jälkeen kirjaudutaan oikealla ja mennään tarkastamaan samasta lokitiedostosta kuin edellisessä kohdassa.
Jan 30 12:56:46 localhost lightdm: pam_unix(lightdm:auth): authentication failure; logname= uid=0 euid=0 tty=:1 ruser= rhost= user=user
Päivämäärä, se että salasana on väärä ja aivan viimeisenä se, että käyttäjä, jolla yritettiin kirjautua oli nimeltä user.
Tehtävä b
Seurataan sivuston https://www.geeksforgeeks.org/custom-commands-linux-terminal/ ohjeita, jossa kerrotaan omien komentokehotekomentojen tekemisestä. Ensin avataan .bashrc tiedosto nano tekstinkäsittelyohjelmalla komenollab) Tee unelmien apt-get -komento: yksi komentorivi, joka asentaa suosikkiohjelmasi.
nano .bashrc
. Sielä mennään sivun loppuun ja lisäsin sinne oma komento:
alias omaohjelma='sudo apt-get update; sudo apt-get install audacity -y'
. Tallennus ctrl+o ja exit ctrl+x
$ omaohjelma
.
Tehtävä c
Asennetan ensin hupiohjelma,c) Asenna komentokehotteen paketinhallinnasta kolme itsellesi uutta komentorivillä toimivaa ohjelmaa. Kokeile kutakin ohjelmaa sen pääasiallisessa käyttötarkoituksessa.
$ sudo apt-get install cowsay
ja sen jälkeen käynnistetään tämä, $ cowsay lisää linuxia
Seuraavaksi peli, $ sudo apt-get install ninvaders
. Katsotaapas miltä tämä näyttää, melkein samaa tasoa kuin Cyberpunk 2077.
Koitetaanpas viimeiseksi jonkinlaista oikeasti hyödyllistä ohjelmaa, $ sudo apt-get install bc
ja taas käynnistykseen pelkkä $ bc
. Tämä on niinkin monimutkainen ohjelma kuin laskin, lasketaanpas siis vähän laskuja.
Harjoitus 3 - Apache-weppipalvelin - 4-8.2.2021
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Mozilla Firefox 78.5.0esr
Tehtävä A
Apachen asennus alkaa pakettihallinnan päivittämisellä,a) Asenna Apache, laita käyttäjien kotisivut (http://example.com/~tero) toimimaan. Testaa esimerkkikotisivulla.
$ sudo apt-get update
ja sen jälkeen apache asennus $ sudo apt-get install apache2
. Avataan selaimesta localhost ja tarkastetaan toimiiko.
$ sudo systemctl restart apache2
. Komento käynnistää apachen uudelleen. Katsotaanpa uusiksi localhost.
$ mkdir public_html
ja kansion sisään sivuston etusivu nano tekstinkäsittelyohjelmalla $ nano index.html
ja kirjoitetaan pieni testiviesti tuohon teksitiedostoon. Tiedoston tallennus ja sulku 'ctrl+o' ja 'ctrl+x'
$ whoami
vastaus: user
. Nyt tiedämme mikä on sivuston nimi, mennään siis osoitteeseen localhost/~user
Seuraavaksi lähdemmen seuraamaan https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-debian-8 sivuston neuvoja jotta saadaan sivu http://example.com/
toimimaan paikallisesti.
$ sudo mkdir -p /var/www/example.com/public_html
ja tuon kansion sisälle index.html tiedosto $ nano /var/www/example.com/index.html
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
Avataan tuo juuri tehty tiedosto
$ sudo nano /etc/apache2/sites-available/example.com.conf
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
-> DocumentRoot /var/www/example.com/public_html
$ sudo a2ensite example.com.conf
ja otetaan apachen oma pois käytöstä $ sudo a2dissite 000-default.conf
$ sudo systemctl restart apache2
.
Muutetaan host tiedostoa niin että example.com menee meidän omalle koneelle
Tehtävä B
Käydään sivulla localhost/~user/index.html ja localhost/~user/kissavideot.html. Ainoa sivu joka ei toimi on tuo viimeinen, kissavideot.htmlb) Surffaa oman palvelimesi weppisivuja. Etsi Apachen lokista esimerkki onnistuneesta (200 ok) sivulatauksesta ja epäonnistuneesta (esim 404 not found) sivulatauksesta. Analysoi rivit.
sudo tail var/log/apache2/access.log
saamme seuraavat mielenkiintoiset rivit esille:
127.0.0.1 - - [06/Feb/2021:09:29:03 +0000] "GET /~user/index.html HTTP/1.1" 200 301 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
127.0.0.1 - - [06/Feb/2021:09:29:15 +0000] "GET /~user/kissavideot.html HTTP/1.1" 404 488 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
Otetaan yksi tapahtuma tarkempaan tutkintaan:
127.0.0.1
Käyttäjän ip osoitteeseen
[06/Feb/2021:09:29:03 +0000]
Tapahtuman päivämäärä ja kellonaika
"GET /~user/index.html HTTP/1.1"
Mitä on haluttu tehdä (GET) ja millä protokollalla (HTTP)
200
Koodi jolla pystymme selvittämään mitä tapahtui
"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0"
Tietoja käyttäjästä: selaimen ja käyttöjärjestelmä
localhost/~user/index.html
antoi koodin 200
, joka tarkoittaa että kaikki meni hyvin, käyttäjä sai sivun näkyviinsä.
localhost/~user/kissavideot.html
antoi koodin 404
, joka taas kertoo meille että sen nimistä sivua ei ole olemassa.
Tehtävä F
Menään kansioonf) Tee palvelimella ajettava weppiohjelma, joka tekee käyttäjälle jonkin yksinkertaisen laskun (esim. painoindeksi BMI)
home/user/public_html
ja muutetaan sielä olevaa index.html tietostoa. Lisätään tiedostoon javascriptillä tehty painoindexilaskuri.
Harjoitus 4 - Julkinen palvelin - 12-15.2.2021
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Tehtävä A
a) Tee alusta lähtien oma julkinen palvelin Internetiin.
DigitalOcean
Valitaan opettajan suosituksesta DigitalOcean palvelun, https://www.digitalocean.com/. Rekisteröinnin jälkeen pääsemme aloittamaan palvelimen luonnin 'Droplets' valikosta.
Prosessori: 1vCPU
Muisti: 1GB
Kovalevy:25GB ssd
Siirtomäärä/kk: 1TB
Käyttöjärjestelmä: Debian10
Hinta: 5USD (4,13EUR) /kk, (12.2.2021)
Yhteys palvelimeen
Tässä osiossa seurataan Tero Karvisen 'First Steps on a New Virtual Private Server' ohjetta, https://terokarvinen.com/2017/first-steps-on-a-new-virtual-private-server-an-example-on-digitalocean/. Ohje on tehty Ubuntu 16.04 varten, mutta uskon että se ajaa tässä hyvin asiansa. Ensin avataan komentokehote ja otetaan yhteys tuohon yllä luotuun palvelimeen, tällä hetkellä käytössä on vain root käyttäjä ja sille annettiin salasana Dropletin luomisen yhteydessässh root@104.248.199.154
.
$ sudo apt-get update
$ sudo apt-get install ufw
$ sudo ufw allow 22/tcp
$ sudo ufw enable
Uuden käyttäjän lisääminen.
Luodaan 'johan'
$ sudo adduser johan
Annetaan käyttäjälle johan hyvä ja turvallinen salasana
Lisätään johan sudo ja adm rymään, näin käyttäjä saa sudo ja admin oikeudet
$ sudo adduser johan sudo
sudo adduser johan adm
$ ssh johan@104.248.199.154
$ groups
tarkastan että käyttäjä johan kuuluu oikeisiin ryhmiin.
$ sudo apt-get update
$ sudo apt-get upgrade
Root käyttäjän sulkeminen
Komennnolla$ sudo usermod –lock root
lukitaan rootin käyttö. Ja sisäänkirjautuminen estetään muokkaamalla sshd_config tiedostoa. $ sudoedit /etc/ssh/sshd_config
Muutetaan kohta PermitRootLogin yes
-> PermitRootLogin no
$ sudo service ssh restart
.
Yritetään vielä kirjautua rootilla sisään.
Apache
Apachen asennus ja reikä palomuuriin http:// sivuja varten,$ sudo apt-get install apache2
sudo ufw allow 80/tcp
$ echo "Johanin testisivu" | sudo tee /var/www/html/index.html
Namecheap
Valitaan sivulle osoite ja toivotaan että se on vapaana, https://www.namecheap.com/.SSL
Lisätään palvelimelle SSL salaus jotta https:// sivut toimivat. Käytin tähän certbot ohjelmaa ja ohjeena DigitalOceanin tekemää 'How To Secure Apache with Let's Encrypt on Debian 10', https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-10 ja certbotin 'alternate installation methods' https://certbot.eff.org/docs/install.html#alternate-installation-methods.CertBot haluaisi että asennuksessa käytetään 'snap' paketinhallintaohjelmaa, joka näyttää jakavan vahvasti mielipiteitä. En ole sitä aikaisemmin käyttänyt enkä siihen nyt lähde.
$ sudo apt-get install certbot
$ sudo apt-get install python-certbot-apache
$ sudo ufw status
$ sudo ufw allow 443
$ sudo certbot --apache -d kouluprojektit.com -d www.kouluprojektit.com
$ sudo certbot renew --dry-run
Harjoitus 5 - Flask - 24-28.2.2021
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.7.0-amd64-xfce+nonfree
Tehtävä A
a) Hello Flask! Tee Python Flask hei maailma kehitysympäristössä. Voit siis käyttää tuotantoon sopimatonta app.run(debug=True) ajoa.
Aloitetaan päivittämällä paketinhallinta ja asentamalla flask
sudo apt-get update
sudo apt-get install python3-flask-y
Tämän jälkeen tehdään oman kansion nimeltä 'hello' ja sinne tiedoston 'hello.py'
mkdir hello
nano hello.py
hello.py tiedostoon kopion seuraavan koodipätkän:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Learn Flask at TeroKarvinen.com!"
app.run(debug=True)
Ajetan tuo ohjelmapätkä ja tarkastetan tulos osoitteessa http://localhost:5000
python3 hello.py
Harjoitus 6 - Shell scriptit
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree
Tehtävä A
a) Tietokanta wepissä. Tee oma yksinkertainen, tietokantaa käyttävä ohjelma. Ohjelmalla tulee olla jokin käyttötarkoitus. Voit tehdä ohjelman muokkaamalla Teron koodia (muista lähdeviite)..
PostgresSQL
Seurataan http://terokarvinen.com/2016/03/03/install-postgresql-on-ubuntu-new-user-and-database-in-3-commands/index.html?fromSearch= ohjetta. Asennetaan PostgresSQL ja tehdään käyttäjästä samanniminen kuin linuxin käyttäjästä
sudo apt-get install postgresql
sudo -u postgres createdb johan
sudo -u postgres createuser johan
SQL-Alchemy asennus
sudo apt-get install python-sqlalchemy
Flask WTF asennus
sudo apt-get install python-wtforms
Flask Automatic Forms
Teron ehdotuksesta käytetään apuna Teron ohjelmaa, https://terokarvinen.com/2020/flask-automatic-forms/. Tässä ei lähdetä muuttamaan Teron koodia. Jos tämä toimii kuten pitää, niin sen jälkeen voimme tehdä muutoksia.Tehdään ohjeen mukaan python tiedosto "autoformed.py" ja lisätään sinne sisään Teron sivulta kopioitu koodi. Koodiin muutetaan tietenkin salasana.
python3 autoformed.py
Tulos:
Traceback (most recent call last):
File "autoformed.py", line 6, in
from flask_sqlalchemy import SQLAlchemy
ModuleNotFoundError: No module named 'flask_sqlalchemy'
Ei siis toimi, google auki ja tutkimaan. Alchemy ohjelma tarvii hieman lisäosia, asennetaan.
sudo apt-get install python3-flask-sqlalchemy
Ja uusi yritys
python3 autoformed.py
Tulos:
sudo apt-cache search flask-wtf
Asennetaan tuo tarjottu python3-flaskext.wtf
sudo apt-get install python3-flaskext.wtf
python3 autoformed.py
Harjoitus 7 - Laboratorioharjoitus 13.3.2020
Harjoituksessa käytetty välineistö:
Lenovo L580, ostettu 2018
Prosessori: Intel Core i7-8550U
Muisti: 16GB
Käyttöjärjestelmä: Windows 10 Pro, 64bit, Build 19041
Oracle VM virtualBox, versio 6.1.18
Debian-live-10.8.0-amd64-xfce+nonfree
Tehtävä A, 11.03.2021 15:20 - 20:00
a) Ratkaise valitsemasi vanha arvioitava laboratorioharjoitus tältä kurssilta. (Löytyy DuckDuckGolla tai Googlella sekä linkeistä tältä sivulta).
Suunnataan Tero Karvisen sivuille ja haun kautta valitaan arvioitava labraharjoitus, numerogeneraattorilla.
https://terokarvinen.com/search/?q=Arvioitava+laboratorioharjoitus
Saimme arvottua tehtäväksi seuraavan: http://terokarvinen.com/2018/arvioitava-laboratorioharjoitus-linux-palvelimet-ict4tn021-6-torstai-alkukevat-2018-5-op/
## LAMP Asenna LAMP (Linux, Apache, MySQL, PHP) ja testaa sen toiminta.
## Kuormitusta
Kerää kuormitustietoja koneelta koko harjoituksen ajalta. Analysoi tiedot tiiviisti aivan harjoituksen lopuksi.## Sorkka ja Rauta Oy:n CRM
Tarvitsemme asiakastietokannan. Tee tietokanta, jossa on seuraavat asiakkaat:
- Kulta ja Kaivos ky
- Piilosana ry
- MetalliMakeTee PHP-ohjelma, joka lukee nämä tietueet. Laita tämä sivu näkyviin osoitteessa http://sorkkacrm.example.com
Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla. Tässä harjoituksessa sivulle
pääsyä ei tarvitse rajoittaa salasanalla, vaan sen tule näkyä kaikkialle nettiin.## Rosvoja porteilla
Onko koneellemme yritetty murtautua? (Kyllä). Etsi omalta paikalliselta koneeltasi todisteet tapauksesta, jossa koneellesi on yritetty murtatua. Analysoi tiiviisti tähän liittyvät tiedot.## Sorkan sivut
Tee staattinen HTML5 weppisivu, jonka otsikkona (molemmat title ja h1) on "Sorkka ja Rauta Oy".
Laita sivu näkyviin osoitteeseen http://rauta.example.com/ . Voit simuloida nimipalvelun toimintaa hosts-tiedoston avulla.## Einarin esimerkki
Einari Vähä-aho ryhtyy koodaamaan. Tee einarille käyttäjä 'einari'.
Tee einarille esimerkkikotisivu PHP:lla ja laita se näkymään osoitteessa http://localhost/~einari/ .
Esimerkkisivun pitää tulostaa "Einari" käyttäen PHP:n print-funktiota.
LAMP (Linux, Apache, MySQL, PHP)
Linux
Asennetaan Debian 10.8.Asennuksen jälkeen avataan kohentokehote, laitetaan suomalainen näppäimistö toimimaan, päivitetään paketinhallinta ja asennetaan tulimuuri. Emme käytä konetta SSH yhteyden kautta joten portteja ei tässä vaiheessa tarvitse avata.
setxkbmap fi
sudo apt-get update
sudo apt-get install ufw
sudo ufw enable
Apache
Asennetaan Apache ja käynnistetään se uusiksi.
sudo apt-get install apache2
sudo systemctl restart apache2
Varmistetaan sen toiminta
firefox "http://localhost"
sudo apt-get install munin
Ja muninin lokit saa firefoxilla auki
firefox /var/cache/munin/www/index.html
Kuormituksen seuranta
Asennetaan munin seuraamaan kuormitusta, http://munin-monitoring.org/MariaDB
Seurataan Teron ohjetta Mariadb:n asennuksessa, http://terokarvinen.com/2018/install-mariadb-on-ubuntu-18-04-database-management-system-the-new-mysql/Asennetaan Mariadb client ja server.
sudo apt-get install mariadb-client mariadb-server
Ja käynnistetään ohjelma
sudo mysql_secure_installation
Annetaan turvallinen salasana ja vastataan 'y' kaikkiin muihin kysymyksiin
Luodaan samalla asiakastietokannat. Kirjautudaan mariadb:hen sisälle root käyttäjällä ja luodaan tietokanta 'asiakkaat' ja annetaan sille oikeudet muokata ainoastaan sen sisältämiä tietoja. Muistetaan taas antaa vahva salasana.
sudo mariadb -u root
CREATE DATABASE asiakkaat;
GRANT ALL ON asiakkaat.* TO asiakkaat@localhost IDENTIFIED BY 'clw8-OPSEC-0hjb';
exit
Sen jälkeen kirjaudutaan sisään asiakkaat tietokantaan
mariadb -u asiakkaat -p
use asiakkaat;
CREATE TABLE asiakkaat (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(200), contact VARCHAR(20));
Varmistetaan vielä lopuksi että taulukko on luotuu
SHOW TABLES;
Lisätään asiakkaat taulukkoon ja tulostetaan taulukon sisältö
INSERT INTO asiakkaat (name, contact) VALUES ("Kulta ja Kaivos ky", "0102030");
INSERT INTO asiakkaat (name, contact) VALUES ("Piilosana ry", "Piilotie 1b");
INSERT INTO asiakkaat (name, contact) VALUES ("MetalliMake", "make@metallimake.com");
SELECT * FROM asiakkaat;
PHP-ohjelma
Seurataan Teron ohjetta, http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo/Apache2 ja mariadb on jo asennettu, joten niitä ei tarvitse uudestaan asentaa.
sudo apt-get install libapache2-mod-php php-mysql
Laitetaan apchessa käyttäjien kotihakemistot käyttöön.
sudo a2enmod userdir
php version
Oikea .conf tiedoston voi myös käytä katsomassa /etc/apache2/mods-available/ ja komennolla ls
näemme tiedostot
sudoedit /etc/apache2/mods-available/php7.3.conf
Ja muutosten jälkeen käynnistetään apache uudestaan
sudo systemctl restart apache2
Aina kun muutoksia tehdään on tärkeä tarkastaa että asiat toimivat. Tehdään kotihakemistoon public_html kansio ja sinne index.php tiedosto.
mkdir public_html
cd public_html
nano index.php
Index.php tiedostoon tehdään lyhyt php ohjelma testiksi.
< ?php print("Hei Maailma!"); ?>
Kuvassa näkyy näppäilyvirhe,
print/"
-> print("
Tämä aiheuttaa alla olevan ongelman.
Tarkastetaan toiminta:
firefox "http://localhost/~johan"
Sivu on toiminnassa mutta mitään ei tulostu, ei edes error viestiä. Vika ei siis todennäköisesti ole apachen asetuksissa, tarkastetaan php. Sielähän se vika oli, näppäinhäiriö. Korjataan ja koitetaan uudelleen.
Kopioidaan Teron koodi index.php tiedostoon ja laitetaan aikaisemmin luotu tietokanta sivulle näkyviin. Password kohtaan salasana mikä aikasemmin luotiin asiakkaat tauluun. Muutetaan viimeistä riviä, että saadaan näkyviin contact sarakkeen tiedot ja hieman eroteltua tietoja toisistaan | merkin avulla. Koodi löytyy Tero Karvisen ohjeesta: http://terokarvinen.com/2016/read-mysql-database-with-php-php-pdo/
// public_html/index.php - Read MySQL from PHP
// (c) 2016 Tero Karvinen http://TeroKarvinen.com
// MySQL Login
$user='asiakkaat';
$password='OPSEC';
// Data Source Name i.e. connection details
$database=$user;
$dsn="mysql:host=localhost;charset=UTF8;dbname=$database";
// Open Connection, create new object of PDO class
$pdo=new PDO($dsn, $user, $password);
// Perform SQL Query
$pdoStatement=$pdo->prepare('SELECT * FROM asiakkaat;');
$pdoStatement->execute();
$hits=$pdoStatement->fetchAll();
// Print the $hits Array
foreach($hits as $row) {
echo "< p>".$row['id']." | ".$row['name']." | ".$row['contact']< /p>\n";
}
?>
Taulukko näkyviin sivulle http://sorkkacrm.example.com
Luodaan kansio sorkkacrm.example.com ja sen sisälle siirretään aikaisemmin tehty index.php tiedosto.
mkdir sorkkacrm.example.com
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/sorkkacrm.example.com.conf
Ja editoidaan tuo uusi tiedosto.
sudo nano /etc/apache2/sites-available/sorkkacrm.example.com.conf
sudo a2ensite sorkkacrm.example.com.conf
sudo a2dissite 000-default.conf
Vielä host tiedoston muutos, että tietokone ei yritä oikesti mennä tuonne sivulle, vaan hakee sen meidän omalta tietokoneelta, lisätään sinne 127.0.0.1 sorkkacrm.example.com
sudoedit etc/hosts
sudo systemctl reload apache2
rauta.example.com
Tehdään samat toimet kuin aikasemmin, luodaan kansio ja index.html tiedosto
sudoedit /etx/apache2/sistes-available/rauta.example.com.conf
Ja otetaan se käyttöön
sudo a2ensite rauta.example.com.conf
Lisätään host tiedostoon uusi sivu.
127.0.0.1 rauta.example.com
sudo systemctl reload apache2
Ja sitten suunnataan osoitteeseen rauta.example.com ja katsotaan toimiiko.
Uusi käyttäjä ja hänelle sivut
Luodan käyttäjä Einari Vähä-Aho ja annetaan Einarille vahva salasana.
sudo adduser einari
sudo mkdir public_html/
sudo chmod g+s public_html/
sudo chown einari:einari public_html/
< ?php print("Einari"); ?>
localhost/~einari
Kuormitustiedot
Avataan munin osoitteessa/var/cache/munin/www/index.html
ja tutkitaan sisältöä. Tilastoista selviää että kovinkaan raskasta tämä tekeminen ei ole tietokoneelle ollut. Mutta se oli odotettavissa.