子熊のゾルバ@cryptocurrency

仮想通貨の役立つ情報をお届けします。

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その六 Gekkoのインストール

おれぁおせっかい焼きの子熊のゾルバ!皆さんの仮想通貨取引を手伝うぜ!

f:id:zorbathelittlebear:20170920011918p:plain


今日でようやくGekkoのインストールが完了します。もう少しお付き合い下さい。

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その五 Google Cloud Platformでのサーバー構築の続き - 子熊のゾルバ@cryptocurrency


node(nodejs)と関連パッケージのインストール

Gekkoを動かすにはnodejsのバージョン6以上が必要です。前回の記事でapt-getでインストールしたnodejsとnpmのバージョンは古いので、アップグレードします。

$ nodejs -v
v4.2.6

前回の記事を参考に、SSHでアクセスします。
以下のコマンドを入力し、rootで作業します。プロンプトが"$"から"#"に変わったことを確認します。

sudo su -

npmのキャッシュを削除します。

npm cache clean

n packageをインストールします。

npm install n -g

インストールが成功すればこのように表示されます。

# npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
/usr/local/lib
└── n@2.1.8 

node(nodejs)をインストールします。

n stable

インストールが成功すればこのように表示されます。バージョンはv8.6.0ですね。

# n stable

     install : node-v8.6.0
       mkdir : /usr/local/n/versions/node/8.6.0
       fetch : https://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-x64.tar.gz
######################################################################## 100.0%
   installed : v8.6.0

apt-getでインストールしたnodejsとnpmは削除しておきます。

apt-get purge -y nodejs npm

Gekkoのインストール

お待たせしました。ようやくGekkoをインストールします!

Gekko用のグループ、ユーザーを作成します。(rootで動作させると、アプリケーションの脆弱性によってはシステムの乗っ取りにつながるため)

groupadd gekko
useradd -g gekko --shell /usr/sbin/nologin gekko

Gekko用の作業用ディレクトリを作成します。

cd /home/
mkdir gekko
chown gekko:gekko gekko

/usr/local/bin/ディレクトリの下に移動します。

cd /usr/local/bin/

Gekkoをダウンロードします。

git clone git://github.com/askmike/gekko.git

成功すればこのように表示されます。

# git clone git://github.com/askmike/gekko.git
Cloning into 'gekko'...
remote: Counting objects: 9036, done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 9036 (delta 10), reused 12 (delta 3), pack-reused 9008
Receiving objects: 100% (9036/9036), 2.84 MiB | 0 bytes/s, done.
Resolving deltas: 100% (5844/5844), done.
Checking connectivity... done.

Gekkoのアプリケーションの所有者をgekkoユーザーに変更します。

chown -R gekko:gekko gekko


Gekkoのディレクトリに移動します。

cd gekko

Gekkoに必要なパッケージをインストールします。

npm install --only=production

成功すればこのように表示されます。

# npm install --only=production
npm WARN deprecated crypto@0.0.3: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN deprecated tough-cookie@2.2.2: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130

> bufferutil@1.2.1 install /usr/local/bin/gekko/node_modules/bufferutil
> node-gyp rebuild

make: Entering directory '/usr/local/bin/gekko/node_modules/bufferutil/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/bufferutil/build'

> utf-8-validate@1.2.2 install /usr/local/bin/gekko/node_modules/utf-8-validate
> node-gyp rebuild

make: Entering directory '/usr/local/bin/gekko/node_modules/utf-8-validate/build'
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/utf-8-validate/build'

> websocket@1.0.24 install /usr/local/bin/gekko/node_modules/websocket
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/usr/local/bin/gekko/node_modules/websocket/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/websocket/build'

> sqlite3@3.1.13 install /usr/local/bin/gekko/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

[sqlite3] Success: "/usr/local/bin/gekko/node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.node" is installed via remote

> relieve@2.2.1 postinstall /usr/local/bin/gekko/node_modules/relieve
> node links.js

npm notice created a lockfile as package-lock.json. You should commit this file.
added 574 packages in 46.167s

Gekkoの設定ファイルを作成します。(設定例のファイルをコピー)

cp -p sample-config.js config.js

Gekkoのもう1つの設定ファイルを編集します。ディレクトリに移動します。

cd web/vue

初期設定のファイルのバックアップを取ります。

mv UIconfig.js UIconfig.js.default

以下のコマンドを全てコピー&ペーストします。この例ではuiのhostにhogehoge.gaを入れていますが、Freenomで取得したドメイン名に置き換えてください。

cat << '__EOF__' > UIconfig.js
// This config is used in both the
// frontend as well as the web server.

// see https://gekko.wizb.it/docs/installation/installing_gekko.html

const CONFIG = {
  headless: true,
  api: {
    host: '127.0.0.1',
    port: 3000,
  },
  ui: {
    ssl: true,
    host: 'hogehoge.ga',
    port: 443,
    path: '/'
  },
  adapter: 'sqlite'
}

if(typeof window === 'undefined')
  module.exports = CONFIG;
else
  window.CONFIG = CONFIG;
__EOF__

起動用の設定ファイルを準備します。以下のコマンドを全てコピー&ペーストします。

cat << '__EOF__' > /etc/systemd/system/gekko.service
[Unit]
Description=Gekko
After=syslog.target network.target

[Service]
Type=simple
User=gekko
Group=gekko
Environment=PATH=/usr/local/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
ExecStart=/usr/local/bin/node /usr/local/bin/gekko/gekko.js --ui
WorkingDirectory=/home/gekko
KillMode=process

[Install]
WantedBy=multi-user.target
__EOF__

Gekkoを起動します。

systemctl start gekko

GekkoがOS起動時に自動的に立ち上がるようにします。

systemctl enable gekko

状態を確認します。

systemctl status gekko

以下のように、loaded (/etc/systemd/system/gekko.service; enabledのようにenabledと表示されていればOS起動時に立ち上がります。
active (running)と表示されていれば現在起動しています。

# systemctl status gekko
● gekko.service - Gekko
   Loaded: loaded (/etc/systemd/system/gekko.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-10-03 14:00:48 UTC; 11s ago
 Main PID: 8718 (node)
    Tasks: 6
   Memory: 21.0M
      CPU: 304ms
   CGroup: /system.slice/gekko.service
           └─8718 /usr/local/bin/node /usr/local/bin/gekko/gekko.js --ui

Oct 03 14:00:48 gekko node[8718]:   $$ | _$$/ $$ |__    $$ |/$$/  $$ |/$$/  $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ |/    |$$    |   $$  $$<   $$  $$<   $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ |$$$$ |$$$$$/    $$$$$  \  $$$$$  \  $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ \__$$ |$$ |_____ $$ |$$  \ $$ |$$  \ $$ \__$$ |
Oct 03 14:00:48 gekko node[8718]:   $$    $$/ $$       |$$ | $$  |$$ | $$  |$$    $$/
Oct 03 14:00:48 gekko node[8718]:    $$$$$$/  $$$$$$$$/ $$/   $$/ $$/   $$/  $$$$$$/
Oct 03 14:00:48 gekko node[8718]:         Gekko v0.5.7
Oct 03 14:00:48 gekko node[8718]:         I'm gonna make you rich, Bud Fox.
Oct 03 14:00:49 gekko node[8718]: TAlib is disabled
Oct 03 14:00:49 gekko node[8718]: Serving Gekko UI on https://hogehoge.ga:443/

Gekkoの動作確認

それではではブラウザでGekkoにアクセスしてみましょう。
https://hogehoge.ga/
私の場合、hogehoge.gaですがFreenomで取得したドメイン名に置き換えてください。

nginxが正しく動いていれば認証画面が表示されます。htpasswdコマンドで設定したユーザー名、パスワードを入力します。

f:id:zorbathelittlebear:20171003231705p:plain

Gekkoが正しく動いていれば、以下の画面が表示されます。

f:id:zorbathelittlebear:20171004000047p:plain

おめでとうございます!
慣れていない人は全体的に少し難しかったかもしれません。ご不明な点、うまくいかない点があればお気軽にコメントを頂ければと思います。

うまく動作しない時は

Google Chromeでアクセスすると、このようなエラーが表示されます。

このサイトにアクセスできません hogehoge.gaのサーバーのDNSアドレスが見つかりませんでした。 DNS_PROBE_FINISHED_NXDOMAIN

f:id:zorbathelittlebear:20171004003759p:plain

以下の点を確認します。


MyDNSサーバーへのIPアドレス通知が成功しているかログで確認します。

cat /var/log/mydns.log

以下のように、サーバーから200 OKが応答されている事、正しいユーザー名を使用している事、サーバーの外部IPが応答されている事を確認します。

< HTTP/1.1 200 OK    <=== ココ
< Date: Tue, 03 Oct 2017 15:27:58 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Vary: Accept-Encoding,User-Agent
< Content-Length: 608
< Content-Type: text/html; charset=UTF-8
<
<html>
<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc  | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>

</head>
<BODY BGCOLOR="#FFFFFF"
      TEXT="#304040"
      leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydnsXXXXXX</DD>    <=== ココ
<DT>REMOTE ADDRESS:</DT><DD>xxx.xxx.xxx.xxx</DD>    <=== ココ
<DT>ACCESS DAYTIME:</DT><DD>2017/10/03 17:27</DD>
<DT>SERVER ADDRESS:</DT><DD>46.19.34.8</DD>
<BR>

</body>
</html>
* Connection #0 to host www.mydns.jp left intact
このサイトにアクセスできません hogehoge.gaからの応答時間が長すぎます。 ERR_CONNECTION_TIMED_OUT

f:id:zorbathelittlebear:20171004003820p:plain

以下の点を確認します。

このサイトにアクセスできません hogehoge.gaで接続が拒否されました ERR_CONNECTION_REFUSED

f:id:zorbathelittlebear:20171004004128p:plain

nginxが起動しているか確認します。
起動していない場合、設定ファイル(/etc/nginx/sites-available/default)が正しいか確認し、systemctl start nginxで起動します。
もしOS起動時に自動的に起動しない場合、systemctl enable nginxで自動起動を有効にします。

このページは動作していません hogehoge.gaからデータが送信されませんでした。

f:id:zorbathelittlebear:20171004004630p:plain

HTTPでアクセスしていませんか?URLに「https://」を指定してアクセスしている事を確認します。
(セキュリティ上不要なアクセスを防ぐため、nginxでLet's Encrypt以外からのHTTPアクセスはコネクションを切断(RSTを応答)するように設定しています。)

401 Authorization Required

f:id:zorbathelittlebear:20171004005521p:plain

nginxのユーザー認証に失敗しています。パスワードを忘れた時は、以下のファイルを削除します。

rm -f /etc/nginx/.htpasswd

改めて認証設定を作成します。

htpasswd -bc /etc/nginx/.htpasswd USERNAME PASSWORD

nginxに設定を読み込ませます。

systemctl reload nginx
502 Bad Gateway

f:id:zorbathelittlebear:20171004005538p:plain

Gekkoが停止しています。以下のコマンドでGekkoを起動します。

systemctl start gekko
Disconnected

f:id:zorbathelittlebear:20171004005550p:plain

Gekkoの設定が間違っているかもしれません。
改めて本記事で設定したUIconfig.jsが正しいか確認します。

参考サイト

Ubuntuに最新のNode.jsを難なくインストールする - Qiita

Installing Gekko - Gekko

centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する - Qiita


____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。