Ylläpito
Palvelinpään tehtävät: missä mikäkin sijaitsee, miten sovellus käynnistetään uudelleen ja miten tehdään asiat, joita käyttöliittymästä ei voi tehdä. Komennot ajetaan SSH-yhteydellä palvelimelle.
Kokonaisuus
| Palvelin | Tehtävä |
|---|---|
| Web-palvelin | KUNTTARI, tämä ohjesivusto ja asiakkaiden WordPress-sivustot. nginx, PHP-FPM, MariaDB ja Node.js. |
| NS1 | Ensisijainen nimipalvelin (PowerDNS + MariaDB). KUNTTARI muokkaa vyöhykkeitä sen rajapinnan kautta sisäverkossa. |
| NS2 | Toissijainen nimipalvelin. Kopioi vyöhykkeet NS1:ltä automaattisesti. |
KUNTTARI web-palvelimella
| Asia | Sijainti |
|---|---|
| Sovellus | /var/www/kunttari |
| Asetukset ja salaisuudet | /var/www/kunttari/.env (vain omistajan luettavissa) |
| Tietokanta | MariaDB-kanta kunttari |
| Prosessi | pm2-prosessi kunttari, käynnistyy palvelimen mukana |
| Web-palvelimen asetus | /etc/nginx/sites-available/kunttari.fi |
| Sivuston luontiskripti | /usr/local/sbin/kunttari-wp-create |
| Asiakasportaali | Sama sovellus ja prosessi; nginx-asetus /etc/nginx/sites-available/portal.kunttari.fi. Portaalin isäntänimi on .env-arvossa PORTAL_HOST. |
| Ladatut laskut ja sopimukset | /var/www/kunttari/storage/docs (PDF-tiedostot satunnaisilla nimillä, ei suoraan verkossa) |
| Ohjesivusto | /var/www/docs.kunttari.fi (staattiset HTML-tiedostot) |
Tila, lokit ja uudelleenkäynnistys
pm2 status # onko sovellus käynnissä
pm2 logs kunttari --lines 100 # sovelluksen loki
pm2 restart kunttari # uudelleenkäynnistys
curl -s http://127.0.0.1:3200/healthz # vastaa {"ok":true}, kun sovellus ja kanta toimivat
Jos .env-tiedostoa muutetaan, käynnistä sovellus uudelleen komennolla pm2 restart kunttari --update-env.
.env-tiedoston tärkeimmät arvot
| Muuttuja | Merkitys |
|---|---|
SETTINGS_KEY | Avain, jolla tenanttien, Workspacejen ja postilaatikon salaisuudet on salattu. |
PDNS_API_URL, PDNS_API_KEY | Yhteys NS1:n PowerDNS-rajapintaan. |
SERVER_PUBLIC_IP | Web-palvelimen julkinen IP, johon uusien WordPress-sivustojen A-tietueet osoitetaan. |
DB_* | KUNTTARIn tietokantayhteys. |
SETTINGS_KEY-arvoa. Ilman sitä tallennettuja salaisuuksia ei voi purkaa, ja jokaisen tenantin secret, Workspacen avain ja postilaatikon secret pitää syöttää uudelleen. Säilytä avaimesta kopio salasanojen hallinnassa.Varmuuskopiointi
KUNTTARIn oma data on pieni: organisaatiot, liitokset, portaalin käyttäjät ja pyynnöt, tikettien tilat, loki ja salatut salaisuudet sekä ladatut laskut ja sopimukset. Varmuuskopioon tarvitaan kolme asiaa:
sudo mariadb-dump --single-transaction kunttari | gzip > kunttari-$(date +%F).sql.gz
sudo cp /var/www/kunttari/.env kunttari-env-$(date +%F)
tar -czf kunttari-asiakirjat-$(date +%F).tar.gz -C /var/www/kunttari storage
Tietokantavedos on hyödytön ilman samaa SETTINGS_KEY-arvoa, joten säilytä ne yhdessä mutta suojattuna.
/var/www ja kunkin oma tietokanta) ja nimipalvelimen powerdns-kanta varmuuskopioidaan erikseen. KUNTTARI ei tee niistä kopioita.Unohtunut salasana
Jos kukaan ei pääse kirjautumaan, aseta käyttäjälle uusi salasana palvelimella. Komento kysyy salasanan näyttämättä sitä:
cd /var/www/kunttari
read -rsp "Uusi salasana: " PW; echo
PW="$PW" node -e '
process.loadEnvFile(".env");
const { hashPassword } = require("./lib/crypto");
const db = require("./lib/db");
hashPassword(process.env.PW).then((h) =>
db.q("UPDATE users SET pw_hash = ?, failed = 0, locked_until = NULL WHERE email = ?", [h, process.argv[1]])
).then((r) => { console.log("Päivitetty rivejä:", r.affectedRows); process.exit(0); });
' kayttaja@esimerkki.fi
unset PW
WordPress-sivuston poistaminen palvelimelta
KUNTTARIsta ei voi poistaa sivustoa palvelimelta. Ota ensin varmuuskopio ja poista sitten käsin. Esimerkissä verkkotunnus on esimerkki.fi; tietokannan nimi näkyy sivuston muistiinpanoissa KUNTTARIssa.
D=esimerkki.fi
DB=wp_esimerkki_fi
# 1. Varmuuskopio
sudo tar -czf ~/$D-tiedostot.tar.gz -C /var/www $D
sudo mariadb-dump --single-transaction $DB | gzip > ~/$D-kanta.sql.gz
# 2. Web-palvelin ja varmenne
sudo rm /etc/nginx/sites-enabled/$D /etc/nginx/sites-available/$D
sudo nginx -t && sudo systemctl reload nginx
sudo certbot delete --cert-name $D
# 3. Tietokanta ja tiedostot
sudo mariadb -e "DROP DATABASE \`$DB\`; DROP USER '$DB'@'localhost';"
sudo rm -rf /var/www/$D
Poista lopuksi sivusto KUNTTARIn seurannasta ja A-tietueet DNS:stä.
Varmenteet
sudo certbot certificates # kaikki varmenteet ja vanhenemispäivät
sudo certbot renew --dry-run # testaa, että automaattinen uusinta toimii
Jos sivuston luonnissa varmenteen haku epäonnistui, hae se myöhemmin komennolla sudo certbot --nginx -d esimerkki.fi -d www.esimerkki.fi. Se päivittää myös nginx-asetuksen.
Nimipalvelimet
Komennot ajetaan NS1:llä, ellei toisin mainita.
sudo pdnsutil list-all-zones # kaikki vyöhykkeet
sudo pdnsutil list-zone esimerkki.fi # vyöhykkeen tietueet
sudo pdnsutil check-zone esimerkki.fi # tarkista virheet
sudo pdnsutil show-zone esimerkki.fi # DNSSEC-avaimet ja DS-tietueet
DNSSEC uudelle vyöhykkeelle
- Allekirjoita vyöhyke:
sudo pdnsutil secure-zone esimerkki.fijasudo pdnsutil rectify-zone esimerkki.fi. - Hae DS-tietue:
sudo pdnsutil show-zone esimerkki.fi. - Vie DS-tietue rekisterinpitäjälle. Vasta sen jälkeen DNSSEC on voimassa.
Vyöhykkeen poisto
Poista ensin delegointi rekisterinpitäjältä. Aja sitten sama komento sekä NS1:llä että NS2:lla:
sudo pdnsutil delete-zone esimerkki.fi
Jos NS2 ei päivity
Aja NS2:lla sudo pdns_control retrieve esimerkki.fi. Se hakee vyöhykkeen heti NS1:ltä.
pdnsutil-komennolla, aja NS1:llä muutoksen jälkeen sudo pdnsutil increase-serial esimerkki.fi, sudo pdns_control purge esimerkki.fi$ ja sudo pdns_control notify esimerkki.fi. Ilman välimuistin tyhjennystä NS2 voi saada vanhan sarjanumeron ja jättää muutoksen hakematta.Ohjesivuston päivittäminen
Sivut ovat tavallisia HTML-tiedostoja kansiossa /var/www/docs.kunttari.fi. Yhteinen yläosa ja valikko ovat tiedostossa _head.html, jonka nginx liittää jokaiseen sivuun. Uusi sivu lisätään kopioimalla olemassa oleva sivu pohjaksi ja lisäämällä linkki valikkoon. Muutokset näkyvät heti.