Ich arbeite an einem privaten Ethereum-Netzwerk. Ich führe Ethereum Boot-Node und Ethereum Block Explorer
App ( https://github.com/etherparty/explorer (Ein leichter Ethereum-Block-Explorer.) ) auf dem Hauptserver aus.
Innerhalb des Hauptservers, auf dem ich den Ethereum-Knoten betreibe, konnte ich mich im Browser mit dem verbinden Ethereum Block Explorer
von localhost:8000
:
Aber von einem externen Knoten im Browser, wenn ich versuche, eine Verbindung von der IP-Adresse des Hauptservers herzustellen, wird < ip-address >:8000
mir die folgende Fehlermeldung angezeigt. Der Hauptgrund für diese Fehlermeldung war " web3
ist nicht verbunden"
var eth_node_url = 'http://localhost:8545'; // TODO: remote URL
web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
if(!web3.isConnected()) {
$('#connectwarning').modal({keyboard:false,backdrop:'static'}) //enters here
$('#connectwarning').modal('show') //enters here
}
Wenn ich auf dem externen Knoten eine geth
App im Hintergrund ausführe, die bereits mit dem privaten Ethereum-Netzwerk verbunden ist, wird das Problem gelöst.
[F] Ist es auf dem externen Knoten möglich , eine Verbindung zu der App herzustellen, die bereits auf dem Hauptserver ausgeführt wird , ohne die geth
App im Hintergrund auszuführen? Wenn ja, gibt es einen sicheren Ansatz zum Ausführen mit auf dem Hauptserver?Ethereum Block Explorer
geth
geth
--rpcaddr="localhost" --rpccorsdomain="*"
Vielen Dank für Ihre wertvolle Zeit und Hilfe.
Notiz:
=> So betreibe ich den Ethereum Node:
geth --port 3000 --networkid 23422 --nodiscover --datadir="/home/MyEthereumEbloc"
--rpc --rpcaddr="localhost" --rpccorsdomain="*" --maxpeers=6 --ipcapi
"admin,eth,web3" --autodag
=> Zur Installation Ethereum Block Explorer
habe ich die Installationsanleitung auf https://github.com/etherparty/explorer befolgt .
[~$] git clone https://github.com/etherparty/explorer [~$] cd explorer [~/explorer$] npm start > EthereumExplorer@0.1.0 prestart /home/netlab/explorer > npm install > EthereumExplorer@0.1.0 postinstall /home/netlab/explorer > bower install > EthereumExplorer@0.1.0 start /home/netlab/explorer > http-server ./app -a 79.123.177.145 -p 8000 -c-1 Starting up http-server, serving ./app on port: 8000
=> In der Datei package.json, die sich im Explorer-Ordner befindet: App wurde wie folgt gestartet:
"start": "http-server ./app -a localhost -p 8000 -c-1"
Bitte beachten Sie, dass es nicht geholfen hat, als ich localhost in node'a IP-Adresse geändert habe:
"start": "http-server ./app -a <ip-address> -p 8000 -c-1"
!!Bitte beachten Sie, dass diese Lösung nur funktioniert, wenn sich der externe Knoten und der Hauptserver in derselben Netzwerkdomäne befinden!!
Unsicherer Ansatz:
Das Problem war: wie starte ich meinen RPC.
Führen Sie geth
auf dem Hauptserver wie folgt aus:
> admin.startRPC("0.0.0.0", 8545, "*")
true
oder
--rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"
Aktualisieren Sie explorer/app/app.js wie folgt:
//var eth_node_url = 'http://localhost:8545'; //commented out.
var eth_node_url = 'http://<ip-address of the main server>:8545';
web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
Ich habe verwendet Docker
, um dieses Problem zu überwinden. Docker-Installation . Von dieser Antwort auf diese Frage Wie kann ich den RPC-Server von Geth für externe Verbindungen verfügbar machen? , habe ich Docker
als Anwendungsserver verwendet, der tatsächlich in meiner Ethereum Node
.
Ich habe die Installation für die Ethereum Block Explorer
App befolgt.
Um das folgende Problem zu lösen (Curl: (56) Recv failure: Connection reset by peer)
In Docker habe ich das Schlüsselwort „localhost“, das im Explorer-Ordner vorhanden ist, durch „0.0.0.0“ ersetzt): https://stackoverflow.com/a/27818259/2402577
Angenommen geth
, es wird unter remotehost.remotedomain.tld ausgeführt
[~] git clone https://github.com/etherparty/explorer
[~] cd explorer
[~] dir="$PWD";
[~] find $dir -type f -exec sed -i 's/localhost/0.0.0.0/g' {} +
[~] emacs -nw Dockerfile
Fügen Sie die folgenden Zeilen in Dockerfile ein.
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8000
CMD [ "npm", "start" ]
-
[~] sudo docker build -t <your username>/node-web-app
[~] sudo docker run -p 3002:8000 -d <your username>/node-web-app
Dieser Teil wird nicht benötigt:
[~] sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26c46398b20d yo/node-web-app "npm start" 7 seconds ago Up 5 seconds 0.0.0.0:3002->8000/tcp pedantic_knuth
[~] sudo docker exec -it 26c46398b20d /bin/bash
root@26c46398b20d:/usr/src/app# ssh -f -N -L 8545:localhost:8545 remoteUser@remotehost.remotedomain.tld
Jetzt können Sie die Ethereum Block Explorer
App von einem externen Knoten mit host's_IP:port öffnen.
remotehost.remotedomain.tld:3002
Hilfreicher Link zum Kompilieren nodejs
und docker
: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
Wenn der externe Knoten Ihr vertrauenswürdiger Knoten ist, können Sie versuchen, SSH-Tunneling zu verwenden. Führen Sie ssh -L 8545:localhost:8545 username@main-server-ip-address auf dem Remote-Knoten aus und Sie erhalten geöffneten Port 8545 auf dem Remote-Knoten, der sicher (verschlüsselt) an main_server-ip-address:8545 weitergeleitet wird. Alle Verbindungen zu remote-node:8545 werden als Verbindungen zu main-server-ip-address:8545 von localhost interpretiert.
Um den Verbindungsprozess zu vereinfachen, können Sie den öffentlichen Schlüssel des Remote-Knotens zur Datei ~/.ssh/authorized_keys des Hauptservers hinzufügen, wie hier beschrieben https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh- Schlüssel--2
DIESER ANSATZ IST UNSICHER!!! Wenn Sie nur den RPC-Port auf Ihrem Hauptserver geöffnet haben möchten, können Sie auch ssh dafür verwenden. Führen Sie ssh -L main-server-external-ip-address:port-to-forward-rpc:localhost:8545 username@localhost auf Ihrem Hauptserver aus, und Sie erhalten einen geöffneten Port port-to-forward-rpc auf dem Hauptserver -externe IP-Adresse , auf die von überall aus zugegriffen werden kann. Alle Verbindungen zu diesem Port werden von geth als Verbindungen von localhost interpretiert. Danach können Sie verwenden
var eth_node_url = 'http://main-server-external-ip-address:port-to-forward-rpc '; web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
ohne Domänen-\Netzwerkzugriffsbeschränkungen
FrenchieiSverige
Ethereum Block Explorer
. Ich weiß, dass dies eine indirekte Lösung ist, aber wie wäre es, wenn Sie Ihr eigenes VPN verwenden und sie glauben lassen, dass es sich im selben Netzwerk befindet? Oder reicht vielleicht nur ein SSH-Tunnel?Alper
geth
den nichtETH
auf meinem lokalen Rechner ausführen und kann trotzdem alle Informationen auf der Website sehen.FrenchieiSverige