（作成中）【nginx】webサーバ構築から管理までやってみる

#Centosを管理するときのポイント
####やりたいこと
参考URL：
https://www.rem-system.com/linux-first-setting/
https://www.atmarkit.co.jp/ait/articles/1612/01/news177.html
nginxとCentosの基本を抑えるように構築していく
※https://qiita.com/Mune_robo/items/5f07a0ebd842f8518d5a　こちらの記事でも以下を実施しています。


基礎を理解し、管理者を目指す

●ショートカットキー(ctrl+L,E,A)
●権限管理
●selinuxの無効化
●bash-completion パッケージの導入
●firewalldの停止とiptablesへの入れ替え
●ネットワークの設定
●iptablesでパケットフィルタの設定
●firewalldでパケットフィルタの設定
●不要サービスの無効化
●サーバーの時刻同期を設定する
●SSHサービスのセキュリティ設定
●suできるユーザーを制限する
●locateコマンドを利用できるようにする
●ロケールの設定
●パッケージのアップデート

【スピードマスター】
プロセス管理
ファイルシステムの管理
ファイルの管理
システムアーキテクチャ
シェル、スクリプト、SQLの基礎
xwindow
システムサービスの管理
ネットワーク基礎
セキュリティ
↓
https://www.atmarkit.co.jp/flinux/index/indexfiles/rootindex.html
パスワードの管理と運用を考える
LDAPによるパスワードの一元管理
システム管理の基礎 syslogdの設定をマスターしよう
サーバのログ監視ツールを使いこなそう
システム・バックアップを基礎の基礎から
LVMによる自動バックアップ・システムの構築
障害の兆候を見逃さないためのサーバ監視
MRTGによるサーバ監視システムの構築

【SoftwareDesign 2012/12】
Nginxの基本設定とセキュリティ
Proxyを構成し、Unicornと連携
NginxでWordpressを動かす
uWSGIを使ってMovableTypeを動かす

#権限管理
・起動したらまずは権限。2つしかないみたいだけど、GCPの権限の考え方とそう変わらないと思う。


nginxをしっかり運用していくためのtipsを記載します。
GCPのcompute engineに構築していきます。

nginxのバージョン
nginx -v
nginx version: nginx/1.14.1

nginxのインストール

htmlファイルが表示されるか確認
コンフィグファイルは以下。
/etc/nginx/nginx.conf

コンフィグファイルをlessで表示して、ルートディレクトリを確認
root	/usr/share/nginx/html

ここのディレクトリにあるhtmlファイルをデフォルトで表示していますということ

ここにhtmlファイルを格納し、ipアドレス/作成した.htmlとすると表示される。

参考URL
https://k-koh.hatenablog.com/entry/2019/11/08/100158
https://github.com/asashiho/mynavi-ml-visionapi
https://www.rem-system.com/linux-first-setting/
https://www.atmarkit.co.jp/ait/articles/1612/01/news177.html
https://www.rem-system.com/category/open-source/nginx/


#centosの権限をきちんと管理しよう

###ユーザーを作成する
Linuxではユーザーの権限として、操作が限定されている一般ユーザーとシステムに対して全ての操作権限をもつ管理ユーザーの(rootユーザーと呼ばれます。）2つがあります。

一般ユーザーはシステムに対して変更を行う権限を持たないため、システムの設定変更を行う場合には管理ユーザーに切り替える必要があります。通常の操作では操作ミスによるシステム障害を防止するために一般ユーザーを利用して、システムの設定変更を行うときだけrootユーザーへ切り替えを行います。

###まず、現状を確認
cat /etc/passwd
ユーザーアカウントがバレたらまずいので書きません。
でも、nginxをインストールするとデフォルトでnginxというユーザーができてます。

cat /etc/passwd|sed -e 's/:.*//g'
これだと、ユーザー名だけ表示される。

【 sed 】コマンド：文字列を置き換える／置換した行を出力する

###グループの確認
cat /etc/group

###ユーザーを作成する
useradd [username]
よく使うもの。

-d [dir] ログインディレクトリを設定
-g [gid] グループIDを設定
-m ホームディレクトリを作成
-u [uid] ユーザーIDを設定

passwd [username]
userdel [username]


###参考URL
https://qiita.com/pugiemonn/items/aca73990736f26c9cded
https://qiita.com/takech9203/items/b96eff5773ce9d9cc9b3
https://qiita.com/emowl/items/7dc09daa408907a3c6e5
https://qiita.com/araish/items/b6a408e09f34e0845db1

# bash-completionのインストール
tab補完できない場合があるので、上記をインストールする。

yum install bash-completion

以下のコマンドでインストール出来てるか確認
yum list installed | grep bash-completion

定義ファイルは以下
/etc/bash_completion.d/
/usr/share/bash-completion/completions/

ls /usr/share/bash-completion/completions/
でオプションの入力補完が可能なコマンドの一覧がみれる。

###（おまけ）独自で補完ツールを作る
https://takuya-1st.hatenablog.jp/entry/2016/02/10/175604
こんな感じで自分でツールも作れるみたいなので、時間があればやってみたい。


#起動中のサービス確認、不要なサービスの停止
サーバー上で常に起動し続けるプログラムのことを「サービス」または「デーモン」と呼びます。
サービスやデーモンは必要以上に起動しないことが重要です。
サーバーのメモリ使用量を抑えるためにも、不要なサービスは見直して停止させましょう。
サービス関連の設定には systemctl コマンドを利用します。

###一覧表示
systemctl list-unit-files
enable = 自動起動 ON, disable = 自動起動 OFF です。static や indirect は有効/無効にするようなサービスではなく、他のサービスとの依存関係によって起動する類です。indirect は static と異なり、さらに別のunit ファイルを呼び出します。
※依存関係については、以下のサイトで詳しく紹介されています
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/systemctl-list-dependencies/

###サービスの停止
systemctl disable＜サービス名＞

#サーバーの時刻同期を設定
サーバーの時刻を自動的に合わせるサービスであるchronydを設定していきます。

chronydサービスの設定は、/etc/chrony.confファイルを参照する。

以下のような記載が上部にあるのですが、これが参照しているサーバーです。
server 0.CentOS.pool.ntp.org iburst
server 1.CentOS.pool.ntp.org iburst
server 2.CentOS.pool.ntp.org iburst
server 3.CentOS.pool.ntp.org iburst

これをコメントアウトして、新しいサーバーを追加します。
今回は、ntp2.jst.mfeed.ad.jpを追加。

追加したら再起動
sudo systemctl restart chronyd

以下コマンドで確認
chronyc sources

###おまけ
GCEで上記の設定をやってみましたが、追加したサーバーに*がつかないので、GCEは外部のタイムサーバを参照できないみたい。

chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp2.jst.mfeed.ad.jp          2   6    17    15   -476us[ -486us] +/-   46ms
^* metadata.google.internal      2   6    17    15  -3516ns[  -14us] +/-  446us

#locateコマンドを利用できるようにする
私は、検索時にfindコマンドを利用していましたが、findはオプションの指定がやや分かりにくいところがあるみたいです。
locateコマンドが便利らしいですが、違いを確認したいところも有り、試してみました。
locateコマンドは指定したファイル名をもつファイルを全て抽出することが可能です。

事前にファイルとフォルダ名のデータベースを作成して、その中から検索を行いますので、リアルタイムではありませんが、高速にファイルが検索出来て、使い勝手が良いというメリットがあります。
ただ、DBが更新されていないと検索がヒットしないらしいです。

GCEで試してみるのですが、GCEで成約されることもないみたい。DBの連携とかどうなるのかも気になりました。

以下のコマンドを実行
yum -y install mlocate
 yum list installed | grep mlocate　インストール出来てるか確認

初回、直ぐに利用をする場合は、データベースを作成するためのコマンド”updatedb”を実行します
sudo updatedb
※sudo付けないとエラーになる。
※updatedbはcronで定期的に実行されるため、次回以降の実行は任意となります。

これで環境は整います。

locate .conf
とかで検索するとすぐに情報が出てきます。
findよりも結果の出力は早いように感じました。

#プロセス管理
https://www.atmarkit.co.jp/ait/articles/1603/28/news022.html

ps ax,pstree,ps -efなどでプロセスをすべて表示できます。
やってみるとsudoつけて打つと内容が変わります。

topコマンドはリアルタイムなプロセス管理が可能。更新間隔は-dをつけると変更可能。CPU使用率の高い順に表示されている。