laravel/envoyでデプロイしてみる
PHPで作られているシステムをデプロイをするために、Envoyを使ってみました。
CapistranoやRocketeerとかと似たような立ち位置のものですね。
ただこれらよりはずっとシンプルです。
簡単な機能しかないですが、シンプルなものであれば全然問題ないと思う。
Envoyはこれ↓ github.com
これって、Laravelでしか使えないの?
Laravelってついてるけど、Laravelに限らずどこで使えます。
自分はCakePHP3と組み合わせて使ってます。
Envoyインストール
composer require "laravel/envoy=~1.0"
Envoyファイルの作成
# 127.0.0.1がデプロイ先になります。 php vendor/bin/envoy init 127.0.0.1
上記コマンドを実行すると Envoy.blade.php が作成されます。
こんなやつ
// Envoy.blade.php @servers(['web' => '127.0.0.1']) @task('deploy') cd /var/www/html git pull origin master @endtask
taskからendtaskの間がデプロイ先で実行するスクリプトになります。
複数サーバーにデプロイするような場合は、 @servers(['web1' => '127.0.0.1', 'web2' => '127.0.0.1']) のように単純に複数並べます。
実行してみる
deploy が実行するタスク名になります。
以下を実行すると、リモートサーバーにログインして、 /var/www/html に移動して、 git pull をする
というものになります。簡単!
php vendor/bin/envoy run deploy
story
storyは、複数のタスクをまとめて実行することができる機能です。
storyに、実行したいタスク名を羅列するだけです。
@servers(['web' => '192.168.1.1'])
@story('deploy')
git
composer
@endstory
@task('git')
git pull origin master
@endtask
@task('composer')
composer install
@endtask
setup
デプロイ処理をするときに必ず初期化したいような処理を書いておくのが、 setup です。
setupは PHPで記述します
タスクでPHPの変数を使いたい場合は、{{}} で変数を囲みます。
@setup
$date = date('Y/m/d');
@endsetup
@task('deploy'])
echo {{$date}}
@endtask
特定のサーバーに限定してタスクを実行したい
特定のサーバーに限定する場合は、タスクのパラメーターとして、 on にサーバー名を追加します。
@servers(['web1' => '192.168.1.1', 'web2' => '192.168.1.2'])
@task('deploy', ['on' => ['web1']])
cd site
git pull origin master
@endtask
並列処理
基本的に処理は、1サーバーごとに実行されます。
たた、同時に実行して問題がない場合は並列でデプロイしたほうがいいかもしれません。
並列処理も簡単で、並列に処理したいタスクのパラメーターとして、 parallel をtrueに設定するだけです
@servers(['web1' => '192.168.1.1', 'web2' => '192.168.1.2'])
@task('deploy', ['parallel' => true])
cd site
git pull origin master
@endtask
ifやforを使いたい
使いどころがいまいち思いついてないですが、ループや分岐も使えます。
マニュアルにも載ってないので、必要ないかも?
@servers(['web1' => '192.168.1.1'])
@setup
$list = ['one', 'two', 'three'];
@endsetup
@task('deploy')
@foreach ($list as $user)
@if ($user == 'aaa')
echo {{$user}}
@endif
@endforeach
@endtask
終了処理
これもマニュアルに載ってない。。。
タスクごと、デプロイ自体の終了処理も書くことが可能です。
// タスクごとの終了処理
@after
echo "タスク完了";
@endafter
// デプロイ自体の終了処理
@finished
echo "デプロイ終了";
@endfinished
Slack通知
デプロイとは関係ないですが、Slack、Hipchatへの通知機能を持ってます。
setupやafter、finishedで使うといい感じかも
@servers(['web1' => '192.168.1.1'])
@finished
@slack('Incoming WebHooks URL', '通知先チャンネル', 'デプロイ終わったよー')
@endfinished
DockerでAmazonLinuxを動かす
AmazonLinuxがdocker上で簡単に動かせるようになったので試してみました。
環境
- ホストOS・・・CentOS 7
- Docker・・・1.12.3
※CentOS 6上のDocker 1.7で試したら、 image amazonlinux:latest not found と出て実行できませんでした。
AWS cliのインストール
インストール
yum install python-pip pip install pip --upgrade pip install awscli
aws configure # 以下は環境に合わせて AWS Access Key ID [None]: Access Key AWS Secret Access Key [None]: Secret Key Default region name [None]: ap-northeast-1 Default output format [None]: json
Amazon Linuxイメージ取得
aws ecr get-login --region ap-northeast-1 --registry-ids 137112412989
# ecr get-loginを実行すると以下のようなコマンドが出力されるので、そのまま実行する
docker login -u AWS -p {パスワード} -e none https://137112412989.dkr.ecr.ap-northeast-1.amazonaws.com
# Docker Imageを取得
docker pull 137112412989.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:latest
Amazon Linuxの起動
ここまで来たら、通常通りコンテナを起動するだけです。
docker run -it 137112412989.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux:latest /bin/bash
AmazonLinux起動してみるとわかるのですが、本当に何も入ってないです。
image名の変更
特に必要ないですがimage名を変更したほうが楽かも
docker tag {イメージID} amazonlinux
docker rmi 137112412989.dkr.ecr.ap-northeast-1.amazonaws.com/amazonlinux
参考
CakePHP3のメンテナンス切り替え用プラグインを作った
ホームページやシステムをすでにリリースしていて、DB等メンテナンスする場合にメンテナンス画面を表示するあれです。
どうやってみなさん画面を切り替えているのでしょうか?
.htaccessが多いのでしょうか。
今回は、メンテナンスを簡単に表示するCakePHP3のプラグインを作成しました。
インストール
composer require fusic/maintenance
使い方
使い方は簡単なので README をご確認ください。
ざっくりは以下になります。
src/Application.phpにMaintenanceMiddlewareを追加するsrc/Template/Error/maintenance.ctpにメンテナンス用ctpを作成する- メンテナンス画面を表示するタイミングで
tmp/maintenanceの空ファイルを作成する
最後に
今回初めて、 Middleware を使ったのですが、今後認証系もMiddlewareを使われるようになったりするんですかねー
使いどころをまだ思いついてない。。。
LaravelのMiddlewareを参考にしてみよう。
Serverless Framework v1 を使ってみた
Lambdaでの開発を高速化、便利にするフレームワーク、 Serverless Framework がver1.0が出たみたいなのでやっと触ってみました。
1.0が出たばかりで古い情報が多かったので自分の備忘録もかねて残しておきます。
CentOS6上に構築してます。
インストール
nodeのインストール
nodeのv4以上が必要となります。
バージョンが低い場合は入れなおしましょう。
node -v > v4.6.1
入れなおす場合
# インストールされているnodeを削除する yum erase nodejs # リポジトリの追加 rpm -Uvh https://rpm.nodesource.com//pub_4.x/el/6/x86_64/nodesource-release-el6-1.noarch.rpm # nodeのインストール yum install nodejs # バージョン確認 node -v > v4.6.1
Serverless Frameworkのインストール
npm install serverless -g serverless -v > 1.0.3
AWS IAMの作成
AdministratorAccess権限を持ったIAMを作成します。
デプロイ時に使用するユーザーとなります。
Serverless Frameworkテンプレートの作成
適当なディレクトリで、以下のコマンドを実行して初期構築を行います。
テンプレートファイルが作成されます。
mkdir hoge serverless create --template aws-nodejs --name hoge
template、nameには自由に設定してください。
templateは以下の好きなものを選んで問題ありません。
serverless.ymlの追記・修正
serverless.ymlには様々な設定が記述されています。
その中から、 region 、 accessKeyId 、 secretAccessKey を追記・修正します。
provider:
region: ap-northeast-1
credentials:
accessKeyId: {{AWS IAMアクセスキー}}
secretAccessKey: {{AWS IAMシークレットキー}}
regionは使用するリージョンを設定してください。
デフォルトだと、バージニアにデプロイされます。
credentialsについては、他にもaws-cliのcredentialsを使ったりできるみたいなのですが、手っ取り早く動かすために serverless.yml に追記してます。
デプロイ
以下、コマンドを実行することで Lambda へデプロイすることが可能です。
serverless deploy -v
実行結果として、endpointが表示されます。
endpointへブラウザからアクセスして messageに Go Serverless v1.0! Your function executed successfully! が表示されれば成功です。
次回へ続く
今さらすっごい便利なtigをインストールした
tigはGitをCUIで扱う場合に便利にしてくれるツールです。
git log や git add 等がカラフルで見やすく、インタラクティブに操作できるようになります。
tigの存在は知ってたのですが、ずっーーと見て見ぬ振りをしていたので使ってみました。
インストール
rpmforgeを追加すればyumでインストールすることが可能です。
MacであればHomebrewでインストール可能みたいです。
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm vim /etc/yum.repos.d/rpmforge.repo - enabled = 1 + enabled = 0 yum --enablerepo=rpmforge install tig
ただし、yumでインストール出来るのは結構古いので、自分でmakeしてもいいかも
http://jonas.nitro.dk/tig/manual.html
使い方
git clone した場所で、 tig と入力するだけです。
tig を実行すると git log した状態と同じになります。
tigを実行した画面

この状態で上下で対象のcommitを選び、エンターでdiffを見ることが出来ます。
ステータスを確認する(git status)
現在のステータスを確認するには tig status を実行します。
※tigの初期画面から S でも移動可能

基本的にはgit statusと変わりませんが、この画面上で git add , git diff , git reset , git commit を完結することが出来ます。
git add、git reset
ファイルを選択した状態で u を押す
git diff
ファイルを選択した状態で Enter を押す
git checkout --
ファイルを選択した状態で ! を押す
「Are you sure you want to revert changes?」と聞かれるので、y を押すことで変更を戻すことが可能です。
git commit
addをした状態で、C を押す
その他
~/.tigrc を修正することで細かな設定を変更することが可能です。
http://qiita.com/yoshikazusawa/items/d99e8b5d6f6a45aa6e2e
http://jonas.nitro.dk/tig/tigrc.5.html