ISUCON過去問題用の環境構築手順です。
クローン
git clone ssh://git@github.com/isucon/isucon11-final.git
実際には自分の環境では ghq を使っているため下記です。
ghq get ssh://git@github.com/isucon/isucon11-final.git
Docker環境の起動
cd dev
docker-compose -f docker-compose-php.yaml up -d
4つのDockerコンテナが起動します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0503a90d2 dev_frontend "/docker-entrypoint.…" 2 months ago Up 3 minutes 0.0.0.0:8080->80/tcp dev_frontend_1
ed9d3f52a dev_backend "dockerize -timeout …" 2 months ago Up 3 minutes 0.0.0.0:7000->7000/tcp dev_backend_1
97f97b874 mysql "docker-entrypoint.s…" 2 months ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp dev_mysql_1
585b6a05f adminer:latest "entrypoint.sh php -…" 2 months ago Up 3 minutes 0.0.0.0:7001->8080/tcp dev_adminer_1
動作確認
ローカルの8080にアクセスするとフロントを確認することができます。
ログインは S00000 : isucon
といった組み合わせでログインできます。1
学内コード | パスワード | |
---|---|---|
学生 | S00000 | isucon |
教員 | T00000 | isucon |
学生 | S99999 | isucon |
教員 | T99999 | isucon |
ベンチ
ホスト側からベンチマークを実行する場合、Goの環境を整えておきます。
cd benchmark/bin
./benchmarker
中略
15:11:20.416815 raw score (1663) breakdown:
15:11:20.416823 SubmitAssignment : 300 回 (900 点)
15:11:20.416827 GetAnnouncementList : 763 回 (763 点)
15:11:20.416832 tag: SubmitAssignment : 300
15:11:20.416836 tag: GetAnnouncementList : 763
15:11:20.416841 tag: !1.SkipRegisterNoCourseAvailable : 0
15:11:20.416844 tag: !2.SkipAddStudentPoolEmpty : 0
15:11:20.416848 tag: !3.ValidateTimeout : 0
Dockerコンテナに入る
docker exec -it dev_backend /bin/bash
docker composeでMySQLの設定をローカルに持ってくる
docker composeでMySQLの設定をローカルに持ってくる
docker-compose-php.yam
mysql:
(...略....)
volumes:
- mysql_data:/var/lib/mysql
- ./mysql_conf/my.cnf:/etc/my.cnf
- ./mysql_log:/var/log/
Dockerコンテナの再起動
docker-compose -f docker-compose-php.yaml down && docker-compose -f docker-compose-php.yaml up -d
docker composeのNGINXの設定をローカルに持ってくる
NGINXはフロントのコンテナで動いている。
その基本的な設定は dev/nginx
ディレクトリに入っている。
ディレクトリごと設定をホスト側に持って来たい場合には下記のようにする。
$ mkdir frontend_conf
$ docker cp dev_frontend_1:/etc/nginx ./nginx
docker-compose-php.yam
frontend:
(...略....)
volumes:
- ./frontend_conf/nginx:/etc/nginx
nginxの設定を書き換えて文字列を返す
あるURLに対して特定の文字列を返すようにする。
dev/nginx/default.conf
location /api-dummy {
return 200 "Hello world";
}
$ curl 'http://localhost:8080/api-dummy'
Hello World
announcementsをキャッシュする
announcementsを取得するにはログインが必要なので、ブラウザを使ってログインし、そのリクエストを利用する。
$ curl 'http://localhost:8080/api/announcements' > announcements.json