#author("2021-05-27T03:38:48+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)
}}

- 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
}}

- 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でアクセスできるようになる。

** 更新履歴 [#yb030f09]
- 2021/05/26 初版
#br

* 参考資料 [#r1046633]
- [[LAN内から自宅公開Webサーバーにアクセスする方法>+https://wwq.mydns.jp/467/]]~

#br