【インフラ初心者超必見】インフラ情報まとめ

## はじめに

面白い会社でインフラ兼サーバーエンジニアをしている@enzenです。

インフラ周りっていろいろありすぎて情報がゴチャゴチャしすぎじゃないですか？
もともとアプリケーションエンジニアだったので、インフラ周りの全体像を学ぶのにすごく時間がかかりました。
そこで登場人物？をまとめたらきっと役に立つはずと思いこの記事を書くことにしました。

先人たちが記述してくれた記録をまとめる記事になります。先人たちに感謝！感謝！
有名どころをメインにまとめて行きたいと思います。

## OS

とりあえずOSがないとなにも始まりませんからね。以下は[Wiki](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)から引用。
> オペレーティングシステム（英語: Operating System、OS、オーエス）とは、コンピュータのオペレーション（操作・運用・運転）のために、ソフトウェアの中でも基本的、中核的位置づけのシステムソフトウェアである。通常、OSメーカーが組み上げたコンピュータプログラムの集合として、作成され提供されている。

簡単にまとめるとユーザがコンピュータを動かしやすくするための基盤となるシステムということですね。
みなさんOSの種類何個言えますか？
私は5個くらいしか記憶してませんでしたが実はOSって沢山あるんですよね。（Linuxは種類がとても多い）
そのなかでも有名どころとその概要を以下にまとめます。

|OS名|概要|参考リンク|
|:---|:---|:---|
|Windows|一般的なコンピュータにインストールされているOSといえばWindows|[公式](https://www.microsoft.com/ja-jp/windows)|
|macOS|AppleのコンピューターにインストールされているOS|[公式](https://www.apple.com/jp/mac/)|
|Unix|MacOSなど様々なOSの原型となったOS|[Wiki](https://ja.wikipedia.org/wiki/UNIX)|
|Linux|オープンソースのOS|[公式](https://www.linuxfoundation.jp/)|
|BSD系|Unixが元となったオープンソースのOS|[公式](https://www.freebsd.org/ja/)|
|iOS|Apple社が開発したiPhoneやiPadに利用されるOS|[公式](https://www.apple.com/jp/ios/ios-11/)|
|Android|Google社が開発した主にスマートフォンに利用されるOS|[公式](https://www.android.com/intl/ja_jp/)|

OSといえばこんなものかと思うが、我々エンジニアにはかけがえのないLinuxディストリビューションの紹介もしようと思います。
様々なディストリビューションが存在するが、主流となっている `Red Hat系` `Debian系` `Slackware系` の３種類から少しピックアップしたいと思います

### Red Hat系

|OS名|概要|参考リンク|
|:---|:---|:---|:---|
|RHEL|クライアントやサーバー向けのOS|[公式](https://www.redhat.com/ja/technologies/linux-platforms/enterprise-linux)|
|CentOS|RHELをクローンしたOS|[公式](https://www.centos.org/)|
|fedora|実験的な要素の強いOS|[公式](https://getfedora.org/ja/)|
|Korora|fedoraをより使いやすくすることを重視したOS|[公式](https://kororaproject.org/)|

### Debian系

|OS名|概要|参考リンク|
|:---|:---|:---|:---|
|Debian|Debianプロジェクトによって開発が進められている安定性に定評があるOS|[公式](https://www.debian.or.jp/)|
|Ubuntu|Debianをベースとした使いやすさに特化したOS|[公式](https://www.ubuntulinux.jp/)|
|ZorinOS|UbuntuをベースとしたビジュアルにこだわったOS|[公式](https://zorinos.com/)|
|Linux Mint|Linux Mintは使い勝手が良くモダンでエレガントな環境と提供するOS|[公式](http://linuxmint-jp.net/)|
|Pinguy OS|WindowsやMacユーザーも違和感なく使えることを重視したOS|[公式](https://pinguyos.com/)|
|MX Linux|エレガントなデスクトップでDebianベースのOS|[公式](https://mxlinux.org/)|
|elementary OS|Macを彷彿させるOS|[公式](https://elementary.io/ja/)|

### Slackware系

|OS名|概要|参考リンク|
|:---|:---|:---|:---|
|Slackware|最も古いLinux系OS|[公式](http://www.slackware.com/)|
|openSUSE|初心者から開発者までユーザーを問わず誰でも使えるOS|[公式](https://www.opensuse.org/)|

いやー沢山ありますねー。
Linuxディストリビューション選びでお悩みの方はこちらの[【2018年】初心者にオススメなLinuxディストリビューション](http://note.kurodigi.com/linux-distro-2018/#idh401)を参考にされると良いかもしれません。

## Webサーバ

以下は[Wiki](https://ja.wikipedia.org/wiki/Web%E3%82%B5%E3%83%BC%E3%83%90)から引用。
> Webサーバ（ウェブサーバ、英:Web server）は、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクト（画像など）の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。

Webサーバーについてよくわかっていない方は
[今更聞けない！Webサーバーの仕組みと構築方法
](https://eng-entrance.com/web-server-mechanism)[ウェブサーバ (Webサーバ)とは
](http://wa3.i-3-i.info/word1128.html)などをご覧いただくとわかりやすいかと思います。

それでは有名どころを簡単にまとめます。

|名前 |概要|参考リンク|
|:---|:---|:---|
|Apache|世界中で使用されているWebサーバーソフトウェア|[公式](https://httpd.apache.org/) <br> [Apacheとは？Webサーバーの仕組みと人気サーバーソフトを徹底解説](https://www.kagoya.jp/howto/rentalserver/apache/)|
|Nginx|イベント駆動モデルで大量アクセスに強く、静的コンテンツを高速で配信できるWebサーバーソフトウェア|[公式](https://www.nginx.com/)<br>[nginxでWebサーバを構築してみよう](https://www.yaz.co.jp/tec-blog/web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9/263)|
|IIS|Microsoft製のWindows向けのWebサーバーソフトウェア|[公式：Web サーバー (IIS) の概要](https://msdn.microsoft.com/ja-jp/library/hh831725(v=ws.11).aspx)<br>[IISとは](http://wa3.i-3-i.info/word12466.html)|

## APサーバ

以下は[Wiki](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%90)から引用。
> アプリケーションサーバ（英: Application Server）は、ビジネスロジックなどを実装したアプリケーションソフトウェアを実行することを専門とするコンピュータネットワーク上のサーバコンピュータ、もしくはそのようなコンピュータ上でのアプリケーションの実行を管理補助するミドルウェアのこと。

簡単にまとめるとプログラムが置いてあるサーバということですね。
ここも有名どころを簡単にまとめます。

|名前 |対応言語|概要|参考リンク|
|:---|:---|:---|:---|
| Tomcat | Java | Java ServletやJavaServer Pages (JSP) を実行するためのWebコンテナ |[Tomcatって何ですか？](https://thinkit.co.jp/free/article/0708/2/1)|
| JBoss | Java | Javaによるオープンソースソフトウェアの総称でJava EE標準準拠のAPサーバとして認識されることが多い |[企業向けアプリの常識を学び、JBossの環境構築 (1/2)](http://www.atmarkit.co.jp/ait/articles/0909/10/news124.html)|
| GlassFish | Java | Java EE準拠のアプリケーションサーバ |[GlassFishからアプローチするJava～入門編～第1回「GlassFishとNetBeansのインストール」](https://codezine.jp/article/detail/4743)|
| WebSphere Application Server  | Java | IBM製のJava EE準拠のアプリケーションサーバ |[公式](https://www-01.ibm.com/software/jp/websphere/)|
| unicorn  | Ruby | Railsなどでつくられたアプリケーションを動かすアプリケーションサーバ |[Railsを動作させるアプリケーションサーバunicornとは？概要やnginxとの違いなど](http://post.simplie.jp/posts/82)|
| puma  | Ruby | Railsなどでつくられたアプリケーションを動かすアプリケーションサーバ |[Rails開発におけるwebサーバーとアプリケーションサーバーの違い（翻訳）](https://qiita.com/jnchito/items/3884f9a2ccc057f8f3a3)|

## DBサーバ

Wikiがなかったので[Weblio](https://www.weblio.jp/content/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%B5%E3%83%BC%E3%83%90)から引用。

> 別名：データベースサーバ 
【英】database server
データベースサーバーとは、データベースを内部に持ち、データベース管理システムが動作しているサーバーのことである。
データベースサーバーは、クライアントからのリクエストなどに対してデータベースの検索などの処理を行い、処理結果を返す。

すごく簡単にいうとデータベースが置いてあるサーバということです。
そんなDBサーバに必要なDBの有名どころを簡単にまとめます。

|名前 |概要|参考リンク|
|:---|:---|:---|
|MySQL|現在、世界中で最もよく利用されているオープンソースのデータベースのひとつで高速で使いやすいことが特徴|[公式](https://www.mysql.com/jp/)|
|PostgreSQL|MySQLと双璧をなすオープンソースのデータベースで機能が豊富かつ標準SQLへの準拠度が比較的高い|[公式](https://www.postgresql.org/)|
|SQLite|アプリケーションの一部に組み込まれて動作するタイプのデータベースで手軽さと高速な動作から中小規模の開発向け|[公式](https://www.sqlite.org/index.html)|
|Oracle DB|非常に高機能なデータベース|[公式](https://www.oracle.com/jp/database/index.html)|
|SQL Server|マイクロソフト系システム開発で幅広く利用されているデータベース|[公式](https://www.microsoft.com/ja-jp/sql-server/sql-server-2017-editions)|
|DB2|大規模システム構築などで世界的に使われているデータベース|[公式](https://www-01.ibm.com/software/jp/cmp/db2/index.html)|
|H2 Database|Javaで実装されたオープンソースのデータベース|[公式](https://www-01.ibm.com/software/jp/cmp/db2/index.html)|


## プロビジョニング

サーバーやOSの話をしてきましたがこれらの設定やセットアップを手動でやるのは危険です。
ヒューマンエラーやOSやバージョンの違いで思いもしないハマりポイントがあります。
そんな時に恐ろしく便利なプロビジョニングツール！！

以下は[Wiki](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0)より引用
> プロビジョニング（英: Provisioning）は、本来は「準備、提供、設備」などの意味であり、現在では通常、音声通信やコンピュータなどの分野における、ユーザーや顧客へのサービス提供の仕組みを指す。

プロビジョニングツールには大きく３種類あります。

- Bootstrapping - OSをインストール/設定
- Configuration - ミドルウェアをインストール/設定
- Orchestration - アプリケーションのデプロイ

### Bootstrapping

|名前 |概要|参考リンク|
|:---|:---|:---|
|Vagrant|開発環境の構築と共有を簡単に行うためのツール|[開発環境の構築・共有を簡単にするVagrant入門](https://thinkit.co.jp/story/2015/03/19/5740)|
|Amazon EC2|セキュアでサイズ変更可能なコンピューティング性能をクラウド上で提供するウェブサービス|[公式](https://aws.amazon.com/jp/ec2/)|
|Docker|コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム|[Docker入門（第一回）～Dockerとは何か、何が良いのか～](https://knowledge.sakura.ad.jp/13265/)|

### Configuration

|名前 |概要|参考リンク|
|:---|:---|:---|
|Chef|ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツール|[サーバー設定ツール「Chef」の概要と基礎的な使い方](https://knowledge.sakura.ad.jp/867/)|
|Ansible|設定ファイルがシンプルで、管理対象サーバーに特別なソフトウェアをインストールすることなく利用できるなど、最小限の手間で各種設定を自動化できるのが特徴|[Ansibleをはじめる人に。](https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c)|
|Puppet|スタンドアロンおよびクライアント/サーバー構成でサーバー設定を集中管理できる設定管理ツール|[公式](https://puppet.com/ja)|

### Orchestration

|名前 |概要|参考リンク|
|:---|:---|:---|
|Capistrano|Ruby 製の自動デプロイ (& サーバー操作) ツールで複雑な Rails 製アプリケーションのデプロイ作業をコマンド数行でさくっと片付けられるようになる|[公式](https://capistranorb.com/)|
|AWS Elastic Beanstalk|Java、.NET、PHP、Node.js、Python、Ruby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginxなどの使い慣れたサーバーでデプロイおよびスケーリングするための、使いやすいサービス|[公式](https://aws.amazon.com/jp/elasticbeanstalk/)|
|Amazon Elastic Container Service|Docker コンテナアプリケーションを AWS で簡単に実行、スケール、保護し、コンテナとしてローカルでパッケージングされたアプリケーションは、Amazon ECS によって管理されるコンテナと同様にデプロイすることが可能|[公式](https://aws.amazon.com/jp/ecs/features/)|

## CI

以下は[Wiki](https://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A%E7%9A%84%E3%82%A4%E3%83%B3%E3%83%86%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)から引用。
> 継続的インテグレーション、CI（英: continuous integration）とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する[1]。特に、1990年代後半以降の開発においては、継続的インテグレーションをサポートするソフトウェアを使用する傾向が強まってきた。

簡単にまとめると開発や保守を円滑にすすめるための仕組みです。

| 名前 | 概要 | 詳しくは参考リンク|
|:--|:--|:--|
| Jenkins |ソフトウェアのビルド、検証、サーバへのインストール等の一連作業を自動化する事が出来るツール|[サルでもわかるJenkins入門〜自動テスト環境を構築しよう](https://ics.media/tutorial-jenkins)|
| Travis CI |GitHub上のソフトウェアのビルドやテストを行う、オンラインで分散型のサービス|[GitHubと連携できる継続的インテグレーションツール「Travis CI」入門](https://knowledge.sakura.ad.jp/3754/)|
| Bamboo |継続的インテグレーション、デプロイメント、デリバリーを行うプロフェッショナルチームに選ばれているツール|[公式](https://ja.atlassian.com/software/bamboo)|
| Circle CI |継続的インテグレーションツール「Jenkins」と同様な機能を提供し、ビルド/テスト/デプロイなどについて自動実行できるサービス|[【CircleCI】CircleCI 2.0からはじめる個人での簡単なCI導入方法 - githubとの連携まで](http://tweeeety.hateblo.jp/entry/2018/02/09/195345)|

## システム監視系

システムの運用に欠かせない監視系ツール、ログ収集、通知など様々なツールやサービスのご紹介です。

| 名前 | 概要 | 詳しくは参考リンク|
|:--|:--|:--|
| Munin | サーバーの稼働状況をグラフ表示するツール | [Muninでかんたんサーバー監視](https://knowledge.sakura.ad.jp/3669/) <br> [サーバー監視ツール Munin](https://qiita.com/bezeklik/items/c4863c4114e0c339412b) |
| Nagios | 指定されたサービスを監視し、有事の際にユーザーに通知するソフトウェア | [Nagiosの基礎](https://tech.pepabo.com/2013/11/30/nagios-learning/) <br> [今更だけど、 Nagios について知っておきたい5つのこと](https://techblog.gmo-ap.jp/2016/10/14/%E4%BB%8A%E6%9B%B4%E3%81%A0%E3%81%91%E3%81%A9%E3%80%81-nagios-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84-5-%E3%81%A4%E3%81%AE%E3%81%93%E3%81%A8/) |
| Zabbix | システム全体を監視することが可能なソフトウェア | [Zabbixとは？](https://www.miraclelinux.com/product-service/zabbix/overview/zabbix) <br> [統合監視ツール「Zabbix」によるサーバー監視](https://knowledge.sakura.ad.jp/585/) |
| Kibana | データを解析、可視化するツール | [Kibanaで簡単! サクサク ビジュアライズしよう！](https://qiita.com/kitfactory/items/9c2f990d87e33fab828a)|
| New Relic | ソフトウェアのパフォーマンス分析サービス | [New Relic の各製品紹介: New Relic ってアプリケーションパフォーマンス監視ツールじゃないの？](https://qiita.com/kumatronik/items/e2e09bd3708b00442d9b) <br> [パフォーマンス監視サービスのNew Relicが超便利な件](https://qiita.com/y_uuki/items/dd4fce78b1bc32b64600) |
| Ganglia | システム監視ツール | [Ganglia でエンタープライズ・クラスターを監視する](https://www.ibm.com/developerworks/jp/linux/library/l-ganglia-nagios-1/index.html) <br> [Gangliaでシステムモニタリング](https://www.agilegroup.co.jp/technote/ganglia-install.html) |
| RRDTool | データを格納し、それをグラフ化するツール | [RRDtool](https://qiita.com/rokuta96/items/7fa3b9a1bd8de11e3bc4) <br> [RRDtool x Grafana で可視化する](https://qiita.com/atfujiwara/items/8326560944bdb11ac6c8) |
| CloudForecast | RRDToolのラッパー的なツール | [CloudForecastっていうリソース監視のツール／フレームワーク作った](http://blog.nomadscafe.jp/2010/05/cloudforecast.html) <br> [リソースモニタリングツール「CloudForecast」入門](https://blog.riywo.com/2011/02/27/043646/) |
| PagerDuty | 様々な監視ツールからのアラート通知を集約して、様々なアクションを実行できるサービス | [PagerDutyを使ってみた](http://blog.serverworks.co.jp/tech/2015/10/13/start-pagerduty/) <br> [PagerDuty を使ってみる](https://qiita.com/saitotak/items/f215f89502c047d591fd) |
| Google Stackdriver | アラート通知や、指定したURLが外部からアクセスできるかどうか監視するサービス | [Stackdriverを触ってみた](http://blog.a-know.me/entry/2016/06/23/191821) <br> [GCP から AWS までモニタリングできる Google Stackdriver を紹介！](https://www.topgate.co.jp/gcp15-what-is-google-stackdriver) |
| Cacti | リソースを収集し、グラフなどを作成することができるツール | https://knowledge.sakura.ad.jp/618/ | https://centossrv.com/rrdtool-cacti.shtml |
| mackerel | 死活監視、パフォーマンスモニタリング、収集したメトリックのグラフ化などができるサービス | [mackerel](https://mackerel.io/ja/) <br> [サーバー監視サービス（Mackerel）](https://cloud.nifty.com/service/mackerel.htm) |
| sensu | Nagionsをよくしようとした、「Ruby」製のオープンソース監視プラットフォーム| [今、話題の監視ツール「Sensu」とは？――基本的な構成、監視の仕組みを理解する](http://www.atmarkit.co.jp/ait/articles/1702/21/news013.html) <br> [次世代監視ツール Sensu リファレンス](https://qiita.com/spesnova/items/f9a8c9661861cc453ead) |
| CloudWatch | AWSで実行されているアプリケーションをリアルタイムでモニタリングするサービス | [Amazon CloudWatch とは?](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) <br> [AWSの監視ツール「CloudWatch」で何ができるの？](https://www.bit-drive.ne.jp/managed-cloud/column/column_06.html) |
| Norikra | データの集計・検索・結合等などできるツール | [ログ解析にNorikraを使ってみた](http://hase.hateblo.jp/entry/2014/12/16/142250) <br> [Norikraの使い方をサンプルのクエリとイベントを交えて解説](http://oxynotes.com/?p=9863) |
| Fluentd | ログ収集管理ツール | [柔軟なログ収集を可能にする「fluentd」入門](https://knowledge.sakura.ad.jp/1336/) <br> [fluentd の基礎知識](https://abicky.net/2017/10/23/110103/) |
| Growth Forecast | Webサーバとして動作して、WebAPI経由で受け取ったデータを元にグラフ化をしてくれるツール | [GrowthForecastというグラフ表示ツールで捗る話](http://blog.nomadscafe.jp/2011/12/growthforecast.html) <br> [手軽にデータをグラフ化するGrowthForecastのインストールと使い方](http://oxynotes.com/?p=7584) |
| consul-alerts | health checkの状態を監視し問題があれば通知するツール | [consul & consul-alerts を使った監視システム ](https://www.slideshare.net/rrreeeyyy117/consul-andalertsmonitoring) |
| Xymon | ネットワーク監視ソフトウェア | [Xymon Tips and Tricks](https://www.skyhobbit.co.jp/xymon/index_c2_s7.html) <br> [Xymon（シモン or サイモン）とは？](https://www.server-kanshi.net/) |
| Sentry | アプリケーションからイベントログを送信して、それを表示してくれるツール | [イベントログ収集ツールの Sentry が凄そう](http://d.hatena.ne.jp/heavenshell/20130325/1364224078) <br> [RailsアプリケーションにSentryを導入する](https://qiita.com/mikaji/items/74fac3be5e1235e0b762) |
| Prometheus | 監視対象にアクセスしてデータを収集するツール | [次世代監視の大本命！ Prometheus を実運用してみた](https://qiita.com/sugitak/items/ff8f5ad845283c5915d2) <br> [Prometheusでのさまざまな監視データ取得法](https://knowledge.sakura.ad.jp/12057/) |

## おわりに
こうしてまとめてみると本当にさまざまなサービスやツールが存在しますよね。
全てを勉強している暇はないので自身の環境に合わせたものを取捨選択する必要があります。
効率的にシステムやアプリケーションを構築して、安全に運用して行きましょう!