apiディレクトリにcoreosディレクトリは含めない
hub clone coreos/coreos-vagrant coreos
cd coreos
- 必要なファイルをリネーム
mv user-data.sample user-data
mv config.rb.sample config.rb
- Vagrantfile編集
vim Vagrantfile
- stableを使用
$instance_name_prefix = "任意の名前"
- NFSの設定 ローカルのディレクトリは'..'で。'../app'だと変更が必要
- portの設定 80->8080, 443->3443, 3306->3306, 1025->1025, 1080->1080
vagrant up
vagrant ssh
- mysqlコンテナ起動
docker run --net=host --name mysql -p 3306:3306 -e "ROOT_PW=..." -e "DB_NAME=..." -e "DB_USER=..." -e "DB_PASS=..." -d kobabasu/mysql:0.75
- apacheコンテナ起動
docker run --net=host --name apache -p 80:80 -p 443:443 -v /home/core/share:/var/www/html -d kobabasu/apache:0.24
- smtpコンテナ起動
docker run --net=host --name smtp -p 1025:1025 -p 1080:1080 -d kobabasu/smtp:0.11
docker ps -a
で起動しているか確認exit
- DB作成
mysql -h 0.0.0.0 --port 3306 -u[username] -p[password] -D [dbname] < ../api/sql/install.sql
- table作成
mysql -h 0.0.0.0 --port 3306 -u[username] -p[password] -D [dbname] < ../api/sql/users.create.sql
以下を実行後apiへ移動
git clone git@github.com-{user}:kobabasu/rest-slim.git api
originと整合性が取れない場合があったため、 先にdevelopに切替。initには-dオプションを付けない
git checkout develop
git flow init
npm install
npm run build
composer install --no-dev
再びサーバへ
cp .htaccess.sample .htaccess
cp .logs/htaccess.sample logs/.htaccess
cp .reports/htaccess.sample reports/.htaccess
- HTTPSが使える場合はHTTPS正規化の設定を有効に
- BASIC認証をかける場合にはBASIC認証設定を有効にしパスを変更
- サーバがPHP-CGI版の場合にはPHP-CGI用のBASIC認証設定を有効に
変更する場合のみ以下を実行
もし、stageに追加された場合はgit checkout .htpasswd
で
元に戻す
htpasswd -m .htpasswd api
- パスワードを二回入力
- production.php.sampleをproduction.phpにとしてコピー
- config内のdevelopment, productionをそれぞれ設定
- config内,phpunit.xmlのid,pwを設定
phpunit
- すべてテストをパスすればOK
- testdox形式で出力する場合は
phpunit --testdox
- http://localhost:8080/api/docs/reports/にアクセス
- レポートがすべて100%であることを確認
- まずphpunitを実行
- http://localhsot:1080/にアクセス
- メールが届いているか確認
- Plain Textタブではfrom, toはメールアドレスが表示 To, Subjectは文字化けせず表示
- Sourceタブでは文字化けが散見していてOK。 Content-Typeがtext/plain。charsetがiso-2022-jp
- ダウンロードしダブルクリックでメーラが開く
- 問題なく表示されていればOK
phpdoc
を実行- エラーがでず完了するか確認
- http://localhost:8080/api/docs/api/にアクセス
- 問題なく表示されればOK
npm run test
- すべてテストをパスすればOK
- vagrantでmysqlコンテナを起動
vim sql/db.api.sql
- let g:dbext...をヤンク
- :0
- DBSetOptionをヤンク
- :0
- sqlを実行し結果が表示されればOK
chmod 604 config/\*
chmod 604 sql/\*
chmod 604 .htaccess
chmod 604 .htpasswd
chmod 604 phpunit.xml
- http://localhost:8080/api/でBASIC認証が求められなくhelloと表示されるか確認
- http://localhost:8080/api/users/taroでBASIC認証を入力し表示されるか確認
以下は設定箇所を忘れそうなので確認する
- 一度composer.jsonのautoloadを確認しておく
- .htpasswdとconfig内のBASIC_AUTHが一致しているか確認
- 一度src/settings.phpのauthのpathでどこに認証がかかってるか確認
CPIでの例
ssh example.com
mkdir -p repo/api; cd $_
git init --bare --share=true
exit
(一度リモートを出る)
ローカルで作業
git remote add production ssh://example.com/usr/home/aa999v5xxx/repo/api
- 余計な後処理が面倒なためmaster, developのみでcommit済みであるか確認
git push production --all
再びサーバへ
ssh example.com
cd html/
git clone /usr/home/aa999x5xxx/repo/api api
- viがなぜか調子が悪いためvimに変更
git config core.editor vim
exit
.gitignoreで除外されているファイルをアップする。 再度ローカルへ
lftp example.com
cd html/api
mkdir vendor node_modules
cd config; lcd config
- put production.php
cd vendor; lcd vendor
mirror -R
cd node_modules; lcd node_modules
mirror -R
exit
再びサーバへ
- 本番環境用の.htaccessを作成
cp .htaccess.sample .htaccess
cp .logs/htaccess.sample logs/.htaccess
cp .reports/htaccess.sample reports/.htaccess
- HTTPSが使える場合はHTTPS正規化の設定を有効に
- BASIC認証をかける場合にはBASIC認証設定を有効にしパスを変更
- サーバがPHP-CGI版の場合にはPHP-CGI用のBASIC認証設定を有効に
- サーバがCPIで会った場合にはCPI特有の記述を有効に
htpasswd -m .htpasswd api
- パスワードを二回入力
- config/production.phpのBASIC認証の設定を変更
- config内のdevelopment, productionをそれぞれ設定
chmod 604 config/\*
chmod 604 sql/\*
chmod 604 .htaccess
chmod 604 .htpasswd
chmod 604 phpunit.xml
cd repo/api/hooks
touch post-receive
- 以下を記述
cd /usr/home/aa120v5xup/html/api
git --git-dir=.git pull
chmod +x post-receive
httpsでないとエラーがでる
- https://example.com/api/でBASIC認証が求められなくhelloと表示されるか確認
- https://example.com/api/users/taroでBASIC認証を入力し表示されるか確認
- INDEXを表示
curl -i -X GET --user api:api012 -H 'Content-Type:application/json;charset=utf-8' http://localhost:8080/api/users/
- レコードを表示
curl -i -X GET --user api:api012 -H 'Content-Type:application/json;charset=utf-8' http://localhost:8080/api/users/{存在するid}
- レコードをinsert
curl -i -X POST --user api:api012 -H 'Content-Type:application/json;charset=utf-8' -d '{"name":"taro", "email":"taro@example.com"}' http://localhost:8080/api/users/
- レコードを変更
curl -i -X PUT --user api:api012 -H 'Content-Type:application/json;charset=utf-8' -d '{name":"curl", "email":"curl@example.com"}' http://localhost:8080/api/user/{存在するid}
- レコードを削除
curl -i -X DELETE --user api:api012 -H 'Content-Type:application/json;charset=utf-8' http://localhost:8080/api/users/{存在するid}
name | desc |
---|---|
.babelrc | es2015のpresetを設定 |
.gitattributes | marge oursが必要であれば変更 |
.gitignore | cache,logs,reportsを除外 |
(.htaccess) | sampleをコピーして用意 |
.htaccess.sample | CPIのphpバージョン指定設定サンプル含む |
.htpasswd | .htaccessにより設定するため、sampleではない |
README.md | このファイル |
bootstrap.php | Slimの設定 |
composer.json | PSR-4のautoloadの設定があるので注意 |
composer.lock | composerのlockファイル |
index.php | server environmentの設定 |
note.md | メモ |
package.json | es6変換,frisbyを読込。scriptsは要確認 |
php.ini | CPIのバージョン指定用php.ini |
phpdoc.xml | lib,routes,testsに限定。出力先はdocs/api |
phpunit.xml | lib,routesに限定。テスト用DBの設定含む |
name | desc |
---|---|
/.git | gitディレクトリ |
/cache | twig専用cache |
/config | 設定はここにまとめる。要パーミッション |
/docs | テストのレポートとphpdoc |
/lib | 汎用コード |
/logs | Slim,mailのログとcoverage |
twigによるmailテンプレート | |
/node_modules | npmディレクトリ |
/reports | frisbyのjunitreport |
/routes | Slimのroutesをまとめる |
/spec | frisbyのテストコード |
/sql | 本番DB,テストDBの作成。usersテーブルの作成 |
/src | Slimの汎用コード |
/tests | phpunitのテストコード |
/vendor | composerディレクトリ |
phpの定数を定義。DB, MAILなど。
name | desc |
---|---|
development.php | 開発環境用 |
(production.php) | sampleをコピーし作成 |
production.php.sample | 本番環境用 |
テストのレポートとphpdoc
name | desc |
---|---|
api | phpdocによる出力 |
reports | phpunitによるcoverage reporter |
twigによるmailテンプレート
name | desc |
---|---|
default.twig | twigによるmailテンプレートsample。未使用 |
defaultTest.twig | tests/lib/SwiftMailer/MailerTest.phpで使用 |
frisbyのテストコード
name | desc |
---|---|
dist | 未使用 |
js | frisbyはこの中のファイルをすべて読み込む |
src | この中のファイルを編集しbabelで変換 |
sqlに関するディレクトリ パーミッションでアクセス制限をかける
name | desc |
---|---|
db.api.sql | dbextで利用するsql編集ファイル |
install.sql | DBの作成。初期設定時のみ使用 |
users.create.sql | usersテーブルの作成。初期設定時のみ使用 |
Slim3の各種設定
name | desc |
---|---|
app.php | アプリケーション全体の設定。Content-Typeなど |
dependencies.php | コンテナ関連 |
middleware.php | slim-basic-authなど |
settings.php | 定数やloggerの設定など |
phpunitのテストコード
name | desc |
---|---|
/fixtures | フィクスチャ |
/lib | libが対象のテストコード |
/routes | routesが対象のテストコード |
/bootstrap.php | テスト専用。phpunit.xmlで利用 |
basic authのmiddlewareの関係でhttp接続では Slim Application Errorが発生。https接続する。
dockerを使用している場合、 .htaccessのパスは/usr/homeではなく/var/www/htmlとなるため注意
- `docker inspect --format {{.State.Pid}} apache
sudo nsenter --target=上記で出てきたid --mount --uts --ipc --net --pid
- 上記でコンテナにログインできるので/var/logなどに移動して確認