es6を利用するためbabelが必要
git submodule add git@github.com-kobabasu:kobabasu/rest.git api
git submodule update
- 必要があればdevelopブランチを使う
git checkout develop
yarn start
yarn install
- githubとcircleciとslackを連携させる
- .cicrleci/config.ymlをプロジェクトルートにコピー
- config.ymlの
working_directory
を編集 - プロジェクトのREADME.mdのbadgeを編集
- git push してみて成功するか確認
もしcircleciのコンテナになにか追加する必要があれば、 Dockerfileを編集しbuildしdocker hubにpush
hub clone cores/cores-vagrant coreos
- config.rbをコピー
- config.rbを編集
shared_folder
でレポジトリのルートを共有docker build -t kobabasu/alpine-php:0.xx
/home/core/share`docker login
docker push kobabasu/alpine-php:0.xx
- docker-composeをインストール
docker-compose up
docker-compose start
docker exec chrome yarn run test
で確認- 問題なければ
.circleci/config.yml
のimagesのバージョンを変更 - git pushで確認
hub clone coreos/coreos-vagrant coreos
cd coreos
- config.rb.sampleをリネーム
mv config.rb.sample config.rb
- config.rbを編集
$update_channel='stable'
$instance_name_prefix="xxxxxx"
$shared_folders = {'../html/' => '/home/core/share'}
$forwarded_ports = {80 => 8080, 3306 => 3306, 3307 => 3307, 443 => 3443, 1025 => 1025, 1080 => 1080}
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 --name mysql -p 3307:3306 -e MYSQL_DATABASE=... -e MYSQL_USER=... -e MYSQL_PASSWORD=... -e MYSQL_ROOT_PASSWORD=... -d kobabasu/alpine-mysql:0.08
- apacheコンテナ起動
docker run --net=host --name apache -p 80:80 -p 443:443 -v /home/core/share:/var/www/html -d kobabasu/apache:0.31
- smtpコンテナ起動
docker run --net=host --name smtp -p 1025:1025 -p 1080:1080 -d kobabasu/smtp:0.11
docker ps -a
で起動しているか確認exit
- DB, ユーザ作成 rootユーザで行う
mysql -h 0.0.0.0 --port 3307 -uroot -p[password] -D [dbname] < ../api/sql/install.sql
- table作成
mysql -h 0.0.0.0 --port 3307 -u[username] -p[password] -D [dbname] < ../api/sql/projects.create.sql
mysql -h 0.0.0.0 --port 3307 -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
yarn install
(必ずapi/以下にインストールする)
composer install --no-dev
(必ずapi/以下にインストールする)
cp .htaccess.sample .htaccess
(api/以下にもインストール必要。親階層に同じものがあってもよい)cp logs/htaccess.sample logs/.htaccess
cp reports/htaccess.sample reports/.htaccess
cp coverage/htaccess.sample coverage/.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を設定
yarn run test
(phpunitのみは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
yarn run test
(frisbyのみはyarn run jest)- すべてテストをパスすれば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の設定 |
package.json | es6変換,frisbyを読込。scriptsは要確認 |
php.ini | CPIのバージョン指定用php.ini |
phpunit.xml | lib,routesに限定。テスト用DBの設定含む |
name | desc |
---|---|
/test | frisbyのテストコード |
/.git | gitディレクトリ |
/cache | twig専用cache |
/config | 設定はここにまとめる。要パーミッション |
/lib | 汎用コード |
/logs | Slim,mailのログとcoverage |
twigによるmailテンプレート | |
/node_modules | npmディレクトリ |
/reports | frisbyのjunitreport |
/routes | Slimのroutesをまとめる |
/sql | 本番DB,テストDBの作成。usersテーブルの作成 |
/src | Slimの汎用コード |
/tests | phpunitのテストコード |
/vendor | composerディレクトリ |
phpの定数を定義。DB, MAILなど。
name | desc |
---|---|
development.php | 開発環境用 |
(production.php) | sampleをコピーし作成 |
production.php.sample | 本番環境用 |
twigによるmailテンプレート
name | desc |
---|---|
default.twig | twigによるmailテンプレートsample。未使用 |
defaultTest.twig | tests/lib/SwiftMailer/MailerTest.phpで使用 |
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で利用 |
name | desc |
---|---|
@babel/core | mochaのes6用 circleci用にglobalにも必要 |
@babel/preset-env | .babelrcでrequireしてる circleci用にglobalにも必要 |
frisby | APIのテスト用 |
jest | frisbyが使う |
basic authのmiddlewareの関係でhttp接続では Slim Application Errorが発生。https接続する。
dockerを使用している場合、 .htaccessのパスは/usr/homeではなく/var/www/htmlとなるため注意
docker exec -it apache sh
- 上記でコンテナにログインできるので/var/log/apache2などに移動して確認
- .htaccessは必ずapi以下にも必要。 内容は変更する必要がないはず。 一つ上の階層にも同じものがあってよい
- error.logを覗いて、file not foundやクラスのFatal Errorも同様
- composerのインストールは必ずapi以下で行う 一つ上の階層にインストールするとエラーとなる
- covegareの出力ができない。xdebug?
- Dbunit終了によるlib/Db内のテストを再考
- circleciの追加