Kort beskrivelse av Node.js, Koa.js og Apache
Setter opp Node.js
Sette opp vår applikasjonskatalog
Installerer Koa.js
Installerer Apache
Administrere applikasjonen vår med systemd
Konklusjon
I denne opplæringen skal vi lære hvordan du setter opp en Koa.js-nettapplikasjon for produksjon ved å bruke Node.js. Vi vil også koble et eksempeldomene, med en omvendt proxy, ved hjelp av Apache, og lære hvordan du administrerer det med en riktig prosessleder. Uten videre, la oss komme i gang.
Kort beskrivelse av Node.js, Koa.js og Apache
Node.js er et raskt JavaScript-rammeverk på tvers av plattformer basert på Chromes V8-motor. Den brukes i både skrivebords- og serverapplikasjoner og er kjent for sin entrådede hendelsesløkkehåndtering. Node.js har et pakkeregister kalt Node Package Manager (NPM), som er vert for over en halv million pakker. NPM-pakker (eller moduler) er kjerneryggen i Node.js, siden de er fellesskapsdrevet kode som kan være nyttig i Node.js-applikasjonen din. I vår Koa.js-app er Node.js kjernedelen av funksjonen.
Koa.js er et minimalistisk nettrammeverk, bygget på Node.js-plattformen. Laget av det samme teamet bak det populære Express.js-rammeverket, er målet å minimere det allerede minimalistiske Express.js-rammeverket ytterligere ved å ekskludere mellomvare fra kjernen. Et hovedtrekk ved Koa.js er det faktum at det ikke er noen tilbakeringinger. Koa.js er bygget på ES6-baserte generatorer og ES6-funksjoner, for eksempel Promises.
Apache er en populær åpen kildekode-webserver, brukt som et veldig grunnleggende utgangspunkt for webservere. I denne opplæringen vil vi bruke Apache som en omvendt proxy, som lar oss koble applikasjonen vår til et eksempeldomene. Hvis du ikke har et domene, vil denne opplæringen fortsatt fungere for deg, med den eneste forskjellen at nettstedet vil kjøre på din VPS IP, i stedet for et domene.
Setter opp Node.js
Som med alle Node.js-rammeverk, må du installere Node.js på din VPS. Av hensyn til denne veiledningen vil jeg anta at du allerede har Node.js installert på systemet ditt. Hvis ikke, kan du ganske enkelt følge instruksjonene her .
Sette opp vår applikasjonskatalog
Vi må opprette en mappe som vil inneholde programmets kjernefiler.
mkdir site
Erstatt gjerne sitemed et hvilket som helst annet navn du ønsker for katalogen. Deretter må vi initialisere Node.js-pakkefilen. Bytt til katalogen du nettopp har opprettet, og kjør npm init, og fullfør ledetekstene. Til slutt skal det se omtrent slik ut:
{
"name": "site",
"version": "1.0.0",
"description": "Koa.js Site",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "yourname",
"license": "ISC"
}
Installerer Koa.js
Nå som vi har satt opp katalogen vår, kan vi fortsette å installere Koa.js. I gjeldende arbeidskatalog, /site, skriv inn følgende.
npm install koa
Dette vil laste ned Koa.js-modulen fra NPM og installere den i vår prosjektkatalog for fremtidig bruk. Deretter vil vi lage vår eksempelapplikasjonsfil som vil inneholde appkoden vår. For å gjøre det, lag en index.jsfil.
nano index.js
Når du er inne i filen, oppretter du et eksempelprogram.
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
console.log('Website is live!')
Lagre og lukk filen. CTRL+ X.
Vi vil sørge for at applikasjonen vår kjører som den skal. For å starte den, kjør node index.js, og du vil se Website is livei konsollen.
Installerer Apache
Nå som vi vet at nettstedet vårt er funksjonelt, kan vi fortsette å installere Apache og dets avhengigheter.
sudo apt install -y libapache2-mod-proxy-html libxml2-dev
For å bruke den omvendte proxy-funksjonen som finnes i Apache, må vi aktivere de nødvendige modulene.
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
Noen av disse modulene kan allerede være aktivert, men det er alltid lurt å dobbeltsjekke dem.
Nå må vi redigere standard konfigurasjonsfilen for Apache.
sudo nano /etc/apache2/sites-enabled/000-default.conf
Her må vi legge til en blokk for søknaden vår.
<VirtualHost *:*>
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:3000/
ProxyPassReverse / http://0.0.0.0:3000
ServerName localhost
</VirtualHost>
Lagre filen, CTRL+ X.
Du vil kanskje legge merke til at vi bruker port 3000som port for vår ProxyPassog ProxyPassReverseIP. Siden det er den samme porten som vi kjører Koa.js-applikasjonen vår på, er det viktig at vi legger inn riktig port.
Når endringene er på plass, må vi starte Apache på nytt og starte vår Koa.js-applikasjon på nytt.
sudo systemctl restart apache2
Dette vil sikre at vår konfigurasjonsfil er aktiv og klar til å fungere når vi starter vår Koa.js-applikasjon. Når Apache er startet på nytt, naviger tilbake til nettstedskatalogen din og start Koa.js-applikasjonen som vi gjorde tidligere. Fra nettleseren din, naviger til http://yourdomain, eller http://yourip:, og du vil se "Hello World".
Administrere applikasjonen vår med systemd
Nå som vi har dekket det grunnleggende om å lage et eksempel på en Koa.js-applikasjon, innser vi at i et produksjonsmiljø er det upraktisk å starte applikasjonen slik vi er nå. En prosessleder er definitivt et krav. Det er der systemd kommer inn i bildet. Enkelt sagt består systemd av programvare som gir byggesteiner for et Linux-system. I likhet med "init", gir det et system for å administrere brukerprosesser etter systemoppstart. Når det gjelder applikasjonen vår, lar systemd oss automatisk starte nettstedet vårt etter at systemet har blitt startet på nytt, i tilfelle det er en hendelse som forstyrrer systemets oppetid. Det gir også et sett med verktøy som kan komme godt med når du administrerer applikasjonen vår. Det beste er det faktum at det er innebygd i Ubuntu 16.04 LTS, så vi trenger ikke å installere ekstra programvare.
Opprett systemtjeneste
Alt vi trenger for å starte applikasjonen vår, finnes i en fil som heter service. Den inneholder detaljer om appen vår, for eksempel navn, katalog, miljø og mer. Åpne et tekstredigeringsprogram for å opprette systemfilen vår.
sudo nano /lib/systemd/system/site.service
Rediger og lagre filen slik.
[Unit]
Description=desc here
Documentation=https://example.com
After=network.target
[Service]
Environment=NODE_PORT=3000
Type=simple
User=youruser
ExecStart=/usr/bin/node /home/[youruser]/site/index.js
Restart=on-failure
[Install]
WantedBy=multi-user.target
Erstatt yourusermed brukernavnet til serveren din. Her er en rask oversikt over de viktige feltene:
After - Dette informerer systemd om å vente til nettverksgrensesnittet er klart før du starter vår applikasjon.
Environment– Her kan vi spesifisere miljøvariabler for vår applikasjon. Node.js-porten vår er en av dem.
Type – Dette informerer systemd om at appen vår bare kan startes opp, uten å forkaste brukerprivilegier og slikt.
User– Dette forteller systemd at vi ønsker å kjøre applikasjonen under vår brukerkonto, noe som anbefales. Å kjøre applikasjoner som root-bruker kan føre til mange sikkerhetskompromitteringer.
ExecStart - I hovedsak kommandoen som systemd vil kjøre for å starte applikasjonen vår, på samme måte som vi startet den manuelt før.
Restart- Forteller systemd under hvilke forhold applikasjonen vår skal startes på nytt. I dette tilfellet ønsker vi at nettstedet vårt skal startes på nytt i tilfelle feil.
Start systemd-tjenesten
Vi er nå klare til å starte vår systemd-tjeneste.
sudo systemctl daemon-reload
Dette er nødvendig når en systemd-tjenestefil endres for at systemd skal registrere eventuelle nye endringer som er gjort.
Start deretter søknaden din.
sudo systemctl start site
Naviger til nettstedet i nettleseren din igjen for å bekrefte at alt fungerer.
Viktige systemadministrerende funksjoner
stop - Stopper applikasjonen helt.
restart - Stopper applikasjonen, og starter den på nytt under en ny prosess.
enable - Ber systemd starte applikasjonen hver gang du starter datamaskinen.
status - Viser informasjon om programmet som kjører for øyeblikket, for eksempel oppetid, programstatus og mer.
For å bruke noen av disse funksjonene, kjør følgende.
systemctl <function> site
Konklusjon
Vi har satt opp en Koa.js-applikasjon og lært hvordan vi kan reversere proxy den, samt administrere den med systemd. Du er nå klar til å utvide søknaden din og bygge videre på dette eksemplet. Hvis du vil lære mer om Koa.js, og flere ting du kan gjøre med, kan du besøke nettstedet deres for mer nyttig informasjon. I tillegg til det, hvis du ønsker å lære mer om systemds prosessbehandler, kan du lese dokumentasjonen for det her . Til slutt, hvis du ønsker å lære mer om Apaches omvendte proxy, kan du gjerne sjekke dem ut her .