ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

ブログサイトの構築

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

 

 

 

 

本日のやりたいこと

今回はAmazonEC2のインスタンス上にブログサイトを構築します。

ブログサイトには「wordpress」というブログ用のソフトウェアを使用します。

使用する環境

qiita.com

 

 

構築の流れ

以下の手順で構築を行います。

----------------------------------------------------------

Apache をインストールする

PHPをインストールする

MariaDBをインストールする

④phpMyAdominをインストールする

WordPressをインストールする

⑥データベースのセットアップ

WordPressの設定

-----------------------------------------------------------

いざ構築!!

Apache をインストールする

rootユーザになる

sudo su -

httpdをインストール

yum install httpd

(yを押下)

Apache自動起動をオンにしてApacheを起動

systemctl enable httpd
systemctl start httpd

 

PHPをインストールする

PHPをインストール

amazon-linux-extras enable php7.3
yum install php php-gd php-mysqlnd php-xmlrpc -y

→Conplete! でインストール完了!

※バージョンは最新のものに適宜置き換えてください。

MariaDBをインストールする

MariaDBをインストール

 yum install mariadb mariadb-server -y

MariaDB自動起動をオンにしMariaDBを起動

 systemctl enable mariadb
systemctl start mariadb

mysql_sequre_installationを実行

 mysql_secure_installation
⑴ Enter current password for root (enter for none):
  データベースのrootユーザのパスワードはまだ設定されてないので
  何も入力せずにenterを押す。
⑵ enter current password for root (enter for none):
  データベースの root ユーザーのパスワードをこれから設定したいので
'Y' と入力して Enter を押す。
⑶ Set root password? [Y/n]
  安全なパスワードを 2回入力
  New password:
  Re-enter new password:
  Password updated successfully!
⑷ 以下全部 Y を入力

 

④phpMyAdominをインストールする

※このphpMyAdminをダウンロードする工程は飛ばしても構築は可能です。

急ぎの方は⑤にお進みください。。。

 

phpMyAdminの関連パッケージをインストール

 yum install php-mbstring php-fpm -y

Apacheを再起動

 systemctl restart httpd

カレントディレクトリを/var/www/htmlに移動

 cd /var/www/html

phpMyAdminをダウンロード

 wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

phpMyAdminディレクトリを作成してphpMyAdmin パッケージを展開(解凍)し元のファイルを削除

 mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1

rm phpMyAdmin-latest-all-languages.tar.gz
:yを入力

ブラウザよりアクセス 

 <URL>

 http://[パブリックDNS]/phpMyAdmin

 

f:id:porain:20210810174300p:plainユーザ名 : root

パスワード: mysql_secure_installation で設定したパスワード

 

を入力して "実行" ボタンをクリック

これで、普通SQL文を書いて行うデータの登録や更新といった管理をGUIで感覚的に行うことができるようになります。今回はCUISQL文を書いてデータ登録等を行いますので使いません。

WordPressをインストールする

ホームディレクトリに戻る

cd
pwd

WordPress関連パッケージをダウンロードして展開(解凍)

 wget https://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz

⑥データベースのセットアップ

mysqlにログイン

 mysql -u root -p

mysql_sequre_installationにて設定したパスワードを入力

データベースのユーザーとパスワードを作成
CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';

※your_strong_passwordはご自身で考えたパスワードをご使用ください。

データベースを作成
CREATE DATABASE `wordpress-db`;

データベースに対して、さきほど作成した wordpress-user ユーザーの権限を追加

GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";

すべての変更を有効にするため、データベース権限をフラッシュ

FLUSH PRIVILEGES;

mysql クライアントを終了

Ctrl+DでExit

WordPressの設定

ホームディレクトリに戻る

 cd
pwd

WordPressの設定ファイルを変更する前にバックアップを作成

 cp wordpress/wp-config-sample.php wordpress/wp-config.php

設定ファイルを編集

 vi wordpress/wp-config.php
以下を変更
-----------------------------------------
define( 'DB_NAME', 'database_name_here' );

define( 'DB_NAME', 'wordpress-db' );
に変更
define( 'DB_USER', 'username_here' );

define( 'DB_USER', 'wordpress-user');
に変更
define( 'DB_PASSWORD', 'password_here' );

define( 'DB_PASSWORD', 'your_strong_password');
に変更
--------------------------------------------

 ※your_strong_passwordはご自身で設定したパスワード。

Wordpressファイルの配置

Wordpressディレクトリを/var/ww/html/blog/ディレクトリにコピー

 mkdir /var/www/html/blog
cp -r wordpress/* /var/www/html/blog/

httpd.confのバックアップを作成し、#を排除

cd /etc/httpd/conf
mv httpd.conf httpd.conf.org
grep -v -e '^#' -e ' #' httpd.conf.org > httpd.conf

ホームディレクトリに戻る

cd
pwd

httpd.confを修正

vi /etc/httpd/conf/httpd.conf
以下を変更
-----------------------------------------
<Directory "/var/www/html">
 Options Indexes FollowSymLinks

 AllowOverride None AllowOverride All

 Require all granted
</Directory>
-----------------------------------------

Apacheによるファイル書き込みの許可

 sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;

Apacheの再起動

 sudo systemctl restart httpd
ブラウザよりWordPressをインストール

<URL>
http://[パブリックDNS]/blog/wp-admin/install.php

 

<補足>

#エラーが発生する場合

<URL>

http://[パブリックDNS]/blog/wp-admin/install.php

を表示しようとしてもエラーが出る場合は、⑦の設定ファイルに誤りがある可能性があるので確認してみてください。

もし、誤りがみつかった場合は変更を保存した後に以下コマンドより、⑦で行ったコピー元にも反映させてください。

cp wordpress/wp-config.php /var/www/html/blog/wp-config.php

yを押下でコピーを承諾

 

以上

EC2でknowledgeアプリを構築する ②

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

前回の記事:

porain.hatenablog.com

javaアプリの配備

配備場所のディレクトリ作成

cd /usr/local/tomcat/webapps
mkdir knowledge
cd knowledge/

アプリケーションのダウンロード

wget https://github.com/support-project/knowledge/releases/download/v1.13.1/knowledge.war

ダウンロードしたファイルの解凍

jar xf knowledge.war

不要ファイルの削除

rm knowledge.war

アプリケーションの権限変更

cd ../
chown -R tomcat:tomcat knowledge

Tomcatの再起動

systemctl restart tomcat

http://グローバルIP/knowledge/open.knowledge/list

 

PostgreSQLの構築

yumでインストール

yum install postgresql-server postgresql-devel postgresql-contrib

postgresql-setup initdb

接続許可設定

vi /var/lib/pgsql/data/pg_hba.conf
下記のident部分をtrustに書き換える
--------------------------------------
local all all ident
host all all 127.0.0.1/32 ident
↓↓
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
--------------------------------------

自動有効化と起動

systemctl enable postgresql.service
systemctl start postgresql.service

ユーザー、DB、作成

su - postgres
psql


ユーザ作成

CREATE ROLE knowledge_user LOGIN PASSWORD 'knowledge_user';

権限付与

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO knowledge_user;

データベース作成

CREATE DATABASE knowledge_db OWNER knowledge_user;

psqlから抜ける

\q

\は¥に置き換えてください。

動作確認

アクセス

http://グローバルIP:8080/knowledge

EC2でknowledgeアプリを構築する ①

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

 

 

 

 

本日のゴール

本日する作業のイメージ図です。

f:id:porain:20210729175645p:plain

イメージ

サーバにログイン/rootにスイッチ

rootユーザになる。

sudo su -

/optに移動。

cd /opt

JDKインストール

JDKをダウンロードする

wget https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.tar.gz

※バージョンは最新のものに置き換えてください。

解凍する

tar zxf amazon-corretto-8-x64-linux-jdk.tar.gz

javaへのパスが通るようにする

vi /root/.bash_profile
以下のように変更
--------------------ここから------------------------------
変更前
PATH=$PATH:$HOME/bin
変更後
PATH=$PATH:$HOME/bin:/opt/amazon-corretto-8.302.08.1-linux-x64/bin
--------------------ここまで------------------------------

バージョンは最新のものに置き換えてください。(ls で確認)

修正したbash_profileをソースコマンドで再読み込みする

. /root/.bash_profile

Tomcatインストール

javaバージョン

java -version

-bash: java: command not foundと表示される場合、Javaが入っていないのでダウンロードする

yum install -y java-1.8.0-openjdk-devel.x86_64

バージョンは最新のものに置き換えてください。

tomcatユーザを追加する

useradd -s /sbin/nologin tomcat

Tomcatをダウンロードする

wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.tar.gz

解凍する

tar zxf apache-tomcat-9.0.50.tar.gz
cd /usr/local
mv /opt/apache-tomcat-9.0.50 ./

所有者とグループをtomcatにする

chown -R tomcat:tomcat apache-tomcat-9.0.50

シンボリックリンクを張る

ln -s apache-tomcat-9.0.50 tomcat

この時点でllコマンドで以下のようになっていればOK!

total 0
drwxr-xr-x 9 tomcat tomcat 220 Jul 29 09:42 apache-tomcat-9.0.50
drwxr-xr-x 2 root root 6 Apr 9 2019 bin
drwxr-xr-x 2 root root 6 Apr 9 2019 etc
drwxr-xr-x 2 root root 6 Apr 9 2019 games
drwxr-xr-x 2 root root 6 Apr 9 2019 include
drwxr-xr-x 2 root root 6 Apr 9 2019 lib
drwxr-xr-x 2 root root 6 Apr 9 2019 lib64
drwxr-xr-x 2 root root 6 Apr 9 2019 libexec
drwxr-xr-x 2 root root 6 Apr 9 2019 sbin
drwxr-xr-x 5 root root 49 Jul 6 17:24 share
drwxr-xr-x 2 root root 6 Apr 9 2019 src
lrwxrwxrwx 1 root root 20 Jul 29 09:42 tomcat -> apache-tomcat-9.0.50

setenvを新規作成する

vi /usr/local/tomcat/bin/setenv.sh
---ここから--------------------------------------
#!/bin/sh
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/opt/amazon-corretto-8.302.08.1-linux-x64
JAVA_OPTS="-Xms128m -Xmx512m"
---ここまで--------------------------------------

バージョンは最新のものに置き換えてください。

server.xmlを設定する

vi /usr/local/tomcat/conf/server.xml
以下のように変更。(コマンドモードで/unpackで検索できます。)
--------------------------------------------
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
          ↓↓
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false">
--------------------------------------------

tomcat.serviceのパーミッションを変更する

vi /etc/systemd/system/tomcat.service
-----ここから-----------------------------
[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReStart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target
------ここまで----------------------------

パーミッションを変更

chmod 755 /etc/systemd/system/tomcat.service

自動起動を有効化して、tomcatを起動する。

systemctl enable tomcat
systemctl start tomcat

Apacheのインストール

yumhttpdをインストール

yum install  -y httpd

デフォルト設定をorgで保存し、コメントアウト行を削除する

cd /etc/httpd/conf
mv httpd.conf httpd.conf.org
grep -v -e '^#' -e ' #' httpd.conf.org > httpd.conf

※「'     #'」の間にあるのは、半角スペース4つ

proxy設定を追記

vi httpd.conf
一番下に下記を追記
---ここから--------------------------------------
ProxyRequests Off
ProxyPass /knowledge http://127.0.0.1:8080/knowledge
---ここまで--------------------------------------

自動起動を有効化して、httpdを起動する。

systemctl enable httpd
systemctl start httpd

アクセス

http://グローバルIP

以上で、アプリケーションサーバの起動が完了致しました。

長くなりましたので次回の記事で

Javaアプリケーションの配置、SQLの配置を行います!!

 

以下、次回記事のリンク

porain.hatenablog.com

 

 

Apache

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

 ↓↓前回の記事↓↓

porain.hatenablog.com

 

 

 

Apache

Apacheとは

Apache HTTP Serverは、Apache Software Foundationで開発された強力な商用オープンソースWebサーバです。

現在のネットワーク環境の確認

 

想定環境

想定環境

Apacheのセットアップ

 パッケージの入手とインストール

LinuxhttpdRPMパッケージがインストールされているかどうかを確認し、インストールされていない場合、”httpd”をインストールします。

yum list installed httpd
yum install httpd

Apacheの起動

Apacheの起動
systemctl start httpd
動作確認

Apacheのサーバプロセスが動作しているか確認します。

ps -efH | grep httpd

以下のコマンドでTCPポート80番Apacheが受付しているかどうか確認します。

netstat -anp | grep httpd
Apacheテストページの表示確認

Windowsのブラウザ(chrome,safari等)を起動して、以下URLを入力します。

http://グローバルIPアドレス//
ログの確認

tailコマンドを実行しログの内容を確認します。

tail /var/log/httpd/access_log
tail /var/log/httpd/error_log

自動起動設定

linux起動時に自動的にApacheが起動するようになっているか以下コマンドで確認します。

chkconfig --list httpd

以下コマンドで自動起動をオンにします。

systemctl enable httpd

Apacheの基本設定

メイン設定ファイルの書式

Apacheのメイン設定ファイルは、/etc/httod/conf/httpd.confとなります。このファイルを編集することで、Apacheの動作を様々に変更することができます。

Apacheの基本ディレクティブ

wwwサーバ管理者のメールアドレス設定(ServerAdmin)

Apacheの設定ファイル/etc/httpd/conf/httod.confをviで開き、以下のServerAdminディレクティブの設定行に移動します。

vi /etc/httpd/conf/httpd.conf
ServerAdminディレクティブの書式
ServerAdmin 管理者のメールアドレス
DocumentRootディレクティブの書式
DocumentRoot ディレクトリパス

デフォルトの設定では、ドキュメントルートは、”var/www/htmlディレクトリになっています。ブラウザから以下のような」要求を送信した場合、wwwサーバは ”/var/www/html/index.html"ファイルをブラウザが要求してきたものとして処理します。

テストファイルによる確認

ドキュメントルート直下にtest.htmlファイルを作成して、ブラウザから以下URLで作成したページの内容が表示されるかどうか確認します。

まず、"vi"コマンドを用いて、test.htmlファイルの新規作成を行います。

vi /var/www/html/test.html
-----------------------------------------------------------------
This is test page.
-----------------------------------------------------------------

テスト用のURLが完了したら、ブラウザのアドレス欄に以下のURLを入力し、テストページが表示されるかどうか確認します。

http://グローバルIPアドレス/test.html

 

AWS ~仮想サーバー/インスタンス編~

はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

7月からインフラエンジニアとしての人生をスタートさせた私ですが、自己学習環境が欲しい!!となりましたので、Amazon EC2を使用することにしました。

インフラの学習環境を整えるには、サーバ本体を買って......ネットワークを構築して.......その他もろもろ設定してうわあああ大変だあ.......ってイメージだったんですが、インターネットで手順を覚えれば簡単にしかも無料でできる(AWSアカウント登録から1年間)と知って驚きました。

そんなAWSを利用したインフラの学習環境の整え方について紹介していきたいと思います。

 

<前回の記事>

porain.hatenablog.com

<参考>

AmazonのAWS EC2とは?はじめての人向けに解説|TECH PLAY Magazine [テックプレイマガジン]

Amazon EC2とは何か?「インスタンス」など関連用語もまとめて解説【保存版】 連載:やさしく学ぶAWS入門|ビジネス+IT

 

 

 

Amazon EC2とは

Amazon EC2Amazon Elastic Cloud)はLinuxWindows等の仮想サーバを作成できるサービスです。利用者は数分でサーバを作成でき、作成後のマシンスペック変更や削除も簡単に実行できます。サービスの利用方法は課金制であり、サーバ上で稼働しているアプリケーションが高負荷となりCPUやメモリが不足した場合は、インスタンスタイプを変更することでスペックの増強が可能です。またデータ量が多くなってディスク容量が不足になった場合もすぐに拡張が可能です。

個人的には手軽にすぐ使えることが一番のメリットかなと思います。(使い始めて3日目で何言うてるねん)orz

使用方法

前提条件:AWSのユーザ登録をしている

AWSのホームページにログインする

【公式】クラウドならアマゾン ウェブ サービス (AWS)

※上のリンクからログインできます。

仮想マシンの起動

左上のサービスを選択

f:id:porain:20210727183407j:plain

aws1

すべてのサービス→コンピューティング→EC2をクリック

(☆をクリックするとお気に入りにすることができて便利です。)

f:id:porain:20210727183522j:plain

aws2

 インスタンス起動 → インスタンス起動

ステップ1:Amazonマシンイメージ(AMI)

無料利用枠はWindowsRedHat,SUSE Linux,Ubuntuなど様々ありますが今回はAmazon Linux 2 AMI (HVM), SSD Volume Type を選択します。

 

f:id:porain:20210727200704j:plain

ステップ2:インスタンスタイプを選択

ここでは使用するアプリケーションに合わせて適切なリソースの組み合わせを選ぶことができます。インスタンスタイプによってさまざまなCPU、メモリ、ストレージ、ネットワークパフォーマンスの組み合わせがあります。

今回は無料で利用できるインスタンスタイプ:t2.microを選択します。

 

f:id:porain:20210727200722j:plain

ステップ3:インスタンスの詳細設定

要件に合わせてインスタンスを設定します。

今回は学習環境を整えるのみなので何も変更せずに次のステップへ進みます。

 

f:id:porain:20210727200731j:plain

ステップ4:ストレージの追加

インスタンスに追加の EBS ボリュームやインスタンスストアボリュームをアタッチするか、ルートボリュームの設定を編集することができます。

こちらも何も変更せずに次のステップへ進みます。

 

f:id:porain:20210727200746j:plain

ステップ5:タグの追加

タグを定義することでルールを追加することができます。

今回はキー:Name と 値:test というタグを追加します。

f:id:porain:20210727200805j:plain

タグについてはこちらのサイトで詳しく書かれていたので是非ご覧ください。

(丸投げ)

dev.classmethod.jp

ステップ6:セキュリティグループの設定

AWSにおけるファイアウォール環境の設定です。学習環境のため、SSH、HTTP、HTTPSの通信のみ許可します。

f:id:porain:20210727200854j:plain

以下のように設定

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 マイIP
HTTP TCP 80 任意の場所
HTTPS TCP 443 任意の場所

 

セキュリティグループについてはこちらのサイトで詳しく書かれていたので是非ご覧ください。(丸投げ)

avinton.com

※ちなみに説明に日本語が入っている場合、以下のエラーが発生。

Invalid rule description. Valid descriptions are strings less than 256 characters from the following set: a-zA-Z0-9. _-:/()#,@[]+=&;{}!$*

 

ステップ7:インスタンス作成の確認

内容に間違いがないことを確認し、起動をクリック。

 

f:id:porain:20210727200816j:plain

すると以下の画面が出てきます。

f:id:porain:20210727200828j:plain

これはSSH接続をするためのキー(鍵)です。こちらを使ってTera Termにて接続を行うため、ダウンロードした場所が分からないってことがないように気を付けてください。

キーペア名の下に好きな名前を入力し、キーペアのダウンロードをクリック。

そして、インスタンスの作成をクリック。

f:id:porain:20210727200839j:plain

                                   以上

 

システム管理2

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

 

 

 

LVM

 論理ボリュームマネージャ(logical volume manager, LVM)は、「物理ボリューム」を提供するハードディスクなどのデバイスに直接ファイルシステムを作成するのではなく、一旦「論理ボリューム」と呼ばれる仮想化されたボリュームに束ねて利用するためのシステムです。これにより、動的かつ自在にディスクのパーミッションを変更できるようになります。

LVMイメージ

LVMイメージ
LVMを利用する流れ
  1. ハードディスクに物理ボリューム(PV)を作成する
  2. PVを束ねてボリュームグループ(VG)を作成する
  3. VGから論理ボリューム(LV)を好きな容量だけ切り出す
  4. LVにファイルシステムを作成して、マウントして使う

logrotate

logrotateとは

ログファイルの扱いはシステム管理の中でも重要な1つです。「ログファイル」とは、システムログ、Apacheアクセスログ、Cronのログ、ログイン情報(secure)などがあります。日ごろからそれぞれのログファイル容量が肥大化しすぎないように管理が必要です。Linuxディストリビューションのほとんどには「logrotate」と呼ばれるログを自動化に回すツールがインストールされています。logrotateのメリットとしては容量の肥大化を回避させることにあります。

logrotateの仕組み

logrotate自体の実行スケジュールはCronで設定されています。どのようにログのローテーションが行われるのかは、cronデーモン設定を確認すれば分かります。

cat /etc/cron.daily/logrotate

ファイル内容より「usr/sbin/logrotate」バイナリが「etc/logrotate.conf」設定ファイルに沿って実行されることを意味しています。

cat /etc/logrotate.conf

-----------------------------------------------------------------
# see "man logrotate" for details
# rotate log files weeklf
weekly

# keep 4 weeks worth of backlogs
rotate 50
mail root

# send errors to root
erroors root

# create new(empty)log filef after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
-----------------------------------------------------------------

「etc/logrotate.conf」ファイル内にそれぞれのログファイルの設定を記述することもできますが、サービスごとに設定ファイルを分けた方が分かりやすいとの判断から、標準設定ではetc/logrotate.dディレクトリ下を参照するようになっています。

例えば、Apacheyumでインストールすると、自動的にこのディレクトリの配下にログローテーションの設定が記載されたファイルが作成されます。では、システムログ(syslog)の設定内容をみてみましょう。

cat /etc/logrotate.d/syslog

/var/log/messages {
rotate 50
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}

各サービスで個別にセットした設定の方が、logrotate.conf内の全体設定よりも優先されます。

時刻合わせ

 時計合わせとは

linuxシステムの時刻がズレている場合、アクセスログやシステムログの時刻もずれてしまう事になりトラブルシューティングなどの際に困ることになります。そこでlinuxにはntpdやchronydというNTPを利用した時刻合わせ専用のデーモンがインストールされます。

NTP

NTPとは「Network Time Protocol」の略で、簡単に言えば、ネットワーク上で時間を同期するプロトコルのことです。NTPにはNTPサーバから取得した時刻値、そのNTPサーバからLinuxに時刻値が到達するまでの通信時間の補正も含まれており、最も妥当だと思われる時刻同期ができるようになっています。

  • クライアントがクエリを発信した時刻
  • サーバがクエリを受信した時刻
  • サーバが応答を発信した時刻
  • クライアントが応答を受信した時刻
NTPの仕組み

NTPサーバは階層構造で管理され、NTP自体の階層はストラタムと呼ばれ、ストラタムは1から16まで存在する。数字が小さいほど、正確な時刻を刻んでおり、また存在するサーバ数も少なくなります。

NTPの仕組み

Linuxではntpdateコマンドを使って、NTPサーバから正確な時刻を取得できます

ntpdate NTP サーバ名

現在時刻を確認するにはdateコマンドを利用します。

date
時刻修正について

サーバを運用する段階で、そのサーバの時刻が大きく狂ってしまったとして、その場合にいきなり、NTPサーバとの正確な時間に同期させていけません。時刻を即座に正しい時刻に合わせるモードを「stepモード」、徐々に時刻を合わせるモードを「slewモード」と言います。

NTPサーバ負荷

NTPクライアントから時刻同期をおこなう場合は、なるべくストラタムの番号の大きなサーバを指定して同期しましょう。もし、NTPクライアント全てがストラタム1サーバと同期した場合、その時刻サーバはトラフィック負荷に耐え切れず、時刻が狂ってしまう可能性すらあります。NTPクライアントが多いようであれば、組織内に自前でNTPサーバを用意してもいいです!

syslog

syslogとは

syslogとはlinuxシステムやプロセスから出てくるアラートなどの情報を、ネットワークで転送したり、ログとしてファイルに保存していくクライアント/サーバ型の仕組みのことです。syslogメッセージはUDPまたはTCPポート番号の514を使用してsyslogサーバに送信されます。ApacheMySQLなど、独自のログディレクトリを持つアプリケーションの多くは、独自の方法でログを記録しています。一方、syslogは独自のログ出力方法を持たない、非常に多くのアプリケーションが利用しています。syslogを利用して出力されたログメッセージが記録されるログファイルは、”/var/log/boot.log”,"/var/log/cron","/var/log/messages","/var/log/secure","var/log/spool"などですが、特定のアプリケーションを除き、多くのアプリケーションのログメッセージはデフォルトで"/var/log/messages"に記録されます。

ファシリティ

ファシリティは「ログ種別」のことです。ファシリティのは様々な種類がありますが、Linuxでは「*」を使用することで全ファシリティを選択できます。

プライオリティ

プライオリティはメッセージの優先度を表します。

アクション

アクションではメッセージの出力先を指定します。ログファイルに保存したい場合、ファイル名をフルパスで指定します。ユーザ名を指定した場合はそのユーザの端末にメッセージが出力されることになります。

syslogの設定

syslogは、/etc/syslog.confファイルで設定をします。

・crit,alert,emergレベルのメール関連ログを、/var/log/mailファイルに記録

mail.crit /var/log/mail

・メールのログを出力しない

mail.none

カーネルに関する全てのメッセージを、/var/log/kernelに出力

kern.* /var/log/kernel

・緊急メッセージは全てのユーザが受け取る

*.emerg *

loggerコマンドを使って、任意のファシリティ、プライオリティに対して任意のメッセージを出力することができますので、設定の確認に便利です。

logger -t test -p local0.info "syslog messages"
tオプション: タグを付与する
pオプション: ファシリティとプライオリティを定義する

                                                                                                                         以上

システム管理

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

 <参考>

ブートの仕組み

systemdによるCentOS 7の管理 | Think IT(シンクイット)

ブートシーケンス

 サーバの電源投入から起動までの流れをブートシーケンスと呼び、CentOS6とCentOS7ではブートシーケンスに若干の違いがあります。

 

ブートシーケンス

BIOSUEFI

PCの電源ボタンが押されると、CPUはマザーボード上に実装された「BIOS」もしくはUEFIというソフトウェアを実行して周辺機器の初期化を行います。その後、起動ドライブを探し、その条件に従い起動ドライブのブートローダを起動します。

※現在の主流はUEFI

ブートローダ

ブートローダにはいくつか種類がありますがlinuxではGRUBが主流となっています。役割はLinuxカーネルをメモリ上にコピーすることです。

Linuxカーネル

Linuxカーネルが立ち上がると、sysvinit/Upstart/systemd システムが起動されます。

systemd

systemdは従来のinit/Upstartの代替であり、非常に高速なシステム起動・終了や様々なシステム管理機能の提供してくれます。

sysvinitとsystemdの対応表

CentOS 6系のserviceコマンドやchkconfigコマンドとCentOS 7のsystemdの対応関係

CentOS 6系のserviceコマンドやchkconfigコマンドとCentOS 7のsystemdの対応関係

 

ディスク管理

 パーティション

パーティションとは、1つのハードディスクを複数の領域に分割して使用することを言います。分割して利用することでハードディスクの一部が物理的に壊れても影響を受けるのは1つのパーティーションになるのでリスクの分散を図ることができます。

マウント

ルートディレクトリから始まる階層構造のディレクトリに対して、枝を追加する工程のことをマウントと呼びます。言い換えるとパーティションディレクトリを結びつけるものですね!マウントするにはmountコマンドを使います、システムに関わるコマンドなので基本的にroot権限で実行します。「/etc/fstab」ファイルに記述すればOS起動時に自動的にマウントさせることも可能です。(マウントした枝を取り外すときは「unmount」コマンドを使用します。

 

ファイルシステムの種類

ファイルシステム

ファイルシステム記憶装置(ディスク)に記録されているデータを管理する方法を提供する機能です。

FAT/exFAT

FATは歴史が古く、Windowsの前身であるMS-DOSでも使用されていたファイルシステムです。exFATでは実質的に容量の制限がないため、FAT32よりも大きなデータを扱えるようになりました。(FAT32は2TBまでの領域しか扱えず1ファイルあたりの容量も4GB)

NTFS

NTFSWindowsで用いられるファイルシステムです。FATにはないアクセス制限や暗号化などの機能が追加されています。容量の制限が少なく、データ領域も破損しづらいと言われています。FATと異なり基本的にWindows専用ファイルシステムとなっておりほかのOSとデータのやり取りができません。

HFS/HFS+

HFSはMacOSで用いられるファイルシステムです。MacOS X 以降では機能が拡張されて、HFS+になりました。基本的にMacOS専用ファイルシステムのため、Windowsとの互換性がなくHFS+でフォーマットしたハードディスクをWindowsで読むことはできません。

ISO 9660

ISO 9660はCDやDVDなどの光学メディアで使用されるファイルシステムです。

ext/XFS

Linuxでは様々なファイルシステムが使用されていますが、その中でもextとXFSが有名です。extはext1/ext2/ext3/ext4などのバージョンがあり様々な機能追加が行われています。現在はext4が主流です。XFSも同様にLinuxで使用されてます。XFSはextより大規模データの扱いに適していると言われます。WindowsMacOSでは使用できません。そのため、LinuxベースのNASのハードディスクをパソコンに接続しても中身を読むことはできません。