Eli kysymys kuuluu:

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

muokattu 01.10.2016 klo 23:46
Gima's gravatar image Gima kysyi
01.10.2016 klo 23:44
414, hyväksyttyjä vastauksia: 0%

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://github.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*

muokattu 18.03.2017 klo 12:43
ikilinkki
Gima's gravatar image Gima vastasi
01.10.2016 klo 23:44
414, hyväksyttyjä vastauksia: 0%

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
ikilinkki
rapularaimo's gravatar image rapularaimo vastasi
18.03.2017 klo 11:24
464, hyväksyttyjä vastauksia: 10%

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.

muokattu 17.03.2017 klo 20:11
ikilinkki
jhalmu's gravatar image jhalmu vastasi
17.03.2017 klo 18:26
13, hyväksyttyjä vastauksia: 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]
muokattu 18.03.2017 klo 13:27
ikilinkki
jhalmu's gravatar image jhalmu vastasi
18.03.2017 klo 12:34
13, hyväksyttyjä vastauksia: 0%
(18.03.2017 klo 17:18) Gima

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

ikilinkki
jhalmu's gravatar image jhalmu vastasi
18.03.2017 klo 13:37
13, hyväksyttyjä vastauksia: 0%
(18.03.2017 klo 17:17) Gima

Sinun vastauksesi

näytä/piilota esikatselu

Tarkkaile kysymystä

Sähköpostitse:

Kirjautumisen jälkeen voit tilata tähän kysymykseen jätetyt uudet vastaukset ja kommentit omaan sähköpostiisi.

RSS-lukijan kautta:

Pelkät vastaukset

Vastaukset ja kommentit

Markdown-perusteet

  • *kursiivi* tai _kursiivi_
  • **lihavointi** tai __lihavointi__
  • linkki:[teksti](http://url.com/ "otsikko")
  • kuva?![alt teksti](/path/img.jpg "otsikko")
  • numeroitu luettelo: 1. Foo 2. Bar
  • Lisätäksesi rivinvaihdon kirjoita kaksi välilyöntiä rivin loppuun.
  • Tavallisemmat HTML-tagit toimivat myös.

Kysymyksen avainsanat:

×10
×4
×3
×2
×1

kysytty: 01.10.2016 klo 23:44

katsottu: 614 kertaa

päivitetty: 18.03.2017 klo 17:18