Dokku-alt

提供: 釧路高専プロ研Wiki
移動先: 案内検索

プロ研サーバで稼働する dokku-alt の使い方について述べます。

概要[編集]

プロ研部員は、好き勝手にWebアプリをデプロイできます。 dokku-altは、内部でDockerを用いており、まともな利用ではホストに影響を及ぼしませんので安心してください。

ただし、Webアプリが作成したデータを永続的に保存する…といったことは少し面倒です。 ここでは紹介しませんので、もし使いたければVolumeとかそういったキーワードで調べてみてください。

準備[編集]

Webアプリをデプロイするには、dokku-altが提供するGitリポジトリにpushする必要があります。 これによって、nitkc.orgのサブドメインでホスティングが行われます。 なお、nitkc.orgでは、サブドメインをワイルドカードで指定しています。 そのため、kosenverygood.nitkc.org でも kosenyametai.nitkc.org でも通りますが、仕方ありません。

また、このpushは、SSHで行われます。 そのため、このような設定をしておくと、良いと思います。

$ cat ~/.ssh/config
Host dokku.nitkc.org
     Port 25252
     IdentityFile ~/hogehoge/id_rsa

なお、この際の鍵は、GitHubで登録された鍵を用います。 詳しくは、プロ研サーバのサービスに書いています。


静的ファイルのデプロイ[編集]

静的ファイルを配信する場合でも、Rubyやnodeによるサーバを立ち上げる必要があります。

方法はいろいろありますが、nulltask/heroku-static-providerを用いると、こんな感じです。

$ git clone https://github.com/nulltask/heroku-static-provider.git app/
$ cd app/
$ vim public/index.html
$ git remote add dokku dokku@dokku.nitkc.org:appname
$ git add -A
$ git commit -m "Deploy appname to appname.nitkc.org"
$ git push dokku master

といった感じです。当然ですが、git remote addは最初の一回で十分です。

スクリプトのデプロイ[編集]

SinatraとMariaDBを用いたRubyスクリプトをデプロイする方法を紹介します。

これも方法はいろいろありますが、heroku/ruby-sampleを基にすると、こんな感じです。

$ git clone https://github.com/heroku/ruby-sample.git appnamename
$ cd appnamename
$ # いろいろ編集
$ bundle
$ # git aremote add / git add / git commit
$ git push dokku master

これで、アプリのデプロイは完了しました。

しかし、追加でMariDBも使いたい場合、

$ ssh dokku@dokku.nitkc.org mariadb:create appnamename-db
$ ssh dokku@dokku.nitkc.org mariadb:link appnamename appnamename-db

とする必要があります。

また、Ruby以外にも、PHPならheroku/php-getting-started、 それ以外でも、heroku(github)にて言語名でフィルタすると、何か出てきます。

リポジトリのclone[編集]

デプロイが成功すると、dokku-altのリポジトリをcloneすることができます。

$ git clone dokku@dokku.nitkc.org:appname

ただ、dokku-alt側のリポジトリが消失することもないとはいえないこともないなんてことはないかも知れなくもないので、ローカルやGitHubで持っておくのが安全だと思います。


管理用コマンド[編集]

dokku-altでは、サーバにログインし、

$ dokku help

などを実行することで、様々なことが行えます。 しかし、いちいちサーバにログインして実行するというのは、いくらLDAPを導入している本プロ研の場合でも、大変面倒なことです。

が、dokku-altでは、手元の環境から、

ssh dokku@dokku.nitkc.org help

とすることで、サーバで実行したのと同じ結果を得ることができます。

これを利用し、使いそうなものを紹介します。

help
使えるコマンドの一覧を出します。
config <app>
<app>に設定された環境変数が見れます。
logs <app>
<app>が吐いた内容が見れます。たぶん、標準出力/標準エラー出力でしょう'

あとは、直接helpを見るか、公式ページを見たほうが、早いし正確だと思います。


注意点[編集]

デプロイにあたり、注意点があります。紹介します。

学内ネットワークからは使えない[編集]

SSHを用いるし、Port:25252だし…。 Jenkinsと、GitHubでwebhookを有効にしたリポジトリと組み合わせて、「GitHubリポジトリにpushするとdokku-altにデプロイ」みたいな仕組みを作ればいけるかも。

リバースプロキシされる[編集]

nginxでリバースプロキシされるため、クライアントのIPアドレスは取れません。 ただし、X-Forwarded-Forは使えるので、それを見てください。

自動作成されたリバースプロキシ用の設定は、

upstream rapidb { server 172.17.0.3:5000; }
server {
  listen      [::]:80;
  listen      *:80;
  server_name rapidb.nitkc.org;

  location    / {
    proxy_pass  http://rapidhouse-db;
    proxy_redirect http://rapidhouse-db.nitkc.org:5000/ http://rapidhouse-db.nitkc.org/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
  }
  include /home/dokku/rapidb/nginx.conf.d/*.conf;
}

といった感じです。


サーバの起動ポートは指定できない[編集]

「nodeだから3000にしておこう」とすると、痛い目を見ます。 サーバの起動ポートは、環境変数PORTによって指定されるものを用います。

ローカルで試すことを考慮し、

var port = (process.env.PORT || 3000);

などと書かれることが多いみたいです。