Ubuntu 20.04でサーバー構築 7:Apacheドキュメントルートの変更

1.Apacheドキュメントルートの作成

増設したRAID1アレイを /contents としてマウントし、この中にApacheのドキュメントルートとするフォルダを作成します。

yuu@web2:/$ cd /contents/
yuu@web2:/contents$ sudo mkdir www
yuu@web2:/contents$ ls
lost+found www
yuu@web2:/contents$ sudo mkdir www/html
yuu@web2:/contents$ ls
lost+found www
yuu@web2:/contents$ ls ./www
html

2.テストファイルの準備

移動先のドキュメントルートに置く index.html ファイルを作成します。
echo でリダイレクトした処理はsudo を実行した一般ユーザー権限で実行されるため、直接 sudo echo ・・・としてもエラーになるのでteeを使います。

yuu@web2:/contents/www/html$ echo “Hello World!” | sudo tee index.html
[sudo] yuu のパスワード:
Hello World!

php の動作を確認するファイル、info.php を作成して以下のスクリプトを記述します。

<?php
phpinfo();

同様に、MySQLの動作を確認するファイルを作成します。

<?php
$user = “yuu”;
$password = “(パスワード)”;
$database = “network_items”;
$table = “item_list”;try {
$db = new PDO(“mysql:host=localhost;dbname=$database”, $user, $password);
echo “<h2>移送先ドキュメントルート表示テスト:テーブル item_list</h2><ol>”;echo “<h1>クエリ開始</h1><ol>”;foreach($db->query(“SELECT name FROM $table”) as $row) {
echo “<li>” . $row[‘name’] . “</li>”;
}echo “<h1>書き出し終了</h1><ol>”;

echo “</ol>”;
} catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “<br/>”;
die();
}

3.Apache2.conf の編集

/etc/Apache2/Apache2.conf を編集する前にバックアップを取っておきます。

yuu@web2:/etc/apache2$ sudo cp apache2.conf apache2.conf.bak

/etc/apache2/apache2.conf を編集します

yuu@web2:~$ sudo nano /etc/apache2/apache2.conf
# <Directory /var/www/>     ←コメントアウト
<Directory /contents/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

/etc/apache2/sites-available/000-default.conf を編集します。

yuu@web2:~$ sudo nano /etc/apache2/sites-available/000-default.conf
ServerAdmin webmaster@localhost
# DocumentRoot /var/www/html     ←コメントアウト
DocumentRoot /contents/www/html

変更した設定をApache2 に反映します。

yuu@web2:~$ sudo service apache2 reload

Windows PCのブラウザからサーバーPCにアクセスしてみます。変更したドキュメントルートのindex.html が表示されました。
同様にipアドレスの後ろに/info.php を付けてアクセスします。
ip アドレスの後ろに/item_list_new.php を付けてアクセスし、MySQLの動作を確認します。
以上でApacheのドキュメントルート変更と、LAMP スタックの動作確認が完了です。
/content はローカル環境にあるWindows PCからで使いやすいように/etc/samba/smb.conf を編集してsamba へ登録しておきます。

カテゴリー: サーバー | タグ: , , , , | コメントする

Ubuntu 20.04でサーバー構築 6:HDD2台をRAID1で増設

NASのHDDを容量の大きなHDDに換装したので2台の3TB HDDが余った。
DiskInfo で健康状態を確認してみる。特に問題なさそうで、使用時間もまだ1万時間にも届いていないので、準備中のUbuntu サーバーに実装してコンテンツ専用ドライブとして使うことにした。

2台のHDDをそれぞれドライブベイ2と4に取り付けてサーバーPCを起動。ドライブの認識を確認する。

yuu@web2:~$ ls -la /dev/sd*
brw-rw—- 1 root disk 8, 0 2月 11 18:20 /dev/sda
brw-rw—- 1 root disk 8, 1 2月 11 18:20 /dev/sda1
brw-rw—- 1 root disk 8, 2 2月 11 18:20 /dev/sda2
brw-rw—- 1 root disk 8, 16 2月 11 18:20 /dev/sdb
brw-rw—- 1 root disk 8, 17 2月 11 18:20 /dev/sdb1
brw-rw—- 1 root disk 8, 32 2月 11 18:20 /dev/sdc
brw-rw—- 1 root disk 8, 33 2月 11 18:20 /dev/sdc1
brw-rw—- 1 root disk 8, 34 2月 11 18:20 /dev/sdc2
brw-rw—- 1 root disk 8, 48 2月 11 18:20 /dev/sdd
brw-rw—- 1 root disk 8, 49 2月 11 18:20 /dev/sdd1

/dev/sdb と/dev/sdd が新しく追加したドライブ。
parted コマンドで/dev/sdb の全容量に対してRAID 用のパーティションを作成する。

yuu@web2:~$ sudo parted /dev/sdb
[sudo] yuu のパスワード:
GNU Parted 3.3
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには ‘help’ と入力してください。
(parted) unit GB
(parted) mklabel gpt
警告: いま存在している /dev/sdb のディスクラベルは破壊され、このディスクの全データが失われます。続行しますか?
はい(Y)/Yes/いいえ(N)/No? y
(parted) mkpart primary xfs 0% 100%
(parted) set 1 raid on
(parted) p
モデル: ATA WDC WD30EFRX-68E (scsi)
ディスク /dev/sdb: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 0.00GB 3001GB 3001GB xfs primary raid(parted) quit
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。yuu@web2:~$

/dev/sdd に対しても同様の処理を行う。
mdadm コマンドでRAID1 アレイを作成する。
–create /dev/md1 にはRAIDアレイの名前を指定する。md0は既にあるのでmd1。
–level=1       RAIDの種類はミラーリングのRAID1を指定する。
–raid-device=2 /dev/sdb1 /dev/sdd1  でRAID1を構成する2台のデバイスを指定。

yuu@web2:~$ sudo mdadm –create /dev/md1 –level=1 –raid-device=2 /dev/sdb1 /dev/sdd1
mdadm: partition table exists on /dev/sdb1
mdadm: partition table exists on /dev/sdb1 but will be lost or
meaningless after creating array
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store ‘/boot’ on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
–metadata=0.90
mdadm: partition table exists on /dev/sdd1
mdadm: partition table exists on /dev/sdd1 but will be lost or
meaningless after creating array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
yuu@web2:~$

コマンドが完了すると2台のデバイス間での同期が始まる。
次に作成したRAID1アレイをフォーマットする。

yuu@web2:~$ sudo mkfs.ext4 /dev/md1
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 732533248 4k blocks and 183140352 inodes
Filesystem UUID: be7b4534-682d-40f7-bc5e-63311a6f08cd
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

増設したドライブ、md1 が正常にRAID1として動作しているかどうかは以下のように確認できます。

yuu@web2:~$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1: active raid1 sdd1[1] sdb1[0]  ←sdd1とsdb1でRAID1アレイを構築
2930132992 blocks super 1.2 [2/2] [UU] ←2台のドライブ共に正常動作
bitmap: 0/22 pages [0KB], 65536KB chunkmd0 : active raid1 sda2[0] sdc2[1]
1952856064 blocks super 1.2 [2/2] [UU]
bitmap: 1/15 pages [4KB], 65536KB chunkunused devices: <none>

増設したRAID1アレイを使用できるようにマウントします。
始めにマウントするためのディレクトリを作り、そこにマウントします。
このドライブにはweb公開用のデータなどを入れる予定なので、ディレクトリ名は”contents”としました。

yuu@web2:~$ sudo mkdir /contents
yuu@web2:~$ sudo mount /dev/md1 /contents

マウントされていることを確認します。

yuu@web2:~$ sudo ls -la /
合計 4194392
drwxr-xr-x 21 root root 4096 2月 13 00:12 .
drwxr-xr-x 21 root root 4096 2月 13 00:12 ..
lrwxrwxrwx 1 root root 7 8月 1 2020 bin -> usr/bin
drwxr-xr-x 4 root root 4096 2月 6 05:17 boot
drwxr-xr-x 2 root root 4096 2月 5 22:10 cdrom
drwxr-xr-x 3 root root 4096 2月 12 14:55 contents
drwxr-xr-x 19 root root 4520 2月 11 20:09 dev
drwxr-xr-x 100 root root 4096 2月 12 15:11 etc
drwxr-xr-x 4 root root 4096 2月 9 22:29 home
lrwxrwxrwx 1 root root 7 8月 1 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 8月 1 2020 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 8月 1 2020 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 8月 1 2020 libx32 -> usr/libx32
drwx—— 2 root root 16384 2月 5 22:09 lost+found
drwxr-xr-x 2 root root 4096 8月 1 2020 media
drwxr-xr-x 2 root root 4096 8月 1 2020 mnt
drwxr-xr-x 2 root root 4096 8月 1 2020 opt
dr-xr-xr-x 180 root root 0 2月 11 18:20 proc
-rw-r–r– 1 root root 1391 2月 9 11:51 q
drwx—— 5 root root 4096 2月 11 09:16 root
drwxr-xr-x 32 root root 980 2月 12 14:15 run
lrwxrwxrwx 1 root root 8 8月 1 2020 sbin -> usr/sbin
drwxr-xr-x 6 root root 4096 2月 5 22:57 snap
drwxr-xr-x 2 root root 4096 8月 1 2020 srv
-rw——- 1 root root 4294967296 2月 5 22:23 swap.img
dr-xr-xr-x 13 root root 0 2月 11 18:20 sys
drwxrwxrwt 13 root root 4096 2月 13 00:09 tmp
drwxr-xr-x 14 root root 4096 8月 1 2020 usr
drwxr-xr-x 14 root root 4096 2月 10 10:26 var

/contents の中を確認します。

yuu@web2:~$ ls -la /contents
合計 24
drwxr-xr-x 3 root root 4096 2月 12 14:55 .
drwxr-xr-x 21 root root 4096 2月 13 00:12 ..
drwx—— 2 root root 16384 2月 12 14:55 lost+found

web公開用のコンテンツなどはこのドライブ置くことにします。

OS起動時に増設したRAIDドライブが自動的にマウントする設定をします。
HDDのUUIDを確認します。

yuu@web2:/$ sudo blkid /dev/md127
/dev/md1: UUID=”be7b4534-682d-40f7-bc5e-63311a6f08cd” TYPE=”ext4″

/etc/fstab を編集して以下の1行を書き加えます。各項目の間はTABで区切ります。

UUID=be7b4534-682d-40f7-bc5e-63311a6f08cd  /contents  ext4  defaults

保存終了してOSを再起動し、増設したドライブが自動でマウントされていることを確認します。

yuu@web2:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 7877580 0 7877580 0% /dev
tmpfs 1584304 2644 1581660 1% /run
/dev/md0 1921155304 7692188 1815803932 1% /
tmpfs 7921508 0 7921508 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 7921508 0 7921508 0% /sys/fs/cgroup
/dev/sda1 523248 7988 515260 2% /boot/efi
/dev/md1 2883089592 90164 2736476396 1% /contents
/dev/loop0 56832 56832 0 100% /snap/core18/1944
/dev/loop1 71680 71680 0 100% /snap/lxd/19188
/dev/loop2 73088 73088 0 100% /snap/lxd/16099
/dev/loop3 31872 31872 0 100% /snap/snapd/10707
/dev/loop4 56832 56832 0 100% /snap/core18/1988
/dev/loop5 31872 31872 0 100% /snap/snapd/11036
tmpfs 1584300 0 1584300 0% /run/user/1000
カテゴリー: サーバー | タグ: , , , , | コメントする

NETGEAR ReadyNAS102のHDD換装

もう7年以上もネットワークオーディオ、写真データ保存、その他データの保存に使用しているNETGEARのNAS、ReadyNAS102 のハードディスク容量が不足したので大きな容量のHDDに換装した。換装手順を忘れていてもたついたので備忘録として記録することにした。

ReadyNAS102は騒音が増えることも無く、ハードもトラブルフリーで全く問題ない。データ転送速度は遅いがミュージックサーバーとデータバックアップが主目的なので性能的に大きな不満は無く、今後も長く(壊れるまで)使う予定。換装するHDDは現状と同じWDのRED。容量は8TBに上げることにした。

ReadyNAS102はホットスワップに対応しているので、NAS の電源を落とさずに作業が出来る。最初に片側のHDDを8TBの物に差し替える。
フロントパネルはマグネットでしまっているだけなので開けるのは容易。
HDDの取り出しは各ドライブの下部にある四角い穴に指を入れて押し下げるとドライブ取り出しレーバーが起きるので、このレバーを更に上に上げるようにしてドライブを引き出す。この四角い穴の上部には樹脂成形で下向き三角表示があるが気が付きにくい。また、穴の奥に押し下げのストップスイッチがある。スイッチが左側にあるときはロックされていて、押し上げることが出来ないので、スイッチを右側にずらしてから操作する。

NAS から取り出したHDDはHDDをNAS に実装するためのフレームに取り付けられている。HDDをフレームから取り外すには、再度、HDD前面の四角い穴を同様に下方向に押し下げながらHDDを後方にずらして。樹脂製のサポートとHDDを金属のフレームから引き抜く。
HDDを交換後、逆の手順でHDDをフレームに取り付け、NAS 本体に挿入する。NAS への挿入後は取り出しレバーを押し下げて確実にロックする。

新しいHDDを装着するとドライブの同期が始まる。状況はReadyNAS の管理ソフト、RAIDar から確認できる。
片側の同期が完了した状態では容量の少ない方の3TBのRAID1として動作している。
最初のHDD同期の完了を確認後、もう片方のHDDも同様に8TBに入れ替える。
2本のHDD共に同期が完了。片側で約9時間を要した。
2台のHDD共に8TBとなったが、この時点でシステムの認識は換装前の3TB。
既存容量で2台のHDDの同期が完了すると、ドライブ容量、8TBが認識され、容量を拡大する為の再構築が始まる。20時間前後掛かるとの見込み。
再構築が完了すると8TBのRAID1として使用可能。

一連の作業におよそ3日間を要したが、作業方法は難しいことも無く完了。

カテゴリー: サーバー | タグ: , , , | コメントする

Ubuntu 20.04でサーバー構築 5:LAMPスタックの構築

注:DigitalOceanチュートリアルを参考にしています。

1.UFWを起動する

UFW のインストールを確認して有効化します。

yuu@web2:~$ sudo ufw status
状態: 非アクティブ
yuu@web2:~$ sudo apt install ufw
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
ufw はすでに最新バージョン (0.36-6) です。
ufw は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
yuu@web2:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
yuu@web2:~$

2.Apacheをインストールしてファイアウォールを設定

apt でApache2をインストールします。

yuu@web2:~$ sudo apt install apache2

インストールは特に問題なく終了します。
HTTPトラフィックを許可する為にファイアウォールを設定します。
UFW で利用可能なアプリケーションを確認します。

yuu@web2:~$ sudo ufw app list
利用可能なアプリケーション:
Apache
Apache Full
Apache Secure
OpenSSH
yuu@web2:~$

リストアップされている3種類のApache の意味は次の通りです。

  • Apache:ポート80(暗号化されていないwebトラフィック)のみを開く
  • Apache Full:ポート80(暗号化無し)とポート443(暗号化)の両方を開く
  • Apache Secure:ポート443(TLS/SSL 暗号化トラフィック)のみを開く

まだHTTPSのトラフィックを許可するTLS/SSL証明書が無いのでポート80での接続のみを許可します。

yuu@web2:~$ sudo ufw allow in “Apache”
ルールをアップデートしました
ルールをアップデートしました(v6)

変更を確認します。

yuu@web2:~$ sudo ufw status
状態: アクティブTo                       Action          From
—                         ——             —-
Apache               ALLOW      Anywhere
Apache (v6)      ALLOW      Anywhere (v6)

ポート80へのトラフィックはファイアウォールを通して許可されています。
Apacheが正常に動いていればwebブラウザでデフォルトのwebページを確認できます。

3.MySQLのインストール

apt でMySQLをインストールします。

yuu@web2:~$ sudo apt install mysql-server

MySQLにプリインストールされているセキュリティスクリプトを実行します。

yuu@web2:~$ sudo mysql_secure_installation

最初に、VALIDATE PASSWORD COMPONENT を使用するかどうかの質問がでます。
下記では使用しないように設定しています。

yuu@web2:~$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:
Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

他の質問には全て「Yes」としました。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.Normally, root should only be allowed to connect from
‘localhost’. This ensures that someone cannot guess at
the root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.By default, MySQL comes with a database named ‘test’ that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
– Dropping test database…
Success.- Removing privileges on test database…
Success.Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

MySQLのコンソールにログインできることを確認します。

yuu@web2:~$ sudo mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.23-0ubuntu0.20.04.1 (Ubuntu)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.mysql>

MySQLコンソールを終了します。

mysql> exit
Bye

以上でMySQL サーバーをインストール出来ました。

4.PHPのインストール

LAMPスタックでPHPはMySQLのデータからApache を通してダイナミックコンテンツを生成、表示する働きをします。
php 単体に加えて、PHPがMySQLと通信するためのモジュール(php-mysql)、及びApache がPHPファイルを処理するためのライブラリ(libapache2-mod-php)が必要です。これらのパッケージを一度にインストールします。

yuu@web2:~$ sudo apt install php libapache2-mod-php php-mysql

インストールが完了したらPHPのバージョンを確認します。

yuu@web2:~$ php -v
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

これでLAMPスタックが構築されているはずです。

5.Apache からPHP スクリプトの動作確認

PHPのスクリプトがApacheで動作するする事を確認します。
Apacheの公開ドキュメントルートディレクトリ、/var/www/html にPHPのテストファイルを作成します。

yuu@web2:~$ sudo nano /var/www/html/info.php

info.php に以下のスクリプトを記述してファイルを保存します。

<?php
phpinfo();

Windows PC のwebブラウザからサーバPCのipアドレスの後ろに/info.php を付けてアクセスします。次のような画面が表示されればPHPは正常に動作しています。
作成したinfo.php ではサーバーやPHPに関する詳細情報が確認できるので、セキュリティの為に確認が完了したらファイルを削除しておきます。

yuu@web2:~$ sudo rm /var/www/html/info.php

6.PHP とMySQL の接続確認

MySQL にテスト用のデータベースを作成し、PHPから接続してApache でwebに表示できる事を確認します。
MySQL に接続してテスト用のデータベース”network_items”を作成。

yuu@web2:~$ sudo mysql
[sudo] yuu のパスワード:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23-0ubuntu0.20.04.1 (Ubuntu)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.mysql> CREATE DATABASE network_items
-> ;
Query OK, 1 row affected (0.27 sec)

mysql> SHOW DATABASES;
+————————–+
| Database                         |
+————————–+
| information_schema   |
| mysql                              |
| network_items             |
| performance_schema |
| sys                                   |
+————————–+
5 rows in set (0.02 sec)

作成したデータベース”network_items”のユーザー登録をしてこのデータベースに対する完全な権限を付与します。

mysql> CREATE USER ‘yuu’@’%’ IDENTIFIED WITH mysql_native_password BY ‘(パスワードを記入)‘;
Query OK, 0 rows affected (0.33 sec)
mysql> GRANT ALL ON network_items.* TO ‘yuu’@’%’;
Query OK, 0 rows affected (0.24 sec)

“item_list” と言う名前でテスト用のテーブルを作成します。

mysql> CREATE TABLE network_items.item_list (
-> item_id INT AUTO_INCREMENT,
-> name VARCHAR(255),
-> PRIMARY KEY(item_id)
-> );
Query OK, 0 rows affected (0.98 sec)

作成したテーブルに適当な情報を入れて、出来上がったテーブルを確認します。

mysql> INSERT INTO network_items.item_list (name) VALUES (“JUPITER”);
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO network_items.item_list (name) VALUES (“MERCURY”);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO network_items.item_list (name) VALUES (“ReadyNAS”);
Query OK, 1 row affected (0.22 sec
)mysql> INSERT INTO network_items.item_list (name) VALUES (“N-70AE”);
Query OK, 1 row affected (0.18 sec)mysql> INSERT INTO network_items.item_list (name) VALUES (“web2”);
Query OK, 1 row affected (0.19 sec)

mysql> SELECT * FROM network_items.item_list;
+———-+—————–+
| item_id | name                |
+———-+—————–+
| 1              | JUPITER         |
| 2             | MERCURY      |
| 3             | ReadyNAS       |
| 4             | N-70AE            |
| 5             | web2                 |
+———+——————+
5 rows in set (0.00 sec)

MySQL のコンソールを終了します。

mysql> exit
Bye

次にitem_list の内容をweb に表示するためのテスト用スプリクトを/var/www/html に作成します。

yuu@web2:~$ sudo nano /var/www/html/item_list.php
<?php
$user = “yuu”;
$password = “(パスワードを記入)”;
$database = “network_items”;
$table = “item_list”;
try {
$db = new PDO(“mysql:host=localhost;dbname=$database”, $user, $password);
echo “<h2>表示テスト:テーブル item_list</h2><ol>”;
echo “<h1>クエリ開始</h1><ol>”;
foreach($db->query(“SELECT name FROM $table”) as $row) {
echo “<li>” . $row[‘name’] . “</li>”;
}

echo “<h1>書き出し終了</h1><ol>”;

echo “</ol>”;
}
catch (PDOException $e) {
print “Error!: ” . $e->getMessage() . “<br/>”;
die();
}

Windows PC のwebブラウザからサーバPCのipアドレスの後ろに/item_list.php を付けてアクセスします。次のような画面が表示されればPHPは正常に動作しています。

これでLAMPスタックが構築できました。

カテゴリー: サーバー | タグ: , , , , | コメントする

Ubuntu 20.04でサーバー構築 4:sambaのインストール

1.インストールとユーザー登録

家庭LANの中で、通常作業で使用するWindows PCとサーパートとの間でファイルをやりとりするに為にsambaをインストールします。

yuu@web2:~$ sudo apt install samba

sambaのインストールが完了したらsambaのユーザーを登録してパスワードを設定します。ユーザーは予めこのサーバーに登録されているユーザーである必要があります。

yuu@web2:~$ sudo pdbedit -a yuu
new password:
retype new password:

登録が完了すると登録ユーザー情報が表示されます。
サーバーを再起動してsambaの状態を確認します。

yuu@web2:~$ sudo service smbd status

インストールしたそのままで、boot時の自動起動が設定されているようです。
sambaのconfigファイルをデフォルトのままでもWindows PCからサーバーPC(WEB2)が見えるようになりました。まだ何も設定していないのでサーバーPC内のフォルダを見ることは出来ません。

2.共有フォルダーの作成

sambaでのファイル共有を一般に開放することは無いので必ずしも共有ディレクトリを作る必要は無いのですが、非公開ファイルとweb上に公開するファイルのやりとりを区別するために共有ファイルを作ります。
share フォルダは /home の下に作りました。
chmod コマンドで /home/share フォルダーのアクセス権限を変更します。

uu@web2:~$ sudo mkdir /home/share
yuu@web2:~$ sudo ls /home
share yuu
yuu@web2:~$ sudo chmod 777 /home/share
yuu@web2:~$ sudo ls -la /home
合計 16
drwxr-xr-x 4 root root 4096 2月 9 22:29 .
drwxr-xr-x 20 root root 4096 2月 9 11:51 ..
drwxrwxrwx 2 root root 4096 2月 9 22:29 share
drwxr-xr-x 4 yuu yuu 4096 2月 6 22:03 yuu
yuu@web2:~$

3.フォルダー共有の設定

(1)ネットワークインターフェイスの確認

yuu@web2:~$ sudo ip address show

サーバーに2つ有るLANポートの内、enp2s0f0 を使用しています。
ip アドレスは、192.168.11.65/24。
この情報を以下の設定で使用します。

(2)smb.conf の編集

yuu@web2:~$ sudo nano /etc/samba/smb.conf

(3)[global] セクションへの追記
文字化けを防ぐためにキャラクターセットを追加。
workgroupe 名はWindows PC からサーバーが見えているので取り合えず変更無し。

#====================== Global Settings =======================

[global]
dos charset = CP932   # 追記
unix charset = UTF-8   # 追記
## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = WORKGROUP

# server string is the equivalent of the NT Description field
server string = %h server (Samba, Ubuntu)

Networking の項目を以下のように編集する。

#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
; interfaces = 127.0.0.0/8 eth0
interfaces = 192.168.11.0/24 enp2s0f0 # 追記

(4)ホームディレクトリの設定
[homes]セクションのコメントアウトを解除して編集します。

# [homes]セクションのセミコロンを削除して有効化する
[homes]
comment = Home Directories # セミコロンを外す
# 次の行のセミコロンを外す
browseable = no# By default, the home directories are exported read-only. Change the
# next parameter to ‘no’ if you want to be able to write to them.
; read only = yes# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
; create mask = 0700
create mask = 0755    # 追記# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.

; directory mask = 0700
directory mask = 0755    # 追記

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only “username”
# can connect to \\server\username
# This might need tweaking when using external authentication schemes
valid users = %S    # セミコロンを外す

(5)共有ディレクトリの設定
smb.conf ファイルの末尾に共有ディレクトリの設定セクションを追記します。

[share]
path = /home/share
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777

(6)設定の有効化
編集した smb.conf を保存終了してsamba を再起動。
正常に起動していることを確認します。smb.conf に構文間違いがあるとエラーになって再起動が失敗します。

yuu@web2:~$ sudo systemctl restart smbd nmbd
yuu@web2:~$ sudo service smbd status

(7)ファイアウォール(ufw)の設定
ufw を利用可能なアプリケーションを確認します。

yuu@web2:~$ sudo ufw app list
[sudo] yuu のパスワード:
利用可能なアプリケーション:
Apache
Apache Full
Apache Secure
OpenSSH
Samba

samba の利用を登録します。

yuu@web2:~$ sudo ufw allow in “Samba”
ルールを追加しました
ルールを追加しました (v6)

ufw への登録を確認します。

yuu@web2:~$ sudo ufw status
状態: アクティブTo Action From
— —— —-
Apache ALLOW Anywhere
OpenSSH ALLOW Anywhere
Samba ALLOW Anywhere
Apache (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Samba (v6) ALLOW Anywhere (v6)

(8)Windows PCからの共有接続確認
Windows PC のエクスプローラからネットワークを確認すると、サーバーPCとその下のshare フォルダーが見えます。この段階でshare フォルダーには読書可能です。
自分のホームディレクトリを共有するにはログインが必要です。
エクスプローラから、\\サーバー名\ユーザ名 でログインします。
ログインすると、サーバーPCの下に、ユーザーディレクトリが現れ、読書可能になります。

(9)Ubuntu起動時の自動実行設定
OSを再起動したときにsambaを自動実行するように設定します。

yuu@web2:~$ sudo systemctl enable smbd nmbd
Synchronizing state of smbd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable smbd
Synchronizing state of nmbd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nmbd

 

カテゴリー: サーバー | タグ: , , | コメントする

Ubuntu 20.04でサーバー構築 3:インストール後の初期設定

1.パッケージのアップデート

Windows PC からsshでログイン後、パッケージのアップデートを行う。

yuu@web2:~$ sudo apt update
(中略)
yuu@web2:~$ sudo apt upgrade

2.localeの設定

language-pack-ja のインストール。

yuu@web2:~$ sudo apt-get install language-pack-ja

locale に ja_JP.UTF-8 を設定。

yuu@web2:~$ sudo update-locale LANG=ja_JP.UTF-8

確認する。

yuu@web2:~$ sudo cat /etc/default/locale
LANG=ja_JP.UTF-8

 

3.タイムゾーンの設定

dpkg-reconfigure tzdata コマンドを実⾏してインタラクティブウィンドウからtimezone を選択、設定する。

yuu@web2:~$ sudo dpkg-reconfigure tzdata

地域はAsia を選択してTABキーで<Ok>をハイライトしてEnter。
都市名は”Hong Kong” を選択。(実際は中華人民共和国広州市在住)
同様に<Ok>をハイライトしてEnterで設定完了。
コマンドラインに設定されたデフォルトのタイムゾーンと現在時刻が表示されルので確認する。

Current default time zone: ‘Asia/Hong_Kong’
Local time is now: Tue Feb 9 10:17:46 HKT 2021.
Universal Time is now: Tue Feb 9 02:17:46 UTC 2021.

4.時刻の設定

ntp のインストール。

yuu@web2:~$ sudo apt-get install ntp

時刻を取得するサーバーを設定するために ntp を停止する。

yuu@web2:~$ sudo service ntp stop

/etc/ntp.conf を編集して時刻同期先のサーバーを設定する。

yuu@web2:~$ sudo nano /etc/ntp.conf

ntp サービスを起動する。

yuu@web2:~$ sudo service ntp start
yuu@web2:~$ sudo service ntp status

サーバーを再起動して同様に、
sudo service ntp status
で確認。

Active: active (running)

となっていれば自動起動が働いている。

5.パッケージの自動アップデート

unattended-upgradesをインストールする。

yuu@web2:~$ sudo apt-get install unattended-upgrades

dpkg-reconfigure -plow unattended-upgrades を起動して自動更新を設定する。

yuu@web2:~$ sudo dpkg-reconfigure -plow unattended-upgrades

/etc/apt/apt.conf.d/50unattended-upgrades ファイルで更新対象の設定を確認する。

yuu@web2:~$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades


セキュリティ関係のみを自動アップデートに設定(デフォルトのまま)した。

項目 意味
security 重要なセキュリティアップデート
updates 推奨アップデート
proposed プレリリースされたアップデート
backport サポートされていないアップデート

その他、ポートやファイアウォールの設定は導入するパッケージの設定と併せて修正する。

カテゴリー: サーバー | タグ: | コメントする

Ubuntu 20.04でサーバー構築 2:OSインストールとSSH接続

1.Ubuntu 20.04 インストールUSBメモリの作成

インストール時にソフトウェアRAID環境を構築してのインストールでは「Alternative Ubuntu Server installer」版が良いとのインターネット情報に従って、
ubuntu.com/download/alternative-downloads
から Ubuntu Server 20.04.2 LTS をダウンロードしようとしたが、BitTorrent になっているので先に BitTorrent Web をインストールしてからダウンロード。
ダウンロードしたファイル名は ubuntu-20.04.1-live-server-amd64.iso 。これをUSBメモリにUNetbootin で展開してインストールUSBは完成。

2.RAID1構築とインストール

ルーターからのLANケーブル、マウス、キーボードを接続し、インストールUSBメモリを差して電源ON。
インストールが始まると最初は言語選択。「English」を選択する。
続けてキーボードは「Japanese」を選択。
ネットワークはDHCPで良いのでデフォルトのままDone。
Proxyも何もせずそのままDone。

次に「Guided storage configuration」の設定がキモ。
デフォルトでチェックが入っている「Use an entire disk」のチェックを外し、
「Custom storage layout」にチェックを入れてDone。
以下の要領で2つのデバイス(HDD)に対してRAID1を構成する。

  1. 「Custom storage layout」を選択
  2. RAID1を校正する2つのデバイスに対して「Use as Boot Device」を指定
  3. 同様に各デバイスで「Add GPT Partition」を選択し、Sizeを指定しない。自動的に最大サイズになる
  4. 「Format」は「Leave unformatted」としてパーティションを作成する
  5. 「Create software RAID (md)」でmd0としてRAID1を組む(「RAID Level」で「1(mirrored)」を選択する)
  6. md0を「Format」で/を指定してフォーマットする

これでインストール先のRAID1アレイは完成。
次に管理者アカウントを作成。
Ubuntuではrootユーザーでのログインは出来ないので、ここで作成したアカウントでログインした後、必要に応じてrootに切り替える。
また、「Your server’s name」でこのサーバーの名前を設定する。

「SSH Setup」は「Install OpenSSH server」にチェックを入れてOSインストール時にSSH Serverもインストールする。OSインストール後はキーボードやディスプレイを外してサーバーを適当な場所に設置。後の作業はWindows PCからSssh接続で行う。

「Featured Server Snaps」はよく分からないので何も指定せずにDone。何でもあれば困らないだろうと、最初から余計な物を入れると後が面倒なので、確かに必要な物以外は入れない。必要になったときに後から追加する。

インストールが開始される。気が付くと画面最下部に「Reboot」の表示が出ていたので「Reboot」を実施。
Reboot後は素っ気ないCUIでUbuntuが立ち上がる。サーバーなので、runlebel 3(multi-user.target)がデフォルト。

3.SSH接続

Windows PC からのSSH接続するDHCPで割り振られたipアドレスを確認するためifconfigコマンドを打ったがコマンドが無いというエラー。
sudo apt install net-tools でインストール後に再度ipアドレスを確認。
早速、Windows pc から Tera Term でsshで接続してみる。
93のアップデートがすぐにでもインスト-ル出来るよ。その内セキュリティアップデートは0件。というメッセージ。これは便利。

4.UFW の設定

UFW で利用できるアプリケーションを確認する。

yuu@web2:~$ sudo ufw app list
利用可能なアプリケーション:
OpenSSH

SSHをUFWに登録する。

yuu@web2:~$ sudo ufw allow in “OpenSSH”
ルールを追加しました
ルールを追加しました (v6)
yuu@web2:~$ sudo ufw status
状態: アクティブ

To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)

.RAIDの確認

RAIDだ正常に構築されていることを確認する。
dfコマンドで/dev/md0 を確認。
/proc/mdstat の内容を cat コマンドで確認。
md0 : active raid1 sda2[0] sdb2[1] となっており、sdaとsdbの2台のHDDでRAID1となっている。
1952856064 blocks super 1.2 [2/2] [UU] の情報で、2台のHDD共に正常動作であることが確認できた。どちらかのHDDに異常があると [UU] の部分が [_U] や [U_] と、異常のあるドライブが”_”となるようだ。

次にサーバーとして使い始める前の初期設定をいくつか行う。

カテゴリー: サーバー | タグ: , , , , , | コメントする

Ubuntu 20.04でサーバー構築 1:ハードウェア

2020年1月に日本へ一時帰国した際に合わせて新規のサーバーPCを購入し、中国に持ち帰ってCentOS8でサーバーを構築して再び一時帰国したときに自宅サーバーの更新をしようとしたが、サーバーに搭載のMarvell製SATAコントローラを使ってのハードウェアRAID1によるインストールがうまく出来ないまま、1年近くが経過。そのような中、2020年12月にCentOS ProjectからCentOS8の提供は2021年12月31日に終了とのアナウンスが出た。
出来れば多少なりとも使い慣れたRHL系OSを使いたかったが、仕方ない。
という事であっさりとUbuntuへ乗り換えることにした。
Ubuntuの選択理由は、①サーバー用途でもメジャーでインターネットや書籍の情報も豊富。②LTS(Long Term Support)版が有り長期間安定して使用できる。③インストール時のソフトウェアRAID設定が分かりやすい。④Raspberry Piでちょっとなじみが有る。というもの。

もう1年もほこりをかぶっているサーバーPCはHPE ProLiant MicroServer Gen10。
とっくに廃番になっているようだ。
2013年に安売り?(39,000円)していたHPのProLiant MicroServer N54L を購入して自宅サーバーで使用中。このキュービック形状と特段問題を生じない静寂性。7年近くトラブルフリーでの稼働実績でHPEの製品を選定。
ケースカバーは手で回すことが出来る2本のビスで固定されており、シャーシへのアクセスは容易。と言っても、HDDは前面から出し入れするので最初のメモリ増設時くらいしか開ける必要が無いが。


CPUはAMDの Opteron X3421。HDDはWDの2TB REDを2台でRAID1を構築してUbuntuをインストールする。メモリは16MBをインストール。
ケースは前面全体から取り入れた外部空気を背面の大型ファンで吐き出すことでHDDやマザーボードの冷却を行う構造。
リアパネルの大部分を占める大きな排気ファンが着く。右上の小さなファンは電源ユニットのファン。電源は100-240V対応なので、ここ、中国に於いても変圧器無しで使用できる。
フロントパネルはN54Lのような蝶番の着いたドア式では無く、取り外し式。フロントパネルを開けるとシャーシにはHDDをドライブベイのレールに沿って装着するためのガイドボルトが準備されており、これを外してHDDに取り付ける。このガイドボルト取り付けだけはドライバーが必要。後は向きを間違えないようにドライブベイに奥まで挿入してロックする。

フロントパネルの下部左側には2つのUSBポート。右側には左からLAN、HDD、ヘルスインジケータ、電源スイッチが並ぶ。
リアには4つのUSBポート、3系統のディスプレイ出力、2つのLAN。

このPCにUbuntuをソフトウェアRAIDでインストールする。

カテゴリー: サーバー | タグ: , , | コメントする

野鳥撮影 20回戦(最終回) 烈士陵园

2021年1月16日。
広州の市内にある烈士陵园でも野鳥撮影が出来るという情報を聞いて、初めて行ってきました。広州市内の地下鉄1号線の烈士陵园駅を降りて地上に出るとすぐに東門がありました。地図で見ると広めの公園に池が有ります。どこでどのような鳥が見られるのか全く情報が無いため、公園内を散歩しながら手持ち撮影の用意で出かけました。

東門を入って右手、公園の北側の端を回るように歩くとすぐに池があります。休息廊という屋根やベンチのある場所の朝8時45分頃に着くと、池に向かって三脚を構えて居る人が3人ほど居ました。カワセミの撮影のようです。
9時を回るとカメラマンが続々と増え、9時半過ぎには10人以上になっていました。

地図で見るとこの場所の対岸までの池の幅は30m程度で、都市公園でカワセミも人慣れしているのでしょうか、人気を気にせずに3,4m程度の距離まで近づきます。

三脚を持参しなかったので、捕食のダイブタイミングを待っての撮影は腕力が続かず、難しかったです。何回かのタイミングをフレームに入れることが出来ましたがピントがうまく合いません。

10時を過ぎてくると公園内は多くの人出です。
公園内には高い木が多く、また、鳥が餌を探せそうな人の通る通路から少し離れた地面も多くありません。鳥さんの多くは高い木の上に居て、休息廊界隈を除き、殆ど写真を撮れるような距離で出会うことはありませんでした。まだ人の少ない時間帯であればもう少し違ったかもしれません。

烈士陵园には鳥さんが少ない、という事は無いのですが、高い木の上に居ることが多いようです。次回は三脚持参でカワセミに絞って行ってみたいと思います。

野鳥撮影を始めて約半年。最初は「エッ、鳥って少ないんだぁ!」と思いましたが、インターネットから知識を頂いて、実際にやって見て反省、という繰り返しで、鳥さんの出会い方、とりあえずカメラに撮すコツのいったんは掴めたように思います。やっと野鳥撮影の(しかも都市公園での)入り口に立ったという所まで来た感じです。

カテゴリー: Day by Day, Photo life, 中華人民共和国, 野鳥 | タグ: , , , , , | コメントする

野鳥撮影 19回戦 南沙滨海公园

2021年1月3日。
久しぶりに南沙滨海公园(本当の名前は大角山海滨公园のようです)へ散歩に行きました。中華人民共和国では正月は旧暦なのでまだ正月気分ではありませんが、寒い日が多くなったためか、朝の内は人出が少なめで少し静かです。

この時期、冬への蓄えでしょうか?丸々と太った小鳥さんが多いようです。

野鳥撮影を始めて半年。鳥さんの探し方や近寄り方なども少しずつ慣れて、コツも分かり出しました。
撮ってもボツ写真になる光線の具合や状況も経験を積む事で多少分かってきたつもりですが、それでもまだまだ鳥さんを見つけると何でもシャッターを切ってしまいがちです。
暗めの木の葉の下から日当たりまで、個々の撮影条件で明るさが大きく変わる中で小さな被写体を撮影するのは、マルチパターン測光だけでは結構な失敗露出も有ります。
この点に関してはファインダーで露出を確認できるミラーレスが羨ましく思うこともあります。

AF-S NIKKOR 500mm f/5.6E PF ED VR は確かに評判通り、絞り開放から良く解像した写真が撮れますが、絞りで解像感がどのくらい変わるのか、同じ場所に居た鳥さんで絞りをf/5.6(開放)、f/8、f/11と変えて撮影してみました。
手持ち撮影です。
上段は周囲の背景を入れてトリミング。下段は鳥さんを拡大したものです。WordPressの標準仕様で大きなファイルサイズをアップできないため、画像サイズを縮小しています。
ピント面である鳥さんの解像はf/5.6でもf/11でも同じようで、絞りによる解像感に違いは見られませんでした。

カテゴリー: Day by Day, Photo life, 中華人民共和国, 野鳥 | タグ: , , , , , | コメントする