LoginSignup
1
0

More than 1 year has passed since last update.

ISUCONの過去問題用の環境を構築する(11本選、PHP)

Last updated at Posted at 2023-03-28

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にアクセスするとフロントを確認することができます。

image.png

ログインは 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を取得するにはログインが必要なので、ブラウザを使ってログインし、そのリクエストを利用する。

Screenshot 2023-04-11 at 12.39.43.png

$ curl 'http://localhost:8080/api/announcements' > announcements.json
  1. https://github.com/isucon/isucon11-final/blob/main/docs/manual.md#isucholar-%E3%81%B8%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0