├── .gitignore ├── README.md ├── docker-compose.yml ├── LICENSE ├── install.sh └── base.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ISUCON用環境セットアップスクリプト 2 | 3 | Docker を用いて本番の環境によらず 1 行のスクリプトで基本的な環境を構築します. 4 | 5 | ## mysql 6 | 7 | ```sql 8 | GRANT ALL PRIVILEGES ON *.* TO ninetan@"%" IDENTIFIED BY 'ninetan' WITH GRANT OPTION; 9 | FLUSH PRIVILEGES; 10 | ``` 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | # phpMyAdmin をデフォルトで起動する 4 | phpmyadmin: 5 | image: phpmyadmin/phpmyadmin:4.6.3-3 6 | ports: 7 | - "8000:80" 8 | environment: 9 | # MySQL サーバのアドレス(ホストのアドレスを指定する) 10 | PMA_HOST: 172.17.0.1 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Kentaro IMAJO 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # ninecontroller を自動起動する設定にします 3 | # 4 | # Usage: 5 | # time curl -L 'https://git.io/vX6Rc' | bash 6 | 7 | set -e -u 8 | 9 | ################################################################################ 10 | # 1. 基本環境のセットアップ 11 | ################################################################################ 12 | 13 | curl "${TEMPLATE_REPOSITORY:-"https://raw.githubusercontent.com/imos/isucon-template/${TEMPLATE_BRANCH:-"master"}/base.sh"}" | bash 14 | # エディタのカラーリング調整用 → " 15 | 16 | ################################################################################ 17 | # 2. イメージのダウンロード 18 | ################################################################################ 19 | 20 | curl -L "https://storage.googleapis.com/imoz-docker-tokyo/ninecontroller/${IMAGE_BRANCH:-"master"}.tar.gz" | gzip -d | sudo docker load 21 | 22 | ################################################################################ 23 | # 3. ninecontroller の自動起動 24 | ################################################################################ 25 | 26 | sudo mkdir -p '/usr/local/ninecontroller' 27 | if [ ! -f /usr/local/ninecontroller/Dockerfile ]; then 28 | cat <<'EOM' | sudo tee '/usr/local/ninecontroller/Dockerfile' 29 | FROM imos/ninecontroller 30 | MAINTAINER imos 31 | 32 | RUN touch /.foo 33 | 34 | CMD /usr/bin/supervisord --nodaemon 35 | EOM 36 | fi 37 | 38 | cat <<'EOM' | sudo tee /etc/init.d/ninecontroller 39 | #!/bin/bash 40 | # ninecontroller用init.dスクリプト 41 | # ※ Dockerより後に起動する必要があるので /etc/init.d/docker の優先度を確認すること 42 | # 43 | # chkconfig: 2345 96 04 44 | # description: Daemon for docker.com 45 | 46 | start() { 47 | sudo docker build --tag local/ninecontroller /usr/local/ninecontroller 48 | sudo docker rm -f ninecontroller || true 49 | sudo docker run --privileged \ 50 | --volume=/var/run/docker.sock:/var/run/docker.sock \ 51 | --volume=/home/ninetan:/home/ninetan \ 52 | --name=ninecontroller \ 53 | --restart=always \ 54 | --net=host \ 55 | --pid=host \ 56 | --detach \ 57 | local/ninecontroller 58 | } 59 | 60 | stop() { 61 | sudo docker rm -f ninecontroller || true 62 | } 63 | 64 | case "$1" in 65 | start|stop) $1 ;; 66 | status) sudo docker ps --filter=name=ninecontroller ;; 67 | restart) start ;; 68 | *) echo "Usage: $0 {start|stop|restart|status}"; exit 2 ;; 69 | esac 70 | 71 | exit $? 72 | EOM 73 | sudo chmod +x /etc/init.d/ninecontroller 74 | if which chkconfig; then 75 | sudo chkconfig --add ninecontroller 76 | else 77 | sudo update-rc.d ninecontroller defaults 78 | fi 79 | sudo service ninecontroller restart 80 | -------------------------------------------------------------------------------- /base.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Usage: 3 | # curl 'https://raw.githubusercontent.com/imos/isucon-template/master/base.sh' | bash 4 | 5 | set -e -u 6 | 7 | ################################################################################ 8 | # 1. Docker のインストール 9 | ################################################################################ 10 | if ! which docker; then 11 | curl -sSL https://get.docker.com/ | sudo sh 12 | fi 13 | sudo service docker restart 14 | 15 | ################################################################################ 16 | # 2. ユーザ ninetan (10001) の準備 17 | ################################################################################ 18 | 19 | # ユーザが存在しなければ追加する 20 | if ! id ninetan; then 21 | sudo useradd --home-dir=/home/ninetan --create-home --uid=10001 \ 22 | --user-group --shell=/bin/bash ninetan 23 | fi 24 | 25 | # ninetan 権限の下で,id_rsa の生成を行い,authorized_keys に追加する 26 | cat <<'EOM' | sudo -u ninetan bash 27 | set -e -u 28 | cd /home/ninetan 29 | mkdir -p .ssh 30 | if [ ! -f ".ssh/id_rsa" ]; then 31 | ssh-keygen -t 'rsa' -N '' -f '.ssh/id_rsa' 32 | fi 33 | echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrHaL3kdZ2RekCdpkie3fsiv2yVyyWRBOO6Q68Kr+tFStRqtF8q1/UoeteUIOxzwKaAmHoaM9PkItdMBki0BLQDimCZwjjbkosritGDMTJXGd21O72mWaTv+nfq+/ishCdt6gdBYXTejvpPJhq8ZMYhTYJZkWqlGO2CKrWcnHHu1HhnValeqNWS5nh8BULOTMKaixjdzXIkWgm8HyiewvqjZXC3tZlfFDErRpiS7SYfJHd4PujjFCNyiVxZ5yOvEGMXQa1UFxQlfX8H+lAr6qObK50osAdUbvjjbhIhMvZT2higSNNtv/yiaLRnLbbOHomObvqxob5TUVdCkazXX3N imos@Moltres' > .ssh/imos.pub 34 | cat .ssh/*.pub > .ssh/authorized_keys 35 | chmod 600 .ssh/authorized_keys 36 | 37 | echo 'Host *' > .ssh/config 38 | echo ' UserKnownHostsFile /dev/null' >> .ssh/config 39 | echo ' StrictHostKeyChecking no' >> .ssh/config 40 | EOM 41 | # ninetan が sudo を実行できるようにする 42 | if ! sudo grep ninetan /etc/sudoers; then 43 | echo 'ninetan ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers 44 | fi 45 | 46 | ################################################################################ 47 | # 3. sysctl.conf の設定 48 | ################################################################################ 49 | 50 | # /etc/sysctl.conf.orig として元のファイルをバックアップしておく. 51 | # ただし,二度目の実行はバックアップを行わず,元のファイルをそのまま残す. 52 | if [ ! -f /etc/sysctl.conf.orig -a -f /etc/sysctl.conf ]; then 53 | sudo cp /etc/sysctl.conf /etc/sysctl.conf.orig 54 | fi 55 | 56 | # 主にネットワークを最適化するための設定 57 | cat <<'EOM' | sudo tee /etc/sysctl.conf 58 | net.core.netdev_max_backlog=32768 59 | net.core.rmem_max = 16777216 60 | net.core.somaxconn=32768 61 | net.core.wmem_max = 16777216 62 | net.ipv4.ip_local_port_range= 10000 65535 63 | net.ipv4.tcp_fin_timeout=10 64 | net.ipv4.tcp_max_syn_backlog=32768 65 | net.ipv4.tcp_rmem = 4096 349520 16777216 66 | net.ipv4.tcp_timestamps = 0 67 | net.ipv4.tcp_tw_recycle=1 68 | net.ipv4.tcp_tw_reuse=1 69 | net.ipv4.tcp_wmem = 4096 65536 16777216 70 | net.ipv4.tcp_rfc1337=1 71 | net.ipv4.tcp_keepalive_probes=5 72 | net.ipv4.tcp_slow_start_after_idle=0 73 | net.core.somaxconn=65535 74 | EOM 75 | # 再起動後も有効になるように設定 76 | sudo sysctl -p 77 | --------------------------------------------------------------------------------