Een webserver
Arnout van Kempen over rommelen in een digitale wereld.
De vorige keer maakten we een webserver, maar daar ontbrak iets vrij essentieels aan: de server startte niet automatisch op en draaide in de voorgrond. Als je cargo run deed werkte het wel, maar dan kan je vervolgens niets meer doen in die terminal. Natuurlijk kan je een nieuwe terminal starten en daar verder werken, maar dat is toch wat knullig.
Toch is het goed te bedenken dat de situatie nu anders is dan bij een Apache server. Daar is de server zelf altijd actief en wat we willen publiceren zetten we in /var/www/html/index.php (of .html, als we geen php gebruiken natuurlijk). Dat betekent dat we kunnen knutselen aan index.php zoveel we willen; van Apache blijven we af, dus dat mag intussen gewoon door draaien.
In Rust zit de server en de webpagina in hetzelfde programma. Dus als we knutselen aan async index() in onze code, dan zullen we de draaiende server moeten stoppen, opnieuw compileren en de nieuwe server starten. Het lijkt mij dus handiger om wat je in Rust maakt pas automatisch op de achtergrond te laten opstarten, als je een resultaat hebt waar je voldoende tevreden over bent. En niet zoals dat met Apache makkelijk kan, iedere tussenversie.
Maar goed, hoe krijgen we de zaak nu draaiend? Ten eerste, let op het gebruik van de poort. Voor een browser is dat standaard 80, in de code van vorige week gebruikten we 8080. Als je overschakelt naar 80 moet Apache wel uit! Je wil geen twee servers die naar dezelfde poort luisteren.
Voor MacOS en zeker voor Windows zal je moeten opzoeken hoe dit werkt, in Linux zou het volgende moeten werken.
Stel, je server heb je 064-web genoemd en in /usr/bin geplaatst. Je werkt onder de username pi. Dan zijn de stappen:
1 Maak een bestand met bijvoorbeeld vim.
sudo vim /etc/systemd/system/064-web.service
2 Vul dit bestand met
[Unit]
Description=Rust Web Info Service
After=network.target
[Service]
User=pi
WorkingDirectory=/usr/bin/
ExecStart=/usr/bin/064-web
Restart=always
[Install]
WantedBy=multi-user.target
3 start de service met
sudo systemctl daemon-reload
sudo systemctl enable 064-web.service
sudo systemctl start 064-web.service
De bestanden in /etc/systemd/system verwijzen naar services die door de systemd-manager gestart kunnen worden. In ons geval geeft het bestand aan welke service, onder welke gebruiker gestart moet worden. Faalt de service, dan dient deze altijd herstart te worden.
In stap 3 wordt de nieuwe file bekend gemaakt, toegevoegd aan de automatisch te starten services en tenslotte ook direct gestart. Hiermee hebben we dus een werkende webserver geactiveerd.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Over bits & bytes
Arnout van Kempen over rommelen in een digitale wereld.
En arrays dan?
Arnout van Kempen over rommelen in een digitale wereld.
Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.
Bestanden in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.