Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はじめてのVPS契約 / My first VPS

はじめてのVPS契約 / My first VPS

ゴールデンウィーク明け(2017/5/8)にあった社内勉強会の資料。
けっこうな分量書いたのでせっかくだからアップロード!
はじめてのVPS契約のご参考に。

ハトネコエ

July 28, 2017
Tweet

More Decks by ハトネコエ

Other Decks in Technology

Transcript

  1. VPS契約
    はじめての
    ハトネコエ

    View full-size slide

  2. きっかけ

    View full-size slide

  3. VPS契約のきっかけ
    「nazoさんマストドンのアカウントどこで作ったんですか?」
    「自分のサーバーで」
    「アイエエエエ!ジサバ!ジサバナンデ!?」
    「すでにあるウェブアプリ使うだけで楽だから、サーバー立ててみるといいですよ」
    なるほど……と、すぐに影響される人間なのでまずはVPSの契約をしてみるのだった…

    View full-size slide

  4. このスライドの目的
    ・わたしのように初めてVPS契約をしてサーバーを立ててみる人が
     Webアプリケーションを動かせるまで何をすればいいのか、の説明です
    ・「安く済ませる」を念頭に置いているため、サーバー数1つだったりとミニマムです
    ・Qiitaの記事が5つくらい書けそうな分量になりました

    View full-size slide

  5. -第1章 VPS契約-

    View full-size slide

  6. 契約すると仮想マシンを提供してくれるよ
    VPS: Virtual Private Server
    [ホスト型]
    ・Virtual Box (Oracle)
    ・VMware Workstation Player
    [ハイパーバイザー型]
    ・Hyper-V (Microsoft)
    ・KVM (Qumranet)
    [コンテナ型]
    ・Docker

    View full-size slide

  7. 仮想マシンの仕組みの種類
    [ホスト型]
    ホストOSにVirtual Boxなどの仮想化アプリケーションをインストール <ユーザー空間>
    仮想化アプリケーションの力でゲストOSを作成
    [ハイパーバイザー型]
    ハードウェアに直接KVMなどのカーネルモジュールをインストール(実用としてはホスト
    OSのカーネル空間にKVMをインストール) <カーネル空間>
    KVMの力で、1つのハードウェアに複数のOS(ゲストOS)をインストールできる
    [コンテナ型]
    ホストOSにDockerをインストール
    DockerEngineがホストOSのカーネルとCPUをコンテナに提供(ゲストOSは存在しない)

    View full-size slide

  8. なるほど!
    WindowsでDockerを使ってLinuxを動かすのはこのコンテナ型の仕組み上、
    OSカーネルが異なるので無理だから、Virtual Boxのインストールが必要だったんだ!
    そして、2017/3/2にリリースされたDocker CE for Windowsでは
    ホスト型のVirtual Boxを使用することをやめ、
    ハイパーバイザー型であるHyper-Vを使うことでパフォーマンスを高めたと!
    ……しかしHyper-V拡張セッションはWindows 8.1 Proからの導入のため、
    Docker CE for Windowsの必須環境は Windows10 Pro / Enterprise という
    なかなか限定された環境にw
    (Windows 8.1が見捨てられてるのは2018/1/9にサポート終了のためかな)

    View full-size slide

  9. 閑話休題
    Dockerの話になってましたが…

    View full-size slide

  10. ConoHaと契約したよ!
    「佐倉まりな」ちゃんとじゃなくて
    「美雲このは」ちゃんと契約したよ!
    絶対領域には勝てなかったよ!

    View full-size slide

  11. 真面目な理由
    ・ConoHa (GMO)
    ・さくらのVPS (さくらインターネット)
    ・ServersMan@VPS (DTI)
    の間で迷った。
    安さは圧倒的にServersManだが、
    初期OSのUbuntuに16.04が無い。
    さくらは初期費用と、プランの変更が
    上位プランへのみなのがネック。
    また、1GBプランでのSSD容量は
    ConoHaの方が大きかった。
    ConoHa
    (SSD/HDDのみ)
    さくら
    (SSD/HDDは選択可能)
    ServersMan
    (HDDのみ)

    View full-size slide

  12. ちなみに……
    言語設定:日本語
    でログインした場合
    言語設定:このは
    でログインした場合
    最高だな?

    View full-size slide

  13. 大きな欠点
    契約したその時間にちょうど障害で、
    管理画面からサーバー一覧が
    見られず、そのためIPアドレスが
    確認できないというトラブルに……。
    Twitterを見たところ
    「サーバーにSSH接続できない」「ConoHaの障害でうちのマストドン落ちてます」などと
    阿鼻叫喚が見られたので、商用に使うのはとてもお勧めできません。さくらにしましょう。
    あと、その数日後にトップページで
    私が見つけてしまったもの…… →
    あかん。

    View full-size slide

  14. -第2章 ドメイン取得-

    View full-size slide

  15. ドメイン契約
    Let’s Encryptを試したい場合、ドメイン認証のために必須です。
    DNSの設定に慣れるためにも取得するといいでしょう。
    無料で済ますのであればFreenomがお手軽です。
    最長で1年契約できます。(2年以上だと$9.95/yearでした。そんなに高くない)

    View full-size slide

  16. ドメイン取得代行の業者選択
    今回は1年目が99円、更新920円(いずれも税別)と
    一番安いプランを扱っている『お名前.com』か『ムームードメイン』で
    tokyoドメインを取得しようと考え、最終的に『ムームードメイン』を選択しました。
    『お名前.com』を選択しなかったのは以下の理由によります。
    *初年度の価格を強調し過ぎる悪意あるサイト作りなのが気に入ってない
    *「Whois情報公開代行」が『お名前.com』のみ有料になる場合がある
     (参考: お名前.comでドメイン取得時にWhois情報公開代行を忘れると大損 )
    *会社で使っていた時に管理画面が使いにくかった覚えが……
    『ムームードメイン』は同じGMO傘下ながらも以上の問題がありませんでした。
    管理画面も、『お名前.com』よりは幾分かわかりやすいです。

    View full-size slide

  17. DNS設定
    Freenomもムームードメインもお名前.comも、ドメインを取得すると
    DNS(ネームサーバー)を利用できます。
    一方でさくらインターネットやConoHaの契約でもDNSは付いてきます。
    ムームードメインの場合のみ、DNS設定でTTLの指定ができないので
    ConoHaのDNSに飛ばしてあげるのがいいです。
    ConoHaでサーバーを作り直したとき
    新しいIPアドレスをAレコードとして振る操作を、
    ConoHaの管理画面内で完結できますしね。

    View full-size slide

  18. -第3章 構成管理ツール-

    View full-size slide

  19. 構成管理ツールどうしよう?
    ゲストOSを好きに調理した設定をコード化できる構成管理ツール。
    サーバーの設定を手動でやるのは、二度とおこないたくないくらい面倒だと、
    以前AWSをさわってた頃に学んだので導入することは決めていました。
    会社ではAnsible、でもChefとかItamaeとかも
    いいのかもしれない、と思い見てみました。
    https://www.youtube.com/watch?v=FBF6WQayhdQ&t=5m34s

    View full-size slide

  20. 圧倒的Ansibleだった
    出典:さくらのナレッジ 導入しやすく軽量な構成管理ツール「
    Itamae」を使ってみよう( http://knowledge.sakura.ad.jp/knowledge/4341/ )
    もっと下に続く表なのですが、ここの部分だけで心は決まりました。
    「独自」がだるい予感しかしない一方、YAMLの安心感……。
    ただ、フォローしておきますと繰り返し文に関してはAnsibleは弱いです。
    その点ではきっとプログラミング言語を使用しているItamaeなどの強みが出るでしょう。

    View full-size slide

  21. Ansibleの設定
    ここからが大変なところです……。休日の多くを費やしました。
    基本的には、リモートサーバーで試したことをAnsibleの書き方に直して足していく……
    を繰り返していきます。
    以下が作ったroleの一部です。次のスライドから1枚で概略を書いていきます。
    - apt
    - user
    - dotfiles
    - core
    - mysql
    - ssh
    - firewall

    View full-size slide

  22. apt
    これは単純です。
    apt update, apt upgrade をおこなったのち、
    「build-essential」「default-jre」「default-jdk」「emacs」「vim」「zsh」「tree」を
    インストールし、その後、不要になった依存パッケージを削除する
    apt autoremove を実行しています。

    View full-size slide

  23. user
    ログインユーザーを作成します。
    ハマりどころなのが、passwordの指定では
    生のパスワードを記述するのでなく、
    password_hash('sha512') フィルターを付与する必要があるところです。

    View full-size slide

  24. dotfiles
    .bash_profile , .bashrc , .inputrc , .vimrc をホームディレクトリにコピーしてきます。
    個人プロジェクトだから出来る横暴ですね(笑)
    .bash_profile を置いていないために .bashrc がSSHログイン時に読み込まれない、
    という問題でしばらく悩んでいました。
    src: xyz/ と書くと、role内のfilesディレクトリ直下の
    xyzディレクトリをコピーしてきますが、
    src: files/ と書くと、role内のfilesディレクトリ直下
    すべてのファイルをコピーしてきます。
    これrole内のfilesディレクトリに「files」フォルダーあったら挙動は…?

    View full-size slide

  25. core
    デフォルトエディタをnanoからvimに変更すること、
    /etc/hosts の編集、
    useradd のデフォルトシェルを sh から bash に変更、をやらせています。
    useradd -D でなぜか変更できなかったのでファイルを直接編集してます。

    View full-size slide

  26. when: is_init_mode
    サーバー設置後の最初にだけおこなえばいいタスクに付けてます。
    また、ansibleが接続する際のユーザー名・ポートにも利用しています。
    (初回のみ22番、rootのため)
    コマンドに -e is_init_mode=true と付与し
    変数を渡してあげることで、
    同じPlaybookを使いつつも
    異なる挙動をさせてあげられます。

    View full-size slide

  27. mysql
    MySQL関連パッケージをインストールし、
    rootユーザーのパスワードを変更、
    メインユーザーの作成、
    conf.d以下へのコンフィグファイルの設置、
    などをおこなっています。
    rootって名前じゃない管理者アカウント作って
    rootログインは禁止するとかしないとな…
    などと改善の余地が残っています。

    View full-size slide

  28. ssh
    authorized_keys を $HOME/.ssh に置くのと、
    SSHポート番号の変更、
    rootユーザーのログイン禁止、
    必要あれば sshd の再起動をおこなっていま
    す。

    View full-size slide

  29. nginx
    nginxをインストールして
    nginxの設定ファイル置いて
    各プロジェクトにvhosts設定置いて
    各プロジェクトのnginx logのためのlogrotate設定を置いて、
    必要あればnginxの再起動、という流れです。
    言葉に直すと簡単だけど、
    nginxの設定ファイルを書くなどの慣れないことだらけで
    ここが一番時間かかったかと思います。

    View full-size slide

  30. ufw
    ufwをインストールし(普通プリインストールされてるけど念のため)、
    80(HTTP), 443(HTTPS), SSHポート、その他必要なポートを開放します。
    なお、ufwはiptablesのラッパーらしく、
    試しに sudo iptables --list を叩いてみると、
    ufwで設定した内容が反映されていることが
    確認できました。

    View full-size slide

  31. letsencrypt
    便利なことに標準aptリポジトリにあるので
    letsencrypt パッケージをインストールします。(yumやdnfでは certbot パッケージ)
    証明書保管ディレクトリに指定ホスト名のディレクトリがあるか確認し、
    無いのならば certonly で作成、という流れにしています。
    その後 renew をcronに登録します。
    (ログ見てないのでrenew動いてないかも…)
    これとnginxのvhosts設定を組み合わせ、
    HTTPS化がおこなえました。

    View full-size slide

  32. -第4章 アプリケーション設置-

    View full-size slide

  33. なにを立てよう?
    長くなりましたが、ブラウザからHTTPSでnginxのデフォルトページが開けたところで、
    いよいよアプリケーションを設置します。
    この頃にはマストドン熱がすっかり冷めてしまっていて、
    「使わないもの立ててもな……」と思ったので GitLab の設置を考えました。
    ……が、こっちは挫折しました。
    なるべくprojectsディレクトリ以下でファイル管理するように
    設定ファイルをいじっていたのですが上手くいかず……。
    代わりに GitBucket を立ち上げることにしました。

    View full-size slide

  34. GitBucketとは
    takezoeさん制作の、
    Scalaで書かれたGitHubクローンです。
    当初は完璧なGitHubクローンを
    謳っており、右下のようなUIでしたが
    GitHubから警告があり現在は
    AdminLTEをベースにしたデザインに
    落ち着いています。
    参考: GitBucketのユーザインターフェースの変更について
    http://takezoe.hatenablog.com/entry/2016/03/21/031733

    View full-size slide

  35. GitBucketの動かし方
    gitbucket.war をダウンロードしてきてあとは
    java -jar gitbucket.war --port=12345 --gitbucket.home=/path/to/project
    を実行するだけです。簡単に環境を汚染することなく実行できるので楽です。
    Tomcat や Jetty で gitbucket.war を管理する方法もありましたが、
    それらの設定をするのが面倒だったので単純にSystemd用ファイルを書いて
    サービス化させることにしました。
    (なお、 java -jar gitbucket.war で起動したときのJavaServletは
     コード見た感じだと Jetty のようです)

    View full-size slide

  36. Systemd
    Ubuntuのサービス管理は14.04の段階ではUpstartでしたが、
    移行が進み現在ではSystemdによるサービス管理が標準となりました。
    (よく知らなくて最初にUpstart用ファイルを書いたのは秘密だ……)
    このSystemd用ファイルはもちろんユーザーも作成でき便利……
    なのですが、問題点として、Systemdのログファイルはバイナリで生成され、
    sudo journalctl --unit=gitbucket
    のように journalctl コマンドを通して見るしかなくてけっこう不便です。
    Supervisorをあとで知り、ログ生成の観点ではこっちのほうがよかったなと考えてます。

    View full-size slide

  37. 大ハマり! 画像が表示されない!
    アプリケーションを起動できたところで「さて見よう」とページを表示すると、
    スタイルシートや画像などのアセットが404で表示されない!
    location / {
    proxy_pass 127.0.0.1:12345;
    }

    location ^~ / {
    proxy_pass 127.0.0.1:12345;
    }
    とすることで直ったものの、なんでかがわからなくて
    教えてください。

    View full-size slide

  38. 他には……
    Jenkins と Gogs も立てました。
    Jenkinsは立てたけど特にやることなくて全く使ってないです。
    あの使いにくいUI、なんなんでしょうね……
    GogsはGoで実装されているGitHubクローンです。
    とても軽量でびっくりしています。
    (※右図だとJenkinsがGitBucketより軽そうですが、
     動かしてないからなだけで、ちゃんとアクセスしてると
     200MB以上食いますしGitBucketを超えます)
    GitLabは700MBくらい食うそうです。本当?!
    参考:GitBucket / Gogs / Gitea / GitLab のベンチマーク on Raspberry Pi 3
    http://qiita.com/kounoike/items/7c42db90c42e280e1cab

    View full-size slide

  39. -第5章 サーバー監視-

    View full-size slide

  40. クラウド監視サービスの選択
    『モニタリングサービス(Mackerel、Datadog、New Relic)入門!』( http://qiita.com/uzresk/items/fa58720acbe7672607c9 )
    を参考に見比べたところ、どれも良さそうでしたので、
    会社ではMackerelを使っているからDataDogを使ってみようと
    軽い気持ちで選択しました。
    New Relicは値段が高いイメージが頭についてたため無料プランが無いと
    そのときは勘違いしていました。LITEプランがありますし、
    AWS利用者向けにはSTANDARDプランがあるようですね。
    三社の中だとNew Relic STANDARDプランがデータ保持期間1週間と、
    他の社の無料プランが1日であることに比べて充分長いですので、AWS利用者は
    https://newrelic.com/partner/aws から利用登録するのがいいでしょう。

    View full-size slide

  41. DataDogはどうだったか?
    とても良いです。
    登録して最初に
    エージェントのインストール方法が
    出てくるのですが、その一覧に
    Ansibleが含まれていて、
    公式のroleを利用することで
    数行でセットアップできることが
    わかります。

    View full-size slide

  42. DataDogエージェント監視項目の設定
    本来は /etc/dd-agent/conf.d ディレクトリに
    設定ファイルをYAML形式で書いて
    置いていくのですが、
    Ansibleでの設定の場合は
    1つのYAMLファイルを置けば
    公式のroleが代行してくれるので
    監視項目を増やすのがとても楽です。

    View full-size slide

  43. Mackerelとの比較
    プロセス監視など、Mackerelで同様のことをするために必要なドキュメントを
    読んできた印象ですと、DataDogの方がより簡単に設定をおこなえるように感じます。
    一方で、DataDog最大の問題として、
    無料プランだとアラートが使えない! といういかんともしがたい問題があります。
    Mackerelは無料プランだとカスタムダッシュボードが作れないし、
    両者とも無料プランでは満足できないよう上手くできているなと感じます……(笑)
    料金はDataDogが $15 or $18 per host、Mackerelが ¥1800 per host、
    保持期間は前者15ヵ月、後者400日、DataDogはメトリクス数制限なし、
    そして数多くの連携があり、DataDogがちょっと優勢でした。

    View full-size slide

  44. おわりに
    (感想)

    View full-size slide

  45. Ansibleの設定はすぐ大きくなる
    会社のAnsible設定おおきいなあ、と思っていて、
    「個人サーバーだからミニマムに作ろう」と思って作り始めたのですが
    ふつうにディレクトリ数増えていって、こうなる運命なのだな……と思いました。
    https://www.youtube.com/watch?v=BF1wMoUjOj0

    View full-size slide

  46. nginxすごい
    今回ダッシュボードでプロセスごとのメモリ量を見ることが多かったのですが、
    nginxのメモリ使用量がずーっと 5MB付近あたりでとどまっていて、
    「なに食べて生きてるのこの子・・・」と思いました。
    以下のページが、同時接続数を上げたときの
    リクエスト処理量、メモリ使用量について触れています。
    『これから始める人のためのNginx(1):高速・軽量・高機能……Nginxの基礎知識』
    http://www.atmarkit.co.jp/ait/articles/1406/17/news013_2.html

    View full-size slide

  47. 参考文献(仮想マシンの仕組みの種類)
    ・VPSの仕組み https://blog.arena.ne.jp/vps/646
    ・エンジニアなら知っておきたい「仮想マシン」のしくみ https://www.slideshare.net/TakeshiHasegawa1/20101031bpstudy38
    ・ハイパーバイザ - Wikipedia
    https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%90%E3%82%A4%E3%82%B6
    ・Hyper-V - Wikipedia https://ja.wikipedia.org/wiki/Hyper-V
    ・Linuxキーワード - カーネル・モジュール http://itpro.nikkeibp.co.jp/article/Keyword/20081107/318745/
    ・Linux標準の仮想化技術「KVM」の仕組み http://www.atmarkit.co.jp/ait/articles/0903/12/news120.html
    ・KVMの仕組み - Qiita http://qiita.com/saikoro-steak/items/05c88fdc385712ccce89
    ・30分で仮想サーバ(KVMホスト)環境を構築する https://www.agilegroup.co.jp/technote/kvm-server.html
    ・【仮想化】KVMとqemuとlibvirtの違い・関係 – ZacoDesign http://zacodesign.net/blog/?p=1393
    ・Tech Basics/Keyword:Docker http://www.atmarkit.co.jp/ait/articles/1407/14/news122.html
    ・Dockerを使ってみる必要が出てきた http://usado.jp/spdsk/2016/09/02/post-593/
    ・How is this possible? CentOS container on Ubuntu (newbie question)
    https://forums.docker.com/t/how-is-this-possible-centos-container-on-ubuntu-newbie-question/21558

    View full-size slide

  48. 参考文献(Docker CE for Windows)
    ・無償の「Docker for Windows」で手軽にLinuxコンテナを利用する
    http://www.atmarkit.co.jp/ait/articles/1609/01/news053.html
    ・「Windows Serverコンテナ」「Hyper-Vコンテナ」「Linuxコンテナ」「Docker」の違いとは?
    http://www.atmarkit.co.jp/ait/articles/1611/04/news028.html
    ・【追記】Windows 8.1のメリットは、Hyper-V 拡張セッション http://pcmanabu.com/windows-8-1-hyper-v/
    ・Windows 10で様々なOSを楽しむ【Hyper-V】
    http://pcmanabu.com/windows-10%E3%81%A7%E6%A7%98%E3%80%85%E3%81%AAos%E3%82%92%E6%A5%BD%E3%
    81%97%E3%82%80%E3%80%90hyper-v%E3%80%91/

    View full-size slide