freedom-man.com

ブログは俺のセーブポイント

Tag: heroku (page 2 of 3)

Let’s EncryptでHerokuアプリを独自ドメインSSL化

Let’s EncryptをHerokuアプリに適用して、独自ドメインSSL化してみました。言語はPHPで。

Continue reading

Heroku Postgresからのエクスポート

Heroku Postgresからのエクスポートの備忘録(今更感ありますが…)

Continue reading

Heroku Postgresのスキーマをローカルに落として開発する

Heroku Connectを使うとHeroku Postgres側に自動的にスキーマが生成される感じになるので、開発する場合は

  • ローカル開発環境からHeroku PostgresのDBに直接接続する
  • Heroku Postgresのスキーマをローカル環境に持っていく

の2パターンで開発することになります。ただ、前者の場合は同一DBに複数人が開発用として接続することになるので、ミスってデータやテーブルを削除したときや、ユニークなデータを格納したつもりがバッティングしてダメとか、開発上色々と問題があります。さらに東京-US間のレイテンシがあるのでDB接続も低速です。

ということで、実際に開発する場合は後者のパターンになるのですが、この「Heroku Postgresのスキーマをローカルに持っていく」やり方を備忘として残しておきます。

Continue reading

herokuでRabbitMQ Bigwig試してみた

AMQPとかよくわかりませんが、herokuでRabbitMQ BigWigを試してみましたー。
今回はPHPでRabbitMQのチュートリアルを試してみました。

AMQPに関しては以下のサイトが詳しいです。

Continue reading

Dokku Alternative触ってみる。

Dokku AlternativeというOSSを使うと、Dockerを利用して

herokuみたいなPaaSを作れるということなので試してみましたー。

Dokku Alternativeは本家のDokkuに色々と機能を追加したOSSみたいです。

 

参考URLはこちら↓

Dokku Alternative·個人用PaaSにどうぞ。Dokkuに便利な機能を追加 MOONGIFT

Herokuのように簡単に使えるDockerベースのPaaS | KRAY Inc

Dockerを使ったミニPaaSのdokkuをパワーアップさせた「Dokku Alternative」を試す – さくらのナレッジ

 

今回はまっさらなVMに入れてみます。

1. Ubuntuインスタンスを立ち上げる

今回はDigitalOceanで立ち上げました。

スペックはメモリ512MBの一番安いプランで、OSはUbuntu 14.04×64を選択。

Dokku-altはUbuntu 14.04 LTSにしか対応してないっぽいです。

dokku-ubuntu-digitalocean

立ち上げたら、セキュリティ系の諸々の初期設定をした後、スワップファイルの設定をしてください。

これをしないとメモリ不足でインストールがコケます。

設定したら、以下のコマンドでswap領域が有効になっているかを確認

/etc/fstabにも登録しておきます

2. Dokkuのインストール

インストールは超簡単で以下のコマンドを実行するだけ。

インストールが成功すると初期設定用のサーバが立ち上がるので

http://{サーバーのIP or ホスト名}:2000にアクセスして設定を行います。

dokku-setup

IPアドレスだとアプリに対してサブドメイン形式のURLをアサインできません。

DNSレコードを設定するか、hostsファイル弄るかでホスト名でアクセスできるようにすれば

サブドメイン形式({アプリ名}.{サーバーのホスト名})が利用できます。

公開鍵は、git pushするときのsshの秘密鍵に対応する公開鍵を入力すればOK。

設定はこれだけ!

3. アプリをpushしてみる。

あと、テキトーなアプリをpushすればデプロイできちゃいます。

デプロイすると、http://{アプリケーション名}.{2で指定したサーバのホスト名}のURLでアクセスできます。

 

アプリはdockerで動いているので、デプロイするとdockerのインスタンスが立ち上がっているのを確認できます。

サーバにリモートログインしてdokkuコマンドを叩くと、アプリの作成や削除、DBインスタンスの作成等

dokkuのアプリ設定を色々と弄れます。

4. 管理用コンテナを作成する

このままでもgit pushだけでデプロイできる素晴らしい環境なんですが

DBコンテナ作って既存のアプリに紐付けたり、既存のアプリを削除したりするには

CUIでの操作になるため、ちょっと面倒です。

幸いdokku-altには管理画面用のコンテナがあり、以下のdokkuコマンドでインストールできます。

インストールがうまくいくと、http://dam.{ホスト名}のURLで管理画面UIにアクセスできます。

最初はUserが居ないとエラー画面が表示されるので

サイドメニューのUsersの[Add User]ボタンから、適当にユーザを作成して、ログインを行います。

dokku-manager-first

dokku-adduser

ダッシュボードを開くと、ホストサーバが表示されているので、設定マークをクリックします。

※Deploy New Appは押しても何も起こりませんでした…。

dokku-dashboard

Sync Appsを押すと、既にデプロイされているアプリと管理アプリ自体のコンテナが表示されます。

dokku-hosts

ここでアプリケーションの追加・削除したりできます。

Deploy Git Appで任意のgitリポジトリからデプロイ出来そうな雰囲気ですが

鍵の設定がよくわからず、断念orz

dokku-gitapp

よく見ると、Webhookはこれから対応するような文言が見当たるのでCIとかにも対応しそうな感じ。

 

今回は先ほど作成したnodeアプリのコンテナにMongoDBのコンテナをつなげてみます。

まずは、Add DBからDBコンテナを作成します。

dokku-adddb

初回はDBコンテナのイメージを取得するせいか、Ajaxのタイムアウトエラーが出たんですが

その場合でもちゃんとコンテナが作成されていました。

DB用のコンテナ作成後は対象のアプリのリンクをクリックします。

dokku-dev1

Add DB Linkをクリックして先ほど作成したMongoDBのコンテナとリンクさせます。

dokku-addlink

これでNode.jsのアプリからMongoDBに接続することが可能になりました。

接続情報はサーバ側で以下のコマンドを叩くことで確認することが可能です。

(もしかしたらGUIでの方法もあるのかも)

接続情報をソースにベタ書きするのはアレなので、コンテナ内の環境変数にセットします。

Add Configからキーバリューで値をセットします。

dokku-setdbconfig

こんな感じになります。

dokku-aftersetdbconfig

あとはソースコードの修正をします。

まずはNode.jsからmongo叩くためにパッケージをインストール

こんな感じでindex.jsを修正

あとはgit pushすると新しいアプリが立ち上がって

WebアプリにアクセスするとMongoDBにレコードが差し込まれます。

コマンドラインからMongoDBにアクセスするには

でMongoDBの対象コンテナ(イメージ=ayufan/dokku-alt-mongodb)のIDを確認して

でコンテナのプライベートIPアドレスを取得。

あとはプライベートIPを使って、MongoDBに接続すればOK。

こんな感じでドキュメントを取得できます↓

5. SSLの設定

Dokku-altの管理画面ですが、デフォルトのままだと非SSLで

クレデンシャル晒している状態なのでSSL対応します。

今回は検証用ということで、オレオレ証明書で。

キー、証明書を作ったら dokkuコマンドで、管理用Webアプリに登録します。

keyを登録した時点でコンテナが再起動してSSLが有効になります。

その他注意点

以下のようにdokkuコマンドを使ってアプリ再起動したときには

dockerのコンテナは起動しているものの

フォワーディング(ホストOSのnginxで受け取ってコンテナにフォワーディング)の設定が

されないようで、アクセスしようとすると500エラーが返って来てしまいます。

この場合は、以下のコマンドでリビルドすれば、適切にフォワーディングされるようになりました。

 感想

dokkuはシングルホストなのでスケールしないし、可用性的に問題が有ったりするので

商用には厳しい感じですが、アプリを検証したりプロトタイプ作ったりするような

簡単な用途には有用な気がします。

DigitalOceanの$5/monthのプランでもそれなりに動いていますし。

herokuとかのPaaSに移行するとしてもremoteリポジトリ変えるだけなので楽ちんです。

ただしherokuと違ってスケジューラやone-offなコンテナはありません。

ホスト側自由にいじれるんで、どうしても使いたい場合はcronとかシェルで対応しちゃえばOKですw

Older posts Newer posts

© 2017 freedom-man.com

Theme by Anders NorenUp ↑