Скриншот с канала red21
В продолжении первой части данного цикла статей я расскажу о том, как развернуть полноценный web-клиент для доступа к блокчейну Голос.
Если вы работаете на Linux - читаем дальше, если у вас другая ОС - то сперва гляньте первую часть.
- Установка и настройка виртуального сервера(часть 1)
- Установка на сервер клиента golos.io(часть 2)
- Работа с кодом клиента(часть 3)
- Как отправить свой код разработчикам golos.io(часть 4)
И так, поехали. За основу я брал материал уважаемого @vik`а. По его мануалу запустить голос у меня не получилось, видимо он устарел. Моя инструкция актуальна на сегодняшний день, устанавливать я всё буду на свежую систему.
Запускаем виртуальную машину.
На локальном компьютере запускайте консоль(терминал). Как говорил ранее - я запущу PuTTY через WinSCP (нажав Ctrl+P)
Окно PuTTY выезжает за окно виртуалки, чтоб было очевидно, что запущено она в основной ОС.
http://i.imgur.com/LLO5gKr.png
В первую очередь нужно установить Git.
Для справки: git - это система контроля версий. Она, скажем так, хранит слепок файловой системы(который вы сами “положите в git”). Если вы напишите какой-то плохой код, или затрёте что-то важное - всегда можно откатиться к одной из предыдущих версий. Версий файловой системы(бранчей) можно держать сколько угодно, объединять их между собой(мерджить). Это достаточно обширная тема.
Попробуйте набрать в консоли git
. Если увидите сообщение о том, что данная программа не установлена - устанавливайте её так:
sudo apt-get install git
http://i.imgur.com/fuJCiTT.png
Теперь нужно где-то развернуть сайт.
Развернём прямо в домашней директории, по умолчанию вы находитесь в ней. Чтобы в неё вернуться в консоли можно написать cd ~
.
Для получения кода сайта - его нужно склонировать из его репозитория. Находится он тут https://github.com/GolosChain/tolstoy
Клонируем его такой командой
git clone https://github.com/GolosChain/tolstoy
http://i.imgur.com/795JTtc.png
Теперь у вас в домашней директории есть папка tolstoy, в которой находится весь код клиента golos.io
Перейти в неё можно командой:
cd tolstoy
Затем создаём в ней папку tmp командой:
mkdir tmp
http://i.imgur.com/7k8bon6.png
Теперь установим curl(эта утилита позволяет обращаться к адресам в интернете и скачивать полученное содержимое).
Пишем в консоли
sudo apt-get install curl
http://i.imgur.com/K17CTdX.png
Далее нужно скачать Node Version Manager, сокращённо nvm.
Пишем в консоли:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
http://i.imgur.com/eYV3dDf.png
И чтобы команда nvm работала - нужно выполнить две команды:
export NVM_DIR="/home/user/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
После успешной установки NVM с помощью него же и устанавливаем Node JS.
Для этого пишем:
nvm install node
http://i.imgur.com/K3ocozw.png
Если теперь выполнить команду nvm use node
- то вы увидите свою версию NodeJS и NPM(Node.js Package Manager).
С помощью npm установим требуемые пакеты командой:
npm install
Так как после ключевого слова install мы не указали имени пакета - они подтянутся из файла npm-shrinkwrap.json
http://i.imgur.com/sCCTpnf.png
Вот тут один интересный момент. На моей системе инсталляция упала на пакете node-sass. Если у вас тоже валятся ошибки - то придётся внести правки в npm-shrinkwrap.json
Чтобы это исправить я поменял версию этого пакета.
sudo mcedit npm-shrinkwrap.json
Для поиска жмём F7 и пишем node-sass
http://i.imgur.com/bvt4Rqy.png
Значение “version” меняем на 4.5.3 и эту же версию вписываем в resolved:
http://i.imgur.com/QF7IIfT.png
Сохраняем и выходим.
Почему так? Думаю, что когда собирался
npm-shrinkwrap.json
версия ОС была другой и с такими версиями пакетов всё собиралось. Это скорее вопрос к @b1acksun и @sheriff
Если вы вносили эти правки - то опять делайте npm install
.
Если всё проинсталилось без ошибок - то после установки пишем:
npm install -g babel-cli
npm i pm2 -g
http://i.imgur.com/bJ2DutW.png
Затем нужно взять экземпляры конфигов и на их основе сделать конфиги приложения:
Копируем конфиги так:
cp config/example/golos-example.json config/golos-dev.json
cp config/example/client-example.js config/client_config.js
http://i.imgur.com/Ww9ZgZC.png
Запускаем NodeJS командой:
node
И потом пишем такую команду:
crypto.randomBytes(32).toString('base64')
http://i.imgur.com/b4pL7G2.png
Вы увидите ключ. Его надо скопировать, он нам потом пригодится.
В консоли, как правило, не работает правая кнопка мыши. Просто выделите этот ключ и он скопируется в буфер обмена. Откройте блокнот и нажмите Ctrl+V, ключ должен вставиться.
Дважды нажмите Ctrl+C и node закроется.
Теперь установим БД MySQL командой:
sudo apt-get install mysql-server
Mysql попросит создать пароль для root. Можете вписать root или ничего не вписывать. Или придумать сложный пароль.
http://i.imgur.com/V18tC4s.png
У меня всё поставилось.
http://i.imgur.com/I9vABee.png
Если у вас возникли какие-то ошибки - попробуйте выполнить sudo apt-get update
, а потом заново проинсталить mysql.
После установки mysql подключаемся к ней прямо в консоли:
sudo mysql -u root -p
- без пароля
Если у вас есть пароль, то sudo mysql -u root -pPassword
Теперь удалим этого пользователя и создадим его заново, дав ему все привилегии.
Если вы подключились к mysql - то командная строка у вас должна начинаться с mysql>
http://i.imgur.com/taZkzju.png
Пишем по одной команде:
DROP USER 'root'@'localhost';
- удаляем пользователя
CREATE USER 'root'@'%' IDENTIFIED BY '';
- создаём пользователя
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
- выдаём привилегии
FLUSH PRIVILEGES;
- сбрасываем “кэш”
Так-же находясь в mysql создаём БД:
create database golos_dev;
exit;
- выходим
http://i.imgur.com/aPj988x.png
Для создания таблиц, необходимых для клиента, воспользуемся пакетом sequelize-cli. Он запустит миграцию из папки db.
Устанавливаем его:
npm install -g sequelize-cli pm2 mysql
Если всё нормально - то вы увидите примерно следующее:
http://i.imgur.com/LSnNvdc.png
Далее правим конфиг подключения к БД.
sudo mcedit db/config/config.json
У вас откроется интерфейс редактирования этого текстового файла:
http://i.imgur.com/h01sGkI.png
Я затёр пароль от root(я его не ставил). База golos_dev - оставляем, так как базу именно с таким именем мы создали чуть ранее. После правок жмём F2 и F10.
Теперь переходим в папку db и запускаем миграцию:
cd db
sequelize db:migrate
http://i.imgur.com/yrxxV4A.png
Всё, все таблицы успешно создались
Теперь находим ключ, который создали при помощи node. Если потеряли - можете создать новый, это не критично.
Его нужно вписать в golos-dev.json
cd ~/tolstoy
- вернёмся в корень проекта
sudo mcedit config/golos-dev.json
http://i.imgur.com/eokTWJz.png
Ищите строку "server_session_secret": "some-long-super-secret-string", и меняете в ней some-long-super-secret-string на свой ключ.
Сохраняйте и выходите из редактирования.
http://i.imgur.com/XFEtvpC.png
Запускаем npm
npm start
Ждём пока проект скомпилируется
http://i.imgur.com/ai1EVTe.png
Если всё получилось - вы увидите:
webpack: Compiled successfully.
connecting to wss://ws.golos.io
Application started on port 3002
Это говорит о том, что проект успешно заработал.
Проверяем работоспособность блокчейна.
Теперь вспоминаете IP своего сервера и прямо в адресной строке браузера вписываете этот айпишник и через двоеточие порт 3002.
http://i.imgur.com/ZHLIX35.png
Как видите - в блокчейне все свеженькие посты.
Если посмотрите в консоль - то увидите ресурсы, которые вы запрашиваете, открывая страницы блокчейна.
http://i.imgur.com/QD9nl1v.png
А теперь первый нежданчик - не получается авторизоваться. Меню справа тоже не выезжает. В консоли видны ошибки.
http://i.imgur.com/jy05zpm.png
Решается эта проблема следующим патчем.
sudo mcedit node_modules/redbox-react/lib/index.js
Затем нажмите F7 и впишите function _getRewireRegistry__
http://i.imgur.com/ybN9GMm.png
После строки
theGlobalVariable.__$$GLOBAL_REWIRE_REGISTRY__ = Object.create(null);
Дописываем
return theGlobalVariable.__$$GLOBAL_REWIRE_REGISTRY__;
http://i.imgur.com/jmf4OI6.png
Как писал @pav
Такие проблемы часто возникают в момент установки голого свежего релиза из репозитория. А сама проблема кроется в npm компонентах/библиотеках которые в свою очередь подключают свои зависимости (npm библиотеки) без указания точной версии библиотек. Мы для этих вещей используем npm shrinkwrap.
Заново запускаем npm start
Пробуем нажать кнопку “Войти” - всё работает.
http://i.imgur.com/GS8ffFf.png
Можете авторизоваться
http://i.imgur.com/h3JFAKw.jpg
Можете править файлы проекта. После каждого изменения файла проект будет заново собираться. Можете так-же написать в консоли rc
или даже закрыть npm и запустить его заново.
Важно понимать, что если вы закроете консоль - то npm остановится и сайт перестанет работать. Если нужно запустить голос и закрыть консоль - то выполните команду:
pm2 start npm -- start
- запуск
pm2 restart npm -- start
- рестарт
Заключение
Вот, по большому счёту, самое трудное позади.
В следующем уроке я покажу как удобно работать с кодом и даже заслать разработчикам свои правки.
Версия Ubuntu не критична? А то KDE что-то не хочет шевелиться на моем. Или я ее готовить не умею.
На KDE вообще можно не обращать внимания, он не нужен даже.
Да, я тоже с ним помучился.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
losos, kibela, antino, rbrown, narin, dimarss, vik, tristamoff, dany2323, dr-boo, ropox, chika25, natasmr, ladyzarulem, lira, gryph0n, miroslav, asuleymanov, maxiandr, yuriks2000, acidgarry, kvg, igor66, anomalywolf, myhardmoney, rimash, generationg, gradovskih
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!
Вы вроде-бы где-то писали, что через час голосуете? А тут прошли почти сутки. Или теперь так?
@tristamoff сейчас кит приходит через 20 часов от даты создания поста
Отличная инструкция, все подробно и хорошо написано. Респект!
Рад что вам понравилось. Подписывайтесь, сегодня будет продолжение этой серии статей.
Решается эта проблема следующим патчем.
или правкой вpackage.json
сredbox-react": "^1.2.0"
наredbox-react": "1.2.0",
Буду на днях ещё раз поднимать клиент, на реальной машине. Попробую.
Сколько минимум озу нужно для нормальной работы?
Я на слабой машине не пробовал. На днях попробую развернуть на сервере с 512Mb озу. Попробуйте 512 для начала. Если нет - то гигабайта, думаю, точно хватит.
У меня апельсинка (orangepi) есть. Я вот н аней думаю попробовать.
Прикольно. Тоже думал как-то приобрести что-то подобное. Думаю должно заработать.
@tristamoff Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество опубликованных постов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.