Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はじめてのVPS契約 / My first VPS
Search
ハトネコエ
July 28, 2017
Technology
1
200
はじめてのVPS契約 / My first VPS
ゴールデンウィーク明け(2017/5/8)にあった社内勉強会の資料。
けっこうな分量書いたのでせっかくだからアップロード!
はじめてのVPS契約のご参考に。
ハトネコエ
July 28, 2017
Tweet
Share
More Decks by ハトネコエ
See All by ハトネコエ
Godot 4.3 と学ぶインタラクティブミュージック / Interactive Music Basics with Godot 4.3
nekonenene
0
33
Developer Consoleを使い倒そう / Use Web Browser DevTools
nekonenene
0
4
まだまだマイナー?! 未踏事業について教えます / Introduction of Mitou Project
nekonenene
1
89
Docker for Windows/macOS
nekonenene
0
5
技術的負債を防ぐには / What is the Technical Debt
nekonenene
0
290
画像処理の基礎の基礎 / Ultra Basic of Image Processing
nekonenene
0
21
伝わる文章を書こう講座 / Write the Kind Japanese Message
nekonenene
2
140
Unity で Android 自動ビルドしたかった話 / I tried Android build of Unity using Docker, but...
nekonenene
0
2.1k
これでわかるB-treeアルゴリズム / B-tree algorithm
nekonenene
12
9.7k
Other Decks in Technology
See All in Technology
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
250
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
4
230
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
180
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
130
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
心が動くエンジニアリング ── 私が夢中になる理由
16bitidol
0
100
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
Featured
See All Featured
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
BBQ
matthewcrist
85
9.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
97
How to train your dragon (web standard)
notwaldorf
88
5.7k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Agile that works and the tools we love
rasmusluckow
327
21k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Side Projects
sachag
452
42k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
900
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Transcript
VPS契約 はじめての ハトネコエ
きっかけ
VPS契約のきっかけ 「nazoさんマストドンのアカウントどこで作ったんですか?」 「自分のサーバーで」 「アイエエエエ!ジサバ!ジサバナンデ!?」 「すでにあるウェブアプリ使うだけで楽だから、サーバー立ててみるといいですよ」 なるほど……と、すぐに影響される人間なのでまずはVPSの契約をしてみるのだった…
このスライドの目的 ・わたしのように初めてVPS契約をしてサーバーを立ててみる人が Webアプリケーションを動かせるまで何をすればいいのか、の説明です ・「安く済ませる」を念頭に置いているため、サーバー数1つだったりとミニマムです ・Qiitaの記事が5つくらい書けそうな分量になりました
-第1章 VPS契約-
契約すると仮想マシンを提供してくれるよ VPS: Virtual Private Server [ホスト型] ・Virtual Box (Oracle) ・VMware
Workstation Player [ハイパーバイザー型] ・Hyper-V (Microsoft) ・KVM (Qumranet) [コンテナ型] ・Docker
仮想マシンの仕組みの種類 [ホスト型] ホストOSにVirtual Boxなどの仮想化アプリケーションをインストール <ユーザー空間> 仮想化アプリケーションの力でゲストOSを作成 [ハイパーバイザー型] ハードウェアに直接KVMなどのカーネルモジュールをインストール(実用としてはホスト OSのカーネル空間にKVMをインストール) <カーネル空間>
KVMの力で、1つのハードウェアに複数のOS(ゲストOS)をインストールできる [コンテナ型] ホストOSにDockerをインストール DockerEngineがホストOSのカーネルとCPUをコンテナに提供(ゲストOSは存在しない)
なるほど! 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にサポート終了のためかな)
閑話休題 Dockerの話になってましたが…
ConoHaと契約したよ! 「佐倉まりな」ちゃんとじゃなくて 「美雲このは」ちゃんと契約したよ! 絶対領域には勝てなかったよ!
真面目な理由 ・ConoHa (GMO) ・さくらのVPS (さくらインターネット) ・ServersMan@VPS (DTI) の間で迷った。 安さは圧倒的にServersManだが、 初期OSのUbuntuに16.04が無い。
さくらは初期費用と、プランの変更が 上位プランへのみなのがネック。 また、1GBプランでのSSD容量は ConoHaの方が大きかった。 ConoHa (SSD/HDDのみ) さくら (SSD/HDDは選択可能) ServersMan (HDDのみ)
ちなみに…… 言語設定:日本語 でログインした場合 言語設定:このは でログインした場合 最高だな?
大きな欠点 契約したその時間にちょうど障害で、 管理画面からサーバー一覧が 見られず、そのためIPアドレスが 確認できないというトラブルに……。 Twitterを見たところ 「サーバーにSSH接続できない」「ConoHaの障害でうちのマストドン落ちてます」などと 阿鼻叫喚が見られたので、商用に使うのはとてもお勧めできません。さくらにしましょう。 あと、その数日後にトップページで 私が見つけてしまったもの……
→ あかん。
-第2章 ドメイン取得-
ドメイン契約 Let’s Encryptを試したい場合、ドメイン認証のために必須です。 DNSの設定に慣れるためにも取得するといいでしょう。 無料で済ますのであればFreenomがお手軽です。 最長で1年契約できます。(2年以上だと$9.95/yearでした。そんなに高くない)
ドメイン取得代行の業者選択 今回は1年目が99円、更新920円(いずれも税別)と 一番安いプランを扱っている『お名前.com』か『ムームードメイン』で tokyoドメインを取得しようと考え、最終的に『ムームードメイン』を選択しました。 『お名前.com』を選択しなかったのは以下の理由によります。 *初年度の価格を強調し過ぎる悪意あるサイト作りなのが気に入ってない *「Whois情報公開代行」が『お名前.com』のみ有料になる場合がある (参考: お名前.comでドメイン取得時にWhois情報公開代行を忘れると大損 )
*会社で使っていた時に管理画面が使いにくかった覚えが…… 『ムームードメイン』は同じGMO傘下ながらも以上の問題がありませんでした。 管理画面も、『お名前.com』よりは幾分かわかりやすいです。
DNS設定 Freenomもムームードメインもお名前.comも、ドメインを取得すると DNS(ネームサーバー)を利用できます。 一方でさくらインターネットやConoHaの契約でもDNSは付いてきます。 ムームードメインの場合のみ、DNS設定でTTLの指定ができないので ConoHaのDNSに飛ばしてあげるのがいいです。 ConoHaでサーバーを作り直したとき 新しいIPアドレスをAレコードとして振る操作を、 ConoHaの管理画面内で完結できますしね。
-第3章 構成管理ツール-
構成管理ツールどうしよう? ゲストOSを好きに調理した設定をコード化できる構成管理ツール。 サーバーの設定を手動でやるのは、二度とおこないたくないくらい面倒だと、 以前AWSをさわってた頃に学んだので導入することは決めていました。 会社ではAnsible、でもChefとかItamaeとかも いいのかもしれない、と思い見てみました。 https://www.youtube.com/watch?v=FBF6WQayhdQ&t=5m34s
圧倒的Ansibleだった 出典:さくらのナレッジ 導入しやすく軽量な構成管理ツール「 Itamae」を使ってみよう( http://knowledge.sakura.ad.jp/knowledge/4341/ ) もっと下に続く表なのですが、ここの部分だけで心は決まりました。 「独自」がだるい予感しかしない一方、YAMLの安心感……。 ただ、フォローしておきますと繰り返し文に関してはAnsibleは弱いです。 その点ではきっとプログラミング言語を使用しているItamaeなどの強みが出るでしょう。
Ansibleの設定 ここからが大変なところです……。休日の多くを費やしました。 基本的には、リモートサーバーで試したことをAnsibleの書き方に直して足していく…… を繰り返していきます。 以下が作ったroleの一部です。次のスライドから1枚で概略を書いていきます。 - apt - user -
dotfiles - core - mysql - ssh - firewall
apt これは単純です。 apt update, apt upgrade をおこなったのち、 「build-essential」「default-jre」「default-jdk」「emacs」「vim」「zsh」「tree」を インストールし、その後、不要になった依存パッケージを削除する apt
autoremove を実行しています。
user ログインユーザーを作成します。 ハマりどころなのが、passwordの指定では 生のパスワードを記述するのでなく、 password_hash('sha512') フィルターを付与する必要があるところです。
dotfiles .bash_profile , .bashrc , .inputrc , .vimrc をホームディレクトリにコピーしてきます。 個人プロジェクトだから出来る横暴ですね(笑)
.bash_profile を置いていないために .bashrc がSSHログイン時に読み込まれない、 という問題でしばらく悩んでいました。 src: xyz/ と書くと、role内のfilesディレクトリ直下の xyzディレクトリをコピーしてきますが、 src: files/ と書くと、role内のfilesディレクトリ直下 すべてのファイルをコピーしてきます。 これrole内のfilesディレクトリに「files」フォルダーあったら挙動は…?
core デフォルトエディタをnanoからvimに変更すること、 /etc/hosts の編集、 useradd のデフォルトシェルを sh から bash に変更、をやらせています。
useradd -D でなぜか変更できなかったのでファイルを直接編集してます。
when: is_init_mode サーバー設置後の最初にだけおこなえばいいタスクに付けてます。 また、ansibleが接続する際のユーザー名・ポートにも利用しています。 (初回のみ22番、rootのため) コマンドに -e is_init_mode=true と付与し 変数を渡してあげることで、
同じPlaybookを使いつつも 異なる挙動をさせてあげられます。
mysql MySQL関連パッケージをインストールし、 rootユーザーのパスワードを変更、 メインユーザーの作成、 conf.d以下へのコンフィグファイルの設置、 などをおこなっています。 rootって名前じゃない管理者アカウント作って rootログインは禁止するとかしないとな… などと改善の余地が残っています。
ssh authorized_keys を $HOME/.ssh に置くのと、 SSHポート番号の変更、 rootユーザーのログイン禁止、 必要あれば sshd の再起動をおこなっていま
す。
nginx nginxをインストールして nginxの設定ファイル置いて 各プロジェクトにvhosts設定置いて 各プロジェクトのnginx logのためのlogrotate設定を置いて、 必要あればnginxの再起動、という流れです。 言葉に直すと簡単だけど、 nginxの設定ファイルを書くなどの慣れないことだらけで ここが一番時間かかったかと思います。
ufw ufwをインストールし(普通プリインストールされてるけど念のため)、 80(HTTP), 443(HTTPS), SSHポート、その他必要なポートを開放します。 なお、ufwはiptablesのラッパーらしく、 試しに sudo iptables --list
を叩いてみると、 ufwで設定した内容が反映されていることが 確認できました。
letsencrypt 便利なことに標準aptリポジトリにあるので letsencrypt パッケージをインストールします。(yumやdnfでは certbot パッケージ) 証明書保管ディレクトリに指定ホスト名のディレクトリがあるか確認し、 無いのならば certonly で作成、という流れにしています。
その後 renew をcronに登録します。 (ログ見てないのでrenew動いてないかも…) これとnginxのvhosts設定を組み合わせ、 HTTPS化がおこなえました。
-第4章 アプリケーション設置-
なにを立てよう? 長くなりましたが、ブラウザからHTTPSでnginxのデフォルトページが開けたところで、 いよいよアプリケーションを設置します。 この頃にはマストドン熱がすっかり冷めてしまっていて、 「使わないもの立ててもな……」と思ったので GitLab の設置を考えました。 ……が、こっちは挫折しました。 なるべくprojectsディレクトリ以下でファイル管理するように 設定ファイルをいじっていたのですが上手くいかず……。
代わりに GitBucket を立ち上げることにしました。
GitBucketとは takezoeさん制作の、 Scalaで書かれたGitHubクローンです。 当初は完璧なGitHubクローンを 謳っており、右下のようなUIでしたが GitHubから警告があり現在は AdminLTEをベースにしたデザインに 落ち着いています。 参考: GitBucketのユーザインターフェースの変更について
http://takezoe.hatenablog.com/entry/2016/03/21/031733
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 のようです)
Systemd Ubuntuのサービス管理は14.04の段階ではUpstartでしたが、 移行が進み現在ではSystemdによるサービス管理が標準となりました。 (よく知らなくて最初にUpstart用ファイルを書いたのは秘密だ……) このSystemd用ファイルはもちろんユーザーも作成でき便利…… なのですが、問題点として、Systemdのログファイルはバイナリで生成され、 sudo journalctl --unit=gitbucket のように
journalctl コマンドを通して見るしかなくてけっこう不便です。 Supervisorをあとで知り、ログ生成の観点ではこっちのほうがよかったなと考えてます。
大ハマり! 画像が表示されない! アプリケーションを起動できたところで「さて見よう」とページを表示すると、 スタイルシートや画像などのアセットが404で表示されない! location / { proxy_pass 127.0.0.1:12345; }
を location ^~ / { proxy_pass 127.0.0.1:12345; } とすることで直ったものの、なんでかがわからなくて 教えてください。
他には…… 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
-第5章 サーバー監視-
クラウド監視サービスの選択 『モニタリングサービス(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 から利用登録するのがいいでしょう。
DataDogはどうだったか? とても良いです。 登録して最初に エージェントのインストール方法が 出てくるのですが、その一覧に Ansibleが含まれていて、 公式のroleを利用することで 数行でセットアップできることが わかります。
DataDogエージェント監視項目の設定 本来は /etc/dd-agent/conf.d ディレクトリに 設定ファイルをYAML形式で書いて 置いていくのですが、 Ansibleでの設定の場合は 1つのYAMLファイルを置けば 公式のroleが代行してくれるので 監視項目を増やすのがとても楽です。
Mackerelとの比較 プロセス監視など、Mackerelで同様のことをするために必要なドキュメントを 読んできた印象ですと、DataDogの方がより簡単に設定をおこなえるように感じます。 一方で、DataDog最大の問題として、 無料プランだとアラートが使えない! といういかんともしがたい問題があります。 Mackerelは無料プランだとカスタムダッシュボードが作れないし、 両者とも無料プランでは満足できないよう上手くできているなと感じます……(笑) 料金はDataDogが $15
or $18 per host、Mackerelが ¥1800 per host、 保持期間は前者15ヵ月、後者400日、DataDogはメトリクス数制限なし、 そして数多くの連携があり、DataDogがちょっと優勢でした。
おわりに (感想)
Ansibleの設定はすぐ大きくなる 会社のAnsible設定おおきいなあ、と思っていて、 「個人サーバーだからミニマムに作ろう」と思って作り始めたのですが ふつうにディレクトリ数増えていって、こうなる運命なのだな……と思いました。 https://www.youtube.com/watch?v=BF1wMoUjOj0
nginxすごい 今回ダッシュボードでプロセスごとのメモリ量を見ることが多かったのですが、 nginxのメモリ使用量がずーっと 5MB付近あたりでとどまっていて、 「なに食べて生きてるのこの子・・・」と思いました。 以下のページが、同時接続数を上げたときの リクエスト処理量、メモリ使用量について触れています。 『これから始める人のためのNginx(1):高速・軽量・高機能……Nginxの基礎知識』 http://www.atmarkit.co.jp/ait/articles/1406/17/news013_2.html
参考文献(仮想マシンの仕組みの種類) ・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
参考文献(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/