Create a gist now

Instantly share code, notes, and snippets.

ピクシブで新卒エンジニア全員向けに「インフラ研修」として次の内容のハンズオン講義を行いました。ちょうど2時間で終わる内容になっています。新卒達にはこの直後に社内ISUCONに挑んでもらいました。

AWSにインスタンスを立ててみよう

  • 質問:AWSにEC2インスタンスを立てたことがある人?
    • AWSのアカウント持ってない人はこの機会に取得してみよう
    • クレカがない人は言ってください
  • AWSにログインしてみよう https://portal.aws.amazon.com/
    • 東京リージョンに変更してみよう
  • Debian Jessieのインスタンスを起動してみよう
    • Rubyビルド済みインスタンスを用意しました
      • サイドバーのAMIから、検索欄に ami-53021a3d と書いて「パブリックイメージ」を選択
    • インスタンスタイプはt2.microぐらいで十分(t2.nanoでも良い)
    • セキュリティグループの設定で自分のIPアドレスからのみすべてのTCP接続を許可してみよう
  • adminユーザーでログインしてみよう チートシート

ここまで20分

サーバーの状態を見てみよう

  • ps aux を打ってみよう
    • 質問:プロセスは何個ぐらい起動してる?
      • 自分のMacでも打ってみて数えてみよう
  • top を打ってみよう
    • 質問:このサーバーのメモリはどのぐらい?そのうちどのぐらい使われてる?
  • df -h を打ってみよう
    • 質問:このサーバーのディスク容量はどのぐらい?そのうちどのぐらい使われてる?
  • 質問:このサーバーに入ってるテキストエディタは何がある?
    • vimとかemacsとか入れたければaptで入れてみよう
      • どれも得意じゃなければnanoを使おう

ここまで30分

PHPでウェブアプリケーションを起動してみよう

  • sudo apt install php5 apache2 してみよう
  • ps aux を打ってみよう
    • 質問:Apacheのプロセスはいくつ起動してる?
  • less /etc/apache2/sites-enabled/000-default.conf してみよう
    • 質問:どこにphpファイルを置けばブラウザから見られる?
  • <?php var_dump($_SERVER); と書いたindex.phpというファイルを置いてブラウザでアクセスしてみよう
    • 質問:SERVER_SOFTWAREの値は?

ここまで40分

PHPをphp-fpmで動かしてみよう

  • Apacheを止めてみよう

ここまで45分

  • aptでphp5-fpmをインストールしてみよう
    • sudo systemctl status php5-fpm と打ってみよう
      • 質問:php-fpmのプロセスはいくつ起動してる?
      • 質問:php5-fpm の設定ファイルはどこにある?
        • 設定ファイルを開いてみよう
          • 質問:php-fpmがlistenしているソケットファイルはどこにある?
          • (トリッキーなので誰も手が上がらなければすぐに教える)

ここまで55分

nginxを使ってみよう

  • aptでnginxをインストールしてみよう
  • nginxでphp-fpmにリバースプロキシしてみよう(チートシート
    • 手元のマシンで /etc/hosts を書いてブラウザでアクセスしてみよう
    • 質問:SERVER_SOFTWAREの値は?

ここまで65分

Rubyをインストールしてみよう

  • Ruby 2.3.1をインストールしてみよう
    • Rubyをビルドしてみよう
      • Rubyをダウンロードしてホームディレクトリにインストールしてみよう
        • ./configure --path=$HOME/local && make && make install
      • Rubyビルド済みインスタンスではここまで完了してます
  • ~/.bash_profile で、 $HOME/local/bin を $PATH に追加してみよう(チートシート
  • gem install bundler してみよう

ここまで75分

Rubyでウェブアプリケーションを起動してみよう

  • 簡単なRackアプリケーションを書いてみよう(チートシート
    • bundle exec uniorn -c unicorn.rb で起動してみよう
    • ブラウザでサーバーのIPアドレスとunicornのポートを指定してアクセスしてみよう
  • systemdに登録してデーモン化してみよう(チートシート
  • 質問:unicornのプロセス数は?

ここまで90分

nginxでRubyのアプリケーションにアクセスしてみよう

  • nginxでunicornにリバースプロキシしてみよう(チートシート
    • 手元のマシンで /etc/hosts を書いてブラウザでアクセスしてみよう
    • PHPとRubyを別々のURLで見られるようにしてみよう

ここまで95分

負荷をかけてみよう

  • nginxのアクセスログにレスポンスタイムを出すようにしてみよう(チートシート
    • ブラウザでPHPとRubyのページをリロードしながら upstream_response_time の値を見てみよう
  • topコマンドを使ってみよう
    • メモリ順に並べてみよう
    • CPU順に並べてみよう
    • ウェブブラウザでF5連打してみよう
  • dstatコマンドをインストールしてみよう
    • dstat -tlap --top-cpu --top-io と打ってみよう
    • ウェブブラウザでF5連打してみよう
  • RubyとPHPでコード中の2点間のマイクロ秒をprintしてみよう

ここまで120分

お疲れ様でした。

インスタンスを削除するのを忘れずに!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment