TL;DR
OpsWorksでhttpd24 + php56をインストールする。
https://github.com/imura81gt/httpd24_php56_opsworks
ここにあるBerksfileとCustom Jsonで。
chef cookbook書かなくてすんだ話。
こんな壁にぶち当たった
PHP App Server layer と custom json を使って php56を入れようとしても、httpd24が入らなくてエラーが出た。
when 'rhel'
package_name 'httpd'
個人的にchefを使うときの方針?きまり?手抜きルール?として
- Chef DKを使う
- なるべく自分ではcookbook書かない
- 自分で使うだけだから考えなくていいのに、Amazon Linux以外にもUbuntuや他OSでも使えるように書きたくなるから。。。
-
https://supermarket.chef.io 極力ここのを使う
- Berkshelfを使う
-
https://supermarket.chef.io 極力ここのを使う
- 自分で使うだけだから考えなくていいのに、Amazon Linux以外にもUbuntuや他OSでも使えるように書きたくなるから。。。
みたいなことを考えてて、あーcookbook作るのは面倒だなーどうしようかなーと思いながらOpsWorksを引き続き触ってました。
ざっとOpsWorksを使ってみてわかったこと
- custom json で attributeを指定できる
- opsworksが提供しているchef-repoはあまりattribute使ってなくてカスタムしずらい
- Berkshelfが使える
_人人人人人人人人人人人人人人人人人人人人人人人人人人人_
> BerksfileだけgithubにあげればOpsWorksで動かせる予感! <
 ̄YYYYYYYYYYYYYYYYYYYYYYYYYYY ̄
(マニュアルを読んでないだけかもしれないけど。。。)
用意
Berksfileだけ入ったgithubリポジトリ
Berksfile
source "https://api.berkshelf.com"
# apache
cookbook 'apache2', '~> 3.0.1'
# php
cookbook 'php', '~> 1.5.0'
githubリポジトリでDeploy Keyを設定しておく
deploy key(no password) の作成
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/imura81gt/.ssh/id_rsa): ./githubtest
Enter passphrase (empty for no passphrase):(何も文字を入力せずにEnterキー)
Enter same passphrase again:(何も文字を入力せずにEnterキー)
deploy key の設定
該当リポジトリの [Settings] -> [Deploy keys] -> [add deploy key] で
先ほど生成された .pubファイル
の中身を設定。
OpsWorks準備
Stack作成
Add Stack
をクリック
いろいろ入力して Advanced
をクリック
Use custom Chef cookbooks
を Yes
。
Berksfileだけ置いたgitリポジトリの情報を入力。
custom jsonを以下のように入力。
{
"apache": {
"package": "httpd24",
"service_name": "httpd",
"version": "2.4",
"lock_dir": "/var/run/httpd",
"keepalive": "On"
},
"php": {
"packages": [
"php56",
"php56-devel",
"php56-cli",
"php-pear"
]
}
}
なんか一部attribute(lock_dir, keepalive)defautl attributeを取ってこれてなかった謎。
(取れてなくてapachectl configtest でエラーなのにopsworksが正常終了した)
Add Stack
をクリック
Layer作成
Layer type
は Custom
を選択した Add Layer
インスタンス追加
Add Instance
OpsWorksのセミナーでc3.large以上がいいって話だった気がしますが、テストなので t2.microを選んで Add Instance
recipe(apache2::default, php::default)を追加する
edit
をクリック
Setup
のところに apache2::default
と php::default
を入力して Save
インスタンス作成時にpublic ipが付与されるようにする
NAT経由で外に出るか、public ipを付与してあげないと
いざ動かすとずっと booting
のままになる
Recipes
をクリック
Edit
をクリック
Puglic IP address
を Yes
にして Save
インスタンス起動・適用
start
待ち
5分くらい待った。 Hostnameのところをクリック
ログが見れる
確認
(OpsWorksなのにsshしちゃった
Apache
[ec2-user@httpd24-php56-1 ~]$ httpd -v
Server version: Apache/2.4.12 (Amazon)
Server built: Mar 18 2015 20:24:15
[ec2-user@httpd24-php56-1 ~]$
php
[ec2-user@httpd24-php56-1 ~]$ php -v
PHP 5.6.8 (cli) (built: Apr 17 2015 18:04:37)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
[ec2-user@httpd24-php56-1 ~]$
[ec2-user@httpd24-php56-1 ~]$ rpm -qa | grep php
php56-5.6.8-1.111.amzn1.x86_64
php-pear-1.9.5-2.17.amzn1.noarch
php56-xml-5.6.8-1.111.amzn1.x86_64
php56-process-5.6.8-1.111.amzn1.x86_64
php56-jsonc-devel-1.3.6-1.19.amzn1.x86_64
php56-cli-5.6.8-1.111.amzn1.x86_64
php56-common-5.6.8-1.111.amzn1.x86_64
php56-devel-5.6.8-1.111.amzn1.x86_64
php56-jsonc-1.3.6-1.19.amzn1.x86_64
[ec2-user@httpd24-php56-1 ~]$
あとは、、、、
- Virtual Hostの設定をするrecipe
- デプロイユーザ作成
- 必要なディレクトリ作成
のrecipe書いて
- アプリケーションのデプロイ
すればカンタンなphpアプリケーションなら動かせそう。