Я работаю над частной сетью Ethereum. Я запускаю загрузочный узел Ethereum и Ethereum Block Explorer
приложение ( https://github.com/etherparty/explorer (облегченный обозреватель блоков ethereum)) на главном сервере.
Внутри основного сервера, на котором я запускаю узел Ethereum, в браузере я могу подключиться к Ethereum Block Explorer
from localhost:8000
:
Но с внешнего узла в браузере, когда я пытаюсь подключиться с IP-адреса основного сервера, < ip-address >:8000
я столкнулся со следующим сообщением об ошибке. Основной причиной этого сообщения об ошибке было « web3
не подключено» .
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
}
На внешнем узле, если я запускаю geth
приложение в фоновом режиме, которое уже подключено к частной сети Ethereum, это решает проблему.
[В] Можно ли на внешнем узле без запуска geth
приложения в фоновом режиме Ethereum Block Explorer
подключиться к geth
приложению, которое уже запущено на основном сервере? Если да, есть ли безопасный подход, который работает geth
на --rpcaddr="localhost" --rpccorsdomain="*"
основном сервере?
Спасибо за ваше драгоценное время и помощь.
Примечание:
=> Как я запускаю узел Ethereum:
geth --port 3000 --networkid 23422 --nodiscover --datadir="/home/MyEthereumEbloc"
--rpc --rpcaddr="localhost" --rpccorsdomain="*" --maxpeers=6 --ipcapi
"admin,eth,web3" --autodag
=> Чтобы установить Ethereum Block Explorer
, я следовал руководству по установке на https://github.com/etherparty/explorer .
[~$] 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
=> Внутри файла package.json, который находится в папке проводника: приложение запускается следующим образом:
"start": "http-server ./app -a localhost -p 8000 -c-1"
Пожалуйста, знайте, что когда я изменил локальный хост на IP-адрес узла, это не помогло:
"start": "http-server ./app -a <ip-address> -p 8000 -c-1"
!!Обратите внимание, что это решение работает только в том случае, если внешний узел и основной сервер находятся в одном и том же сетевом домене!!
Небезопасный подход:
Проблема заключалась в следующем: как я запускаю свой RPC.
Запустите geth
на основном сервере следующим образом:
> admin.startRPC("0.0.0.0", 8545, "*")
true
или же
--rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"
Обновите explorer/app/app.js следующим образом:
//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));
Я использовал, Docker
чтобы преодолеть эту проблему. Установка докера . Из этого ответа на этот вопрос Как я могу открыть RPC-сервер Geth для внешних подключений? , я использовал Docker
в качестве сервера приложений, который на самом деле работает внутри моего Ethereum Node
.
Я следил за установкой приложенияEthereum Block Explorer
.
Чтобы преодолеть следующую проблему (завиток: (56) Recv failure: Connection reset by peer)
внутри Docker, я заменил ключевое слово «localhost», которое существует в папке проводника, на «0.0.0.0»: https://stackoverflow.com/a/27818259/2402577
Предположим , что geth
он работает по адресу remotehost.remotedomain.tld.
[~] 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
Вставьте следующие строки в Dockerfile.
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
Эта часть не является обязательной:
[~] 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
Теперь вы можете открыть Ethereum Block Explorer
приложение с внешнего узла, используя host's_IP:port.
remotehost.remotedomain.tld:3002
Полезная ссылка для компиляции nodejs
и docker
: https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
Если внешний узел является вашим доверенным узлом, вы можете попробовать использовать туннелирование SSH. Выполните ssh -L 8545:localhost:8545 username@main-server-ip-address на удаленном узле, и вы получите открытый порт 8545 на удаленном узле, который будет безопасно (зашифрован) перенаправлен на main_server-ip-address:8545. Все соединения с удаленным узлом: 8545 будут интерпретироваться как соединения с ip-адресом основного сервера: 8545 с локального хоста.
Чтобы упростить процесс подключения, вы можете добавить открытый ключ удаленного узла в файл ~/.ssh/authorized_keys основного сервера, как описано здесь https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh- ключи--2
ЭТОТ ПОДХОД НЕ БЕЗОПАСЕН!!! Если вы просто хотите открыть порт rpc на своем основном сервере, вы также можете использовать для этого ssh. Выполните ssh -L main-server-external-ip-address:port-to-forward-rpc:localhost:8545 username@localhost на вашем основном сервере, и вы получите открытый порт port-to-forward-rpc на главном сервере . -внешний-ip-адрес , к которому можно получить доступ из любого места. Все подключения к этому порту будут интерпретироваться geth как подключения с локального хоста. После этого вы можете использовать
var eth_node_url = 'http://main-server-external-ip-address:port-to-forward-rpc '; web3.setProvider(new web3.providers.HttpProvider(eth_node_url));
без каких-либо ограничений доступа к домену\сети
FrenchieiSverige
Ethereum Block Explorer
. Я знаю, что это косвенное решение, но как насчет того, чтобы использовать собственный VPN и позволить им думать, что они находятся в той же сети? Или, может быть, просто ssh-туннеля может быть достаточно?альпер
geth
егоETH
на моем локальном компьютере, и я по-прежнему могу видеть всю информацию на веб-сайте.FrenchieiSverige