1

NodeJS:n ajaminen FastCGI:n läpi

Eli kysymys kuuluu:

Kuinka saan NodeJS-ohjelman vastaamaan HTTP-pyyntöihin Kapsin palvelimella?

Gima's avatar
141
Gima
asked 2016-10-02 02:44:23 +0200, updated 2016-10-02 02:46:35 +0200
edit flag offensive 0 remove flag close merge delete

Comments

add a comment see more comments

5 Answers

1

Lisäys3: Mitenköhän tuonne webapp1 palvelimeen olsi tarkoitus päästä... ainakan normaaleilla keinoin ei päässyt.

Linuxilla ainakin ihan näin:

ssh TUNNUS@webapp1.kapsi.fi
rapularaimo's avatar
203
rapularaimo
answered 2017-03-18 13:24:14 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
1

Meinasin ensiksi tehdä ohjeistuksen vain Kapsille, mutta ohje paisuikin yleiskäyttöiseksi.

Hieman taustatietoa

Kapsi on päivittänyt/päivittämässä(lue tämä blogipostaus, joutunet ajamaan skriptin) WWW-palvelin-infrastruktuurinsa sellaiseksi, että uudessa arkkitehtuurissa HTTP-pyyntöjä palvelee lauma Apache-prosesseja joilla ei ole oikeutta käyttäjän kotihakemistossa sijaitseviin tiedostoihin. Vanha ratkaisu oli epäturvallinen, sillä tietoturvareikä HTTP-pyyntöjä käsittelevässä ketjussa olisi voinut antaa hyökkääjälle pääsyn käyttäjän kotihakemistoon (esimerkiksi sähköposteihin).

Tästä (ja siitä ettei NodeJS:ää ole Kapsin palvelimille asennettu) joutuu NodeJS:n asentamaan hieman erikoiseen paikkaan.
(WWW-palvelimet eivät siis näe Lakalla sijaitsevan kotihakemiston tiedostoja.)

Itse asiaan

Sekä Lakalla, että WWW-palvelimilla on saatavilla samassa polussa oleva käyttäjän kansio:
/var/www/userhome/<käyttäjä>/sites/

Prosedyyri menee tiivistettynä näin:

  1. Asenna NodeJS:n binääripaketti tuonne polkuun.
  2. Kopioi tekemäni NodeJS ja FastCGI:n yhteennaittava ohjelma samaiseen WWW-rootin alle.
    (Ja muokkaa sen sisältämä polku vastaamaan NodeJS:n asennuspolkuasi.)
  3. Kopioi samassa paketissa mukana tuleva esimerkki-htaccess-tiedosto kansioon, jossa sijaitsevat .js päätteiset haluat antaa NodeJS:n läpi ajettavaksi HTTP-pyynnön seurauksena.

Yksityiskohtainen ohjeistus projektin sivuilta:
https://gitlab.com/gima/nodejs-fastcgi


# Lisäys: Ehkä tämä hieman selventää (ei mahtunut kommenttiin):

Normaalisti WWW-server vastaa clientin HTTP-requestiin palauttamalla URL:ia vastaavan tiedoston serverin filesysteemistä. Toisena vaihtoehtona HTTP-server vastaa ennaltamääriteltyihin HTTP-requesteihin käynnistämällä jonkin ohjelman ja antamalla tämän ohjelman määrätä mitä HTTP-response tulee sisältämään. Tätä kutsutaan CGI-ohjelman suorittamiseksi, joista esimerkkinä olisi vaikkapa PHP).

Ohjeeni tarkoitus on asentaa NodeJS-tulkki Kapsin WWW-serveriohjelmalle näkyvään kansioon, jolloinka palvelinohjelma voi suorittaa kyseisen tulkin. Tämä riittäisi muuten, paitsi että CGI-ohjelman tulee ymmärtää CGI-requestin metadata (jonka se saa STDIN:n välityksellä isäntä-ohjelmaltaan..eli WWW-palvelimelta). Jouduin siis tekemään wrapper-scriptin (osa tätä "julkaisua), joka tulkkaa pyynnön ja käynnistää lopullisen NodeJS-scriptin.

(Tämä wrapper-skripti käyttää alla linkattua "node-fastcgi"-kirjastoa mahdollistaen CGI-speksin mukaisen juttelun isäntäohjelman kanssa STDIN:n ja STDOUT:n välityksellä.)

# Lisäys: Lisä-lisäyksenä:

Ja koska iski jonkinasteinen typeryys, en muistanut selventää noita maagisiä req ja resp muuttujia. Ne muistaakseni emuloivat NodeJS:n oman HTTP-serveripaketin req ja resp muuttujia perus-toiminnoiltaan. Kaikki niihin liittyvä dokumentointi löytyy täältä.


# Lisäys #2:

Tosiaan, tämä ohjeeni ei liity kapsin "webapp"-sovelluspalvelimiin mitenkään; nämä ovat kaksi eri tapaa suorittaa omaa ohjelmakoodia HTTP-pyyntöjä vastaan.

Suosittelen tuota "webapp"-sovelluspalvelin-reittiä sillä se on selkeämpi, ei kuormita Kapsin dedikoituja WWW-palvelimia ja ei sisällä uutta koodia (=vähemmän tietoturvariskejä).

Webapp-sovelluspalvelimen ajoon saattaminen taitaa mennä suurinpiirtein näin:

1. Haluttu softa ajoon palvelimella webapp1.kapsi.fi ja kuuntelemaan porttia, jonka Kapsin ylläpito sinulle kertoo.

2.a Sopivat muutokset .htaccess-tiedostoon, jonka tarkoituksen on ohjata pyyntö Kapsin WWW-palvelimen puolelta eteenpäin webapp1.kapsi.fi palvelmelle porttiin, jossa sovellusohjelmasi ajautuu.

Huom. Tiedosto ".htaccess" on Apachen (Kapsin käyttämä WWW-palvelin) konfiguraatiotiedosto. Tämä tulee sijoittaa johonkin kansioon, josta Apache tarjoaa tiedostoja clientin WWW-requestia vastaan. Se mitä tuohon tiedostoon tulee laittaa löytyy netistä hakutermeillä "forward proxy".

2.b Vaihtoehtoisesti voi olla, ettet itse pysty tekemään tuota .htaccess-tiedostolla (koska Apache on kakkea), jolloinka ylläpito joutuu tekemään tuon puolestasi. Pyyntösi voisi olla tyyliin:

"webbisivuni sijaitsee osoitteessa <tunnus>.kapsi.fi ja haluaisin, että <tunnus>.kapsi.fi/omasofta/ ja kaikki sen alla ohjattaisiin eteenpäin webapp1.kapsi.fi palvelimelle antamaanne porttiin, jossa sovelluspalvelimeni tulee kohta pyörimään

*puuh*

Gima's avatar
141
Gima
answered 2016-10-02 02:44:42 +0200, updated 2018-06-20 01:56:33 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

Kirjoitin aiemmin muutaman noobieviestin yöllä, jotka sitten poistin. Gima oli kuitenkin ehtinyt vastata, joten laitan ne vastaukset tähän, koska ne valaisee asiaa. Sitten jatkan taas noobiekysymyksillä ;)

"Tämän ohjeistuksen pitäisi toimia edelleen, sillä tämä on itselläni käytössä. Kapsin webapp-sovelluspalvelimet eivät liity tähän ohjeeseen oleenkaan. Dependencyt toimivat kuten normaalistikin."

""webapp1.kapsi.fi" on palvelin siinä missä "lakka.kapsi.fi"kin. Tuo ohjeistuksen (ainakin itseäni) hämäävä kohta "sovelluspalvelimet tulisi ajaa webapp-palvelimella" tarkoittaa sitä, että voit kirjautua ssh:lla tuonne "webapp1.kapsi.fi"-palvelimelle, asettaa haluamasi ohjelman ajautumaan siellä, kuuntelemaan jotakin tcp-porttia jonka jonka jälkeen voit asettaa ".htaccess"-tiedostossa Apachen "rewrite"-rulella HTTP-pyynnöt ohjautumaan tuonne "webapp1.kapsi.fi"-palvelimelle siihen porttiin, jota ohjelmasi asetit kuuntelemaan."

Kiitos näistä. Kysymykset:

  1. Eli tämä paketti antaa noden käyttöön ts. määrittelee sen polun. Itse en saanut sitä vielä toimimaan, minulle tuli tyyliin "polkua ei löydy" (selaimeen)?
  2. Pitääkö minun laittaa node-ohjelmani serveri-appi tuonne webappipalvelimelle ja viittaan siihen sitten esim kayttaja.kapsi.fi -palvelimelta? Jotenkin haistan tuon ohjeen jotenkin niin viittaavan, mutta en ole varma mitä minun konkreettisesti pitää tehdä.
  3. Jos tämä paketti ei auta ohjelmaani määrittelemään missä node-paketti sijaitsee, miten teen sen? Ilmeisesti se tekee juuri sen, näin päivemmällä isommalta ruudulta lukemana.

Kiitoksia. Ehkä tämä saadaan vielä uusilla yrityksillä toimimaan. Serverin sisällä olen siis saanut jo kuitenkin tulostumaan consolilla hello worldiä, joten jossain vaiheessa jo ollaan. Varsinaista ajettavaa isompaa ohjelmaa ei vielä ole.

P.s tätä viestiä en nyt poista, vaikka sekavaksi taas meni ;)

Lisäys: Antaa olla koko roska. Etsin toisen palvelutarjoajan.

Lisäys2: tai ainakin odotan flunssan helpottavan.

Lisäys3: Mitenköhän tuonne webapp1 palvelimeen olsi tarkoitus päästä... ainakan normaaleilla keinoin ei päässyt.

jhalmu's avatar
1
jhalmu
answered 2017-03-17 20:26:27 +0200, updated 2017-03-17 22:11:52 +0200
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

No nyt näytti pääsevän. Ilmeisesti eilen oli tunnarit väärin tjsp.

Eli siis tuonneko laitan nyt node-ohjelman server.js -filun (http-hommelit) ja TUNNUS.kapsi.fi muut? Tuolla näyttää olevan sama sisältö kuin lakalla. Täytyy katsoa jos muitakin ohjeita olisi lisäilty. Myöhemmin sitten taas tutkin uudestaan Giman pakettia.

Onko tämä ylläpidolta saamani rimpsu oikea:

RewriteEngine On
RewriteRule ^(.*)$ http://webapp1.kapsi.fi:PORTTI/$1 [P]
jhalmu's avatar
1
jhalmu
answered 2017-03-18 14:34:56 +0200, updated 2017-03-18 15:27:29 +0200
edit flag offensive 0 remove flag delete link

Comments

Järjestelmän ylläpidosta vastaava taho kyllä mitä todennäköisemmin tietää paremmin kuin kukaan meistä :P Kokeilemalla se selviää.

Gima's avatar Gima (2017-03-18 19:18:36 +0200) edit
add a comment see more comments
0

Ilmeisesti lakalle tehdyt muutokset päivittyvät webbappiin ja päinvastoin eli lakka = webapp? Tai jotain.

jhalmu's avatar
1
jhalmu
answered 2017-03-18 15:37:50 +0200
edit flag offensive 0 remove flag delete link

Comments

Tarkoittanet sitä, että samat tiedostot ovat käytettävissä eri palvelimilla? Johtuu siitä, että palvelimet käyttävät verkkolevyä. Toisin sanoen tiedostot eivät ole paikallisia, vaan sijaitsevat jollain toisella koneella ja niitä niihin pääsy on mahdollistettu verkon ylitse.

Gima's avatar Gima (2017-03-18 19:17:35 +0200) edit
add a comment see more comments

Your Answer

Login/Signup to Answer