Wie man nicht mit localhost, sondern die IP des Servers statt?
Fand ich diese Knoten-Anwendung auf dieses tutorial und wollte es benutzen, aber es ist konfiguriert als "localhost". Da die Anwendung ausgeführt wird, auf dem Amazon Linux EC2, es gibt keine desktop (lokalen) Zugriff auf (vielleicht gibt es software zu installieren, zu aktivieren, den desktop-Modus, aber ich habe nicht dass).
Ich würde gerne zum ausführen der Anwendung auf dem server, nicht auf localhost, sondern auf dem server Elastic IP-Adresse, die werde ich hinzufügen, um eine Gehostete Zone für meine domain chatxs.com.
Ich würde gerne die app hören für alle Anfragen, die in dieser IP, die wiederum, wird in den domain-Namen des DNS.
Hier der code, das tutorial kommt mit, das einzige, was ich geändert habe ist die .html-Dateien in den Ordner sichten (styling, Ausrichtung und text, keine änderungen im code der app, nur die html):
app.js
//This is the main file of our chat app. It initializes a new
//express.js instance, requires the config and routes files
//and listens on a port. Start the application by running
//'node app.js' in your terminal
var express = require('express'),
app = express();
//This is needed if the app is run on heroku:
var port = process.env.PORT || 8080;
//Initialize a new socket.io object. It is bound to
//the express app, which allows them to coexist.
var io = require('socket.io').listen(app.listen(port));
//Require the configuration and the routes files, and pass
//the app and io as arguments to the returned functions.
require('./config')(app, io);
require('./routes')(app, io);
console.log('Your application is running on http://localhost:' + port);
config.js
//This file handles the configuration of the app.
//It is required by app.js
var express = require('express');
module.exports = function(app, io){
//Set .html as the default template extension
app.set('view engine', 'html');
//Initialize the ejs template engine
app.engine('html', require('ejs').renderFile);
//Tell express where it can find the templates
app.set('views', __dirname + '/views');
//Make the files in the public folder available to the world
app.use(express.static(__dirname + '/public'));
};
routes.js es war zu groß, um Sie zu formatieren hier.
Und schließlich
Paket.json
{
"name": "NodeChatSystem",
"version": "0.0.1",
"description": "Realtime chat system for Tutorialzine.com",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"node",
"chat",
"system"
],
"author": "Nikolay Anastasov",
"license": "MIT",
"dependencies": {
"ejs": "^1.0.0",
"express": "^4.8.2",
"gravatar": "~1.0.6",
"socket.io": "^1.0.6"
}
}
Oben ist im Grunde, was in dem tutorial .zip-Datei.
- Nur stellen Sie Ihre Anwendung auf dem server zu
52.19.7.59
(d.h. setzen Sie den code auf diesem server, und führen Sie die Anwendung). Wenn Sie auf diese IP-Adresse + den port, den Sie angeben, Sie werden schlagen, die Anwendung. - Es sollte nur funktionieren, wenn Sie diese auf AWS. Wenn Sie nicht getan haben, stellen Sie sicher, dass Sie ermöglichen, den Zugang für eingehenden Datenverkehr am port in Frage, die in der AWS-Konsole.
- vielen Dank für die schnelle Rückmeldung. Ich bin in Verlegenheit, diese Fragen, aber wie stellen Sie es bereit, ich bin verwirrt, mit diesen Sachen, aber ich will es wirklich läuft. Ich verstehen nur html css so weit 🙁
- wenn Sie auf der Suche zum bereitstellen und ausführen node.js auf einer EC2-server, dieser link adndevblog.typepad.com/cloud_and_mobile/2014/12/... sollte dir helfen. Zusammen mit der Antwort von MattHouser Sie sollten in der Lage zu führen Sie die nodejs-app
- Ich tatsächlich verwendet das tutorial zum einrichten des Servers, alles, was ich Tat danach ist, einfach zu Bearbeiten, tutorial html und laden Sie Sie hoch. Dann lief ich "npm install" und sobald es gemacht wurde "Knoten app.js"
- Hast du ändern in app.js die Zeile var io = require('socket.io").listen(app.listen(port)); zu var io = require('socket.io").listen(app.listen(port, "0.0.0.0")); und führen Sie dann den Knoten
- yup, das ist die einzige Zeile die ich geändert habe (+ html-Code) und es lief, produziert Fehler wie in meinem Kommentar zu Matt
- Vielleicht hilft: serverfault.com/questions/355382/...
- Hier ist eine große Gesamt-tutorial zum einrichten eines node.js web-server auf EC2: youtube.com/watch?v=WxhFq64FQzA
- ok, ich bin immer irgendwo, änderte ich die ip verwendet, um den Privaten Server IP und ich habe geladen bis es auf port 8080, aber immer wenn ich es ändern zu 80 es gibt noch Fehler. Es ist möglich, auf die es hier 52.19.7.59:8080, aber keine styles oder Funktionalität funktioniert
- Auf port 80, wird die Fehlermeldung EACCESS? Wenn dem so ist, das ist, weil Sie das nicht Ihrem server als root an. Das video oben bietet Möglichkeiten, was zu tun.
- Da Sie nicht zeigen Sie Ihre Routen code, es gibt nicht viel können wir tun, um zu helfen, warum stylesheets und anderen Ressourcen nicht laden. Ich vermute, dass entweder die Dateien nicht in das richtige sub-Verzeichnis auf Ihrem server oder die Routen sind nicht korrekt deklariert. Ich würde vorschlagen, nicht mit "../somefile", die als Pfade. Verwenden Sie einfach "/somefile" oder "/somepath/somefile", und verwalten Sie Ihre Routen dementsprechend. Sie wirklich nicht wollen, stylesheet Pfade zu verlassen, auf dem Pfad der Seite, Sie sind in. Sie wollen, dass Sie absolut auf Ihrem server.
- damnit, ich wusste es war irgendwas mit sudo in der Rückseite von meinem Kopf. sudo löst die meisten von dem Zeug, danke für den Tipp! nun, ich habe, um herauszufinden, wie man den Stil und die Funktionalität geht :/
- okay ich werde schauen Sie sich um und verknüpfen, vielen Dank für die Hilfe 🙂
- OK, wusste ich nicht, dass die
express.static()
Linien sind bereits in Ihrer Frage auf config.js. Wenn diese nicht funktionieren, dann ist etwas nicht-übereinstimmung zwischen dem tatsächlichen Speicherort der statischen Dateien in Ihrem Datei-system (relativ zu Ihrem app-Verzeichnis) und die Wege, die Sie in den HTML-Code. Ich vermute, das ist ein Thema, wo man sagtexpress.static()
Blick in die__dirname/public
Verzeichnis, aber dann sind Sie Anfrage/public/somefile
was bedeutet express.static ist auf der Suche nach__dirname/public/public/somefile
. - Aber, die
express.static()
Zeug regelmäßig verwirrt mich und manchmal bekomme ich nur unconfused tatsächlich ein Schritt durch eine VORGEGEBENE Anforderung, um zu sehen, was es tatsächlich ist zu suchen, zu verstehen, was es denkt, ich habe gesagt, es zu tun. In jedem Fall, haben Sie wahrscheinlich eine Pfad-mismatch zwischen dem Pfad in den HTML-Code, wie Sie konfiguriert habenexpress.static()
und wo Sie die Dateien in Ihre server.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst, ich denke, dass Sie verwirrt sind, networking und IP-Adressen. Die
localhost
reserviert ist, die Hostnamen für die IP-Adresse 127.0.0.1 und ist äquivalent zu sagenTHIS COMPUTER
. Lesen Sie mehr über "localhost" auf offizielle wiki-Seite.Zweitens, ich würde sehr empfehlen Ihnen, löschen Sie Ihre EC2-Instanz und verwenden Sie es nicht für jetzt. Wenn Sie Anfänger sind, gibt es viele Möglichkeiten, die kostenlos sind und mehr Benutzer freundlich. Zum Beispiel Heroku ist die große Plattform zu beginnen. Ich empfehle Ihnen, beginnen Sie mit Ihrer Lernprogramm - Erste Schritte mit Nodejs. Versuchen Sie zunächst einfache app und die Bereitstellung auf Heroku. Einige unbeabsichtigt Fehler(expose Konfiguration und Passwörter auf Github, öffnen von Ports, Verfügbarmachen von öffentlichen IP-Adressen, etc.) auf EC2 können, kostet Sie Tausende von Dollar in der Periode von wenigen Minuten. Also ich würde empfehlen, um wieder zu EC2 später, wenn Sie erfahrener sind. Heroku ist auch frei für eine app, damit es nicht kostet Sie nichts und es ist wirklich einfach zu setup. Sie können auch die Einrichtung Ihrer eigenen domain.
Wenn Sie sagen:
Ich gehe davon aus, dass Sie versuchen, lassen Sie Ihre Anwendung auf Ihrem eigenen server. Ich werde nicht schreiben Schritt für Schritt, wie die Knoten bereitstellen der app auf einem server, ich glaube, Sie sollten einige andere hosting. Aber wenn Sie mehr wissen möchten über laufende Knoten-Anwendung in der Produktion environemnt, ich denke, dass diese tutorial kann Ihnen Einblick in das, was alle gebraucht.
Schließlich sollte erwähnt werden, dass sollten Sie niemals aussetzen sensiblen Daten über das internet. Löschen Sie die öffentliche ip-Adresse von deiner Frage.
Wenn Sie benutzen Sie einfach
app.listen(port)
es werden nur verbindungen vom localhost (wie Sie sehen).Zur externen verbindungen zulässt, verwenden Sie
app.listen(port, "0.0.0.0")
. Dieser erzählt Knoten-zu hören auf dem externen Netzwerk-Schnittstellen.Stellen Sie außerdem sicher, dass Ihre EC2-instance-Sicherheits-Gruppe erlaubt es, eingehende verbindungen auf den entsprechenden port.
Update:
Wie bereits von jfriend00, und weitere Untersuchungen, das ist nicht korrekt.
Ref: http://expressjs.com/api.html#app.listen
app.listen(port)
verbindungen nicht limitiert werden nur von localhost. Ich habe einen server laufen mitapp.listen(port)
und akzeptiert er verbindungen von einem beliebigen host im Netzwerk.app.listen(port, process.env.HOST)