#author("2021-06-07T02:54:31+00:00","default:mizutu","mizutu")
#author("2021-06-07T21:08:29+00:00","default:mizutu","mizutu")
[[忘備録]] > サーバー構築5
* 自宅サーバー構築5 [#cd958526]
| Linuxによるサーバー構築メモ5|
 Intel® NUC キット BXNUC10I5FNHに1TB のSSDを搭載して、Ubuntu 20.04LTS をインストールし大阪サーバーの後継機とする。~
 同時にサイトの https化に挑戦する。~
#contents
RIGHT:&size(12){※ 最終更新:2021/05/27 };
* Ubuntu 20.04LTS [#r64e28e3]
 Ubuntu 20.04 LTSのサーバー版インストールイメージ、「ライブインストーラー版」を使ってインストール。~
 ~
モジュール名:ubuntu-20.04.2-live-server-amd64.iso~

** net-tools をインストール [#zea20907]
- ubuntu20.04LTS インストール完了、アップデート後「net-tools」を入れておく。
#codeprettify(){{
$ sudo apt update
   :
$ sudo apt upgrade
   :
$ sudo apt install net-tools
}}

** 「固定IPアドレス」を設定する [#x5375a20]
- ネットワーク設定ファイル「/etc/netplan/00-installer-config.yaml」
DHCPサーバーからネットワーク設定を取得するよう設定した場合
#codeprettify(){{
# This is the network config written by 'subiquity'
network:
  ethernets:
    eno1:
      dhcp4: true
  version: 2
}}

- 元の設定ファイルを保存しておく。
#codeprettify(){{
$ cd /etc/netplan/
$ sudo cp 00-installer-config.yaml 00-installer-config.yaml.disabled
}}

- 「00-installer-config.yaml」をviなどを使って変更
#codeprettify(){{
$ sudo vi /etc/netplan/00-installer-config.yaml

network:
  ethernets:
    eno1:
      addresses: [192.168.3.203/24]
      gateway4: 192.168.3.1
      nameservers:
          addresses: [192.168.3.1]
          search: []
      optional: true
  version: 2
}}
※以下のネットワーク設定の記述例。~
 ネットワークインタフェース:eno1~
 アドレス:192.168.3.203~
 ネットマスク:255.255.255.0(ビット指定だと「/24」)~
 ゲートウェイ:192.168.3.1~
 DNS:192.168.0.1~
&color(red){※yamlファイル記述のインデントに注意すること。TABでなくスペースで数にも要注意。};

- 設定の反映~
#codeprettify(){{
$ sudo netplan apply
}}

- IPアドレスの確認
#codeprettify(){{
$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.203  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 2001:a453:6346:100:1e69:7aff:fe6f:fbb8  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::1e69:7aff:fe6f:fbb8  prefixlen 64  scopeid 0x20<link>
        ether 1c:69:7a:6f:fb:b8  txqueuelen 1000  (Ethernet)
        RX packets 75463  bytes 110054579 (110.0 MB)
        RX errors 0  dropped 54  overruns 0  frame 0
        TX packets 15522  bytes 1098082 (1.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 164  bytes 13530 (13.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 164  bytes 13530 (13.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
}}

** SSHサーバー [#a5073e0a]
Ubuntu20.04では、インストール時にサーバーをインストールできる。
- SSHサーバーが起動しているかの確認
#codeprettify(){{
$ ps -ax | grep ssh

ii  libssh-4:amd64                       0.9.3-2ubuntu2.1                   amd64        tiny C SSH library (OpenSSL flavor)
ii  openssh-client                       1:8.2p1-4ubuntu0.1                 amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                       1:8.2p1-4ubuntu0.1                 amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server                  1:8.2p1-4ubuntu0.1                 amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines
ii  ssh-import-id                        5.10-0ubuntu1                      all          securely retrieve an SSH public key and install it locally
}}

** sambaサーバー [#ca643a8d]
- samba インストール
#codeprettify(){{
$ sudo apt update
$ sudo apt install samba
}}

- samba 設定
#codeprettify(){{
$ sudo vi /etc/samba/smb.conf

[gloval]
workgroup = XXXXXX

[share]
path = /var/samba/fshare
read only = no
browseable = yes
}}

- 共有フォルダ作成
#codeprettify(){{
$ sudo mkdir -p /var/samba/fshare
$ sudo chmod 777 /var/samba/fshare
$ sudo pdbedit -a ユーザー名
}}

- samba 再起動
#codeprettify(){{
$ sudo systemctl restart smbd nmbd
}}

** LAMPサーバ (Linux Apache MySQL PHP) [#hd3d87de]
- tasksel を用いて LAMP サーバをインストール
#codeprettify(){{
$ sudo apt install tasksel
$ sudo tasksel install lamp-server
}}

- インストールの確認
#codeprettify(){{
$ apachectl -v
$ mysql --version
$ php --version
}}

- Webブラウザで実行
#codeprettify(){{
 http://サーバーIP/
}}

** Apache2 (Webブラウザ) [#hb7d9dd9]
ドキュメントルートを/var/www/htmlから変更せずに使用する場合。
- ログインしているアカウントで作成・変更できるようにパーミッションを変更。
#codeprettify(){{
$ sudo chgrp -R グループ名 /var/www
$ sudo chmod g+w /var/www
$ sudo chmod g+w /var/www/html
}}

- index.phpの作成
#codeprettify(){{
$ cd /var/www/html
$ vi index.php

<?php
phpinfo();
?>
}}

- index.phpが作成されているか確認
#codeprettify(){{
$ cat index.php
}}

- ブラウザで確認
#codeprettify(){{
 http://(LinuxのIPアドレス)/index.php
}}

*** 404,401エラーのリダイレクトを可能にする [#n623b38f]
- 設定ファイルの変更
#codeprettify(){{
$ sudo vi /etc/apache2/apache2.conf

<Directory />
        Options FollowSymLinks
#       AllowOverride None
        AllowOverride All
        Require all denied
</Directory>
   :

<Directory /var/www/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
        Options FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
}}

- Apache2 再起動~
#codeprettify(){{
$ sudo /etc/init.d/apache2 restart
}}

- 参考サイト:[[カスタムエラーレスポンス - Apache HTTP サーバ バージョン 2.4>+https://httpd.apache.org/docs/2.4/ja/custom-error.html]]

** MySQL設定 [#m8a77f74]
- MySQLコマンドおさらい
#codeprettify(){{
ローカルコンソールからMySQLサーバに接続
$ sudo mysql -u root
状態表示
mysql> status
ユーザ一覧表示
mysql> select user,host from mysql.user;
データベース一覧表示
mysql> show databases;
特定のユーザーの権限確認
mysql> show grants for 'ユーザ名'@'ホスト名';
終了
mysql> exit
}}

- その他 コマンド覚書
#codeprettify(){{
新しくユーザを作成
CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
ユーザ名は、'ユーザ名'@'ホスト名'のように表す。ホスト名はMySQLへ接続するホスト名。サーバパソコンの場合はlocalhostとなる。ネットワークアドレスを指定する場合は192.168.1.%などのようにする。
@以下ホスト名を省略した場合は、'ユーザ名'@'%'として扱われ、どのホストからも接続できる。

ユーザ一覧を表示
mysql> SELECT user, host FROM mysql.user;

作成したユーザに権限を付与
mysql> CREATE USER文でユーザを作成した場合、初期設定では権限「なし」の状態。GRANT文を使って、権限を付与する。
mysql> GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';
mysql> FLUSH PRIVILEGES; 

[権限]の部分には、設定したい権限を列挙する。[適用対象の~]には、権限を適用する対象を指定。例えば適用の単位に「データベース」を指定できる権限であれば、データベース名を指定して設定することができる。「全範囲(グローバル)」を指定したい場合は、「*.*」と指定。FLUSH PRIVILEGESを実行することで、権限の変更をデータベースに反映する。

ユーザの権限を確認する
mysql> SHOW GRANTS FOR 'ユーザ名'@'ホスト名'; 

ユーザの権限を削除する
mysql> REVOKE [権限] ON [適用対象のデータベース].[適用対象のテーブル] FROM 'ユーザ名'@'ホスト名';
mysql> FLUSH PRIVILEGES; 

新規データベースの作成
mysql> CREATE DATABASE [任意のデータベース名]; 

データベースの削除
mysql> DROP DATABASE [任意のデータベース名]; 
}}

- MySQLサーバにログイン
#codeprettify(){{
$ sudo mysql -u root
}}
- 新しくユーザを作成
#codeprettify(){{
mysql> CREATE USER 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード';
}}
- 作成したユーザに権限を付与 &color(red){(以前の版からの構文変更に注意)};
#codeprettify(){{
mysql> GRANT ALL ON *.* TO 'ユーザ名'@'localhost';
mysql> FLUSH PRIVILEGES; 
}}
- DBの文字コードは「UTF8」になっている。
#codeprettify(){{
mysql> status
--------------
mysql  Ver 8.0.21-0ubuntu0.20.04.4 for Linux on x86_64 ((Ubuntu))

Connection id:          9
Current database: 
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.21-0ubuntu0.20.04.4 (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/run/mysqld/mysqld.sock
Binary data as:         Hexadecimal
Uptime:                 36 min 39 sec

Threads: 2  Questions: 27  Slow queries: 0  Opens: 145  Flush tables: 3  Open tables: 66  Queries per second avg: 0.012
}}

** phpmyadmin (MySQLをWebから管理) [#ve45f6e6]
- phpmyadmin インストール
#codeprettify(){{
$ sudo apt install phpmyadmin
Webサーバの種類を聞かれるので「apache2」を選択。
dbconfig-commonで設定しますか?と聞かれるので「yes」を選択。続いてMySQLサーバ上の「phpmyadmin」ユーザのパスワードを聞かれるので2回入力。
}}

- MySQLサーバー上でのphpmyadminユーザーの権限確認
#codeprettify(){{
mysql> SHOW GRANTS FOR 'phpmyadmin'@'localhost';
+--------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                    |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost'                     |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost' |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)
}}

- phpmyadminユーザーに管理や権限付加
#codeprettify(){{
mysql> GRANT ALL ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW GRANTS FOR 'phpmyadmin'@'localhost';
+---------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                           |
+---------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'        |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `phpmyadmin`@`localhost` WITH GRANT OPTION                                                                                                                                                                                                                    |
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `phpmyadmin`@`localhost` WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO `phpmyadmin`@`localhost`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
}}

- Webブラウザで実行
#codeprettify(){{
 http://サーバーIP/phpmyadmin
 phpmyadminのIDとパッケージをインストール時に入力したパスワードでログイン。
}}

** webmin (Webブラウザでの管理) [#ve25173b]
- webmin の導入
Webminのリポジトリを追加してwebminパッケージをインストール。
#codeprettify(){{
$ echo "deb http://download.webmin.com/download/repository sarge contrib" |sudo tee /etc/apt/sources.list.d/webmin.list
$ wget http://www.webmin.com/jcameron-key.asc -O - | sudo apt-key add -
$ sudo apt update -y
$ sudo apt install -y webmin
}}

- webブラウザからアクセス
#codeprettify(){{
 Linuxの管理ユーザとパスワードでログイン。
 https://サーバーIP:10000
 言語をJapanese(JA_JPUTF-8),Japanease ,yyyy/mm/dd(ie 2001/09/16) に変更。
}}

** PHP7 設定ほか [#ncebfe9e]
- Soapの拡張をインストール
#codeprettify(){{
$ sudo apt install php-soap
}}

- php.iniを変更
#codeprettify(){{
$ sudo vi /etc/php/7.2/apache2/php.ini

post_max_size = 32M
upload_max_filesize = 32M
allow_url_fopen = off
allow_url_fopen = Off
}}

- aoache2再起動
#codeprettify(){{
$ sudo service apache2 restart
}}
#br

** LAN内から自宅公開Webサーバーにアクセス [#gfab9913]
 LAN ないから公開webサーバーにアクセスする場合、名前解決ができない。YAMAHAルーターではそのための設定ができるが残念ながら徳島のNTTルーターではその機能がない。~
とりあえず「hosts」ファイルを編集して対応する。~
- 「メモ帳」を「管理者として実行」する。~
- c:\Windows\System32\drivers\etc にある hosts ファイルを開く。~
- 192.168.3.203 XXXXXX.jp などを追加。~
- これで、URLでLAN内からURLでアクセスできるようになる。

** ストレージ容量拡張の覚書 [#h0937605]
 Ubuntu インストール後、論理パーティションがストレージいっぱいまで使われてなかったのに気が付いてで拡張した。結構ハマって苦労したので最終結果を覚書として残しておく。(インターネットの情報は鮮度に気を付けるべしとの教訓を得た。)
- 1TB のストレージを使っているはずなのに、196GBのパーティションしか作られていない~
#codeprettify(){{
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.7G     0  3.7G   0% /dev
tmpfs                              755M  1.4M  754M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  196G  6.3G  180G   4% /
tmpfs                              3.7G     0  3.7G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/sda2                          976M  106M  803M  12% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/1944
/dev/loop1                          70M   70M     0 100% /snap/lxd/19188
/dev/loop2                          32M   32M     0 100% /snap/snapd/10707
/dev/sda1                          511M  7.9M  504M   2% /boot/efi
/dev/loop3                          33M   33M     0 100% /snap/snapd/12057
/dev/loop4                          56M   56M     0 100% /snap/core18/2066
/dev/loop5                          68M   68M     0 100% /snap/lxd/20326
tmpfs                              755M     0  755M   0% /run/user/1000
}}
- 物理パーティションは 930GB あるが、論理パーティションは 200GB~
#codeprettify(){{
$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                       7:0    0  55.4M  1 loop /snap/core18/1944
loop1                       7:1    0  69.9M  1 loop /snap/lxd/19188
loop2                       7:2    0  31.1M  1 loop /snap/snapd/10707
loop3                       7:3    0  32.1M  1 loop /snap/snapd/12057
loop4                       7:4    0  55.4M  1 loop /snap/core18/2066
loop5                       7:5    0  67.6M  1 loop /snap/lxd/20326
sda                         8:0    0 931.5G  0 disk 
├─sda1                      8:1    0   512M  0 part /boot/efi
├─sda2                      8:2    0     1G  0 part /boot
└─sda3                      8:3    0   930G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   200G  0 lvm  /
}}
- lvextend -l +100%FREE で、最大まで拡張する~
#codeprettify(){{
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 200.00 GiB (51200 extents) to <930.01 GiB (238082 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
}}
- まだファイルシステムには反映されていない~
#codeprettify(){{
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.7G     0  3.7G   0% /dev
tmpfs                              755M  1.4M  754M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  196G  6.3G  180G   4% /
tmpfs                              3.7G     0  3.7G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/sda2                          976M  106M  803M  12% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/1944
/dev/loop1                          70M   70M     0 100% /snap/lxd/19188
/dev/loop2                          32M   32M     0 100% /snap/snapd/10707
/dev/sda1                          511M  7.9M  504M   2% /boot/efi
/dev/loop3                          33M   33M     0 100% /snap/snapd/12057
/dev/loop4                          56M   56M     0 100% /snap/core18/2066
/dev/loop5                          68M   68M     0 100% /snap/lxd/20326
tmpfs                              755M     0  755M   0% /run/user/1000
}}
- resize2fs する~
#codeprettify(){{
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 25, new_desc_blocks = 117
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 243795968 (4k) blocks long.
}}
- 拡張された結果~
#codeprettify(){{
$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               3.7G     0  3.7G   0% /dev
tmpfs                              755M  1.4M  754M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  915G  6.3G  869G   1% /
tmpfs                              3.7G     0  3.7G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              3.7G     0  3.7G   0% /sys/fs/cgroup
/dev/sda2                          976M  106M  803M  12% /boot
/dev/loop0                          56M   56M     0 100% /snap/core18/1944
/dev/loop1                          70M   70M     0 100% /snap/lxd/19188
/dev/loop2                          32M   32M     0 100% /snap/snapd/10707
/dev/sda1                          511M  7.9M  504M   2% /boot/efi
/dev/loop3                          33M   33M     0 100% /snap/snapd/12057
/dev/loop4                          56M   56M     0 100% /snap/core18/2066
/dev/loop5                          68M   68M     0 100% /snap/lxd/20326
tmpfs                              755M     0  755M   0% /run/user/1000
}}

** 更新履歴 [#yb030f09]
- 2021/06/07 ストレージ容量拡張追加
- 2021/05/26 初版
#br

* 参考資料 [#r1046633]
- [[LAN内から自宅公開Webサーバーにアクセスする方法>+https://wwq.mydns.jp/467/]]~
- [[LVM を空き容量いっぱいまで拡張する>+https://www.ytyng.com/blog/lvm-partition-extend-full-remain-volume/]]~

#br