よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

WSLのUbuntuにWebサーバーApache2とデータベースMySQLをインストール

WSLのUbuntuWebサーバーApache2データベースMySQL をインストールした記録。
Windows10 WSLのUbuntuにLAMP環境を作ってWordPressをインストールする(前編) – CodeAid-Lab(コードエイド・ラボ) を参考に作業を進めました。



【更新 2022.01.31 】MySQLの再インストールの為記事を更新しました。
インストール手順は WSL を使用してデータベースを追加または接続する | Microsoft Docs の通り。



小さな野望としましては
ローカル環境(Windows10上のUbuntu)にWebサーバーを立てまして、そこでPythonの自作Webアプリケーションを動かしてサーバーアプリの扱いを模擬体験を得ようというもの。その手始めに。
Ubuntuは先にWindows10HomeにWindows Subsystem For Linux(WSL)でインストールしてあります。
呟き Windows10homeにUbuntuLinuxを入れた - よちよちpython



目次


作業環境


Windows10 Home
WSLにUbuntu18.04
Ubuntuのターミナル
ブラウザGoogleChrome



内容と手順


Apache2のインストールと、MySQLのインストール
全ての作業をUbuntuのターミナルからコマンドで行います。

【Apache2のインストール】

  1. Ubuntu起動
  2. Apache2のインストール
  3. 起動とブラウザでの動作確認
  4. 終了


MySQLのインストール】

  1. MySQLのインストール
  2. 起動確認
  3. rootパスワード設定(セキュリティースクリプトにて)
  4. root認証確認()
  5. 終了


【参考】
Windows10 WSLのUbuntuにLAMP環境を作ってWordPressをインストールする(前編) – CodeAid-Lab(コードエイド・ラボ)
大変参考になりました!
こちらではLAMP(LinuxApacheMySQLPHPPythonPerl)環境をWindows10のWSLで整備する方法を具体的に書いてあります。



1.Apache2のインストール


操作はUbuntuのターミナルでコマンドで行います。

1.1 Ubuntu起動


Windowsのスタートメニューから「Ubuntu」を起動。ターミナルを開く。

1.2 Apache2のインストール


Ubuntuの端末で次のコマンド

$ sudo apt install apache2


他のサイトにファイヤーウォールをインストールするように書かれていたが、Apache2をインストールすれば自動でufwも入るようだ。

$ sudo apt install ufw

ufw はすでに最新バージョン (0.36-0ubuntu0.18.04.1) です。 ufw は手動でインストールしたと設定されました。


これでインストールできました。



1.3 バージョンを確認するには


次のコマンド

$ apache2ctl -v


Server version: Apache/2.4.29 (Ubuntu)
Server built: 2019-09-16T12:58:48



1.4 Apache2起動


脳内にエアーウルフのテーマ曲が流れそうな雰囲気…いや、なんでもない

$ sudo service apache2 start


  • Starting Apache httpd web server apache2 [Wed Nov 13 21:48:26.938612 2019] [core:warn] [pid 1087:tid 139970336852928] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT *


コマンドを打つと出てきた文章を無視してもサーバーは動くが、気になる人は次の手順で解消できますよと。

/etc/apache2/apache2.conf
このファイルの末尾に次の2行を追記する。
AcceptFilter https none
AcceptFilter http none



上のファイルはデフォルトのホームディレクトリを2回上がった階層~/../../ect/apache2/にある。たぶん…
同ファイルは読込専用ファイルであると言われた。このままでも問題ないようなので放置する。



1.5 Apache2再起動


/etc/apache2/apache2.confを書き換えたらApache2の再起動が必要のようです。

$ sudo service apache2 restart



1.6 Apache2の動作確認


ブラウザを使います。Apache2起動でLocalhostにサーバーが立っている筈なのでアクセスします。
ブラウザのURLバーにhttp://localhostまたは単にlocalhostなどと入力し、Apache2 Ubuntu Default Pageが表示されればサーバーは動いています。

f:id:chayarokurokuro:20191114022452j:plain


Apache2のWebルートフォルダは/var/www/html/

表示するページのファイルはここに置く。(WordPressもここにインストール。)とのこと。


ここまでの途中でこんな画面も出た。

f:id:chayarokurokuro:20191114022713j:plain



1.7 Apache2を停止


$ sudo service apache2 stop


これでWebサーバーがストップ。ブラウザでアクセスしても先ほどのページは表示されなくなる。



これでApache2のインストールから起動、停止まで一通りできるようになりました。やったぜ!
次に進みます。



2.MySQLのインストール


データベースはsqlite3Pythonからだけしか触ったことがない。初対面です。
インストールやパスワードの設定が要るようです。

【更新 2022.01.31】
この投稿以降触らないでほったらかしにしていましたらrootでログインできなくなり「パスワードを3回間違えました」と出てにっちもさっちもいかなくなったのでw、再インストールし直しました。
インストール手順は以下のMicrosoftのページに従いました。以前投稿の記事内容は書き換えています。

docs.microsoft.com



2.1 MySQLをインストール

  • パッケージの更新
$ sudo apt update 

を実行して Ubuntu パッケージを更新します。



  • MySQL をインストールします
$ sudo apt install mysql-server


パッケージリストが羅列されたあとに

「アップグレード: 0 個、新規インストール: 21 個、削除: 0 個、保留: 0 個。 21.1 MB のアーカイブを取得する必要があります。 この操作後に追加で 162 MB のディスク容量が消費されます。」


「y」でEnterでインストール開始。



2.2 MySQLのバージョン確認


$ mysql --version


mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper

mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using EditLine wrapper ( 2022.01.31 再インストール)



2.3 MySQLサーバー起動(セキュリティープロンプトの開始)


含まれているセキュリティ スクリプトを実行することもできます。 これにより、リモート ルート ログインやサンプル ユーザーなど、安全性の低い既定のオプションの一部が変更されます。 セキュリティ スクリプトを実行するには

$ sudo service mysql start

$ sudo /etc/init.d/mysql start 


  • セキュリティープロンプトを開始する

ルート権限のパスワードなどを設定していく。

$ sudo mysql_secure_installation 

最初のプロンプトで、パスワードの検証プラグインを設定するかどうかを確認するメッセージが表示され ’ ます。これは、MySQL パスワードの強度をテストするために使用できます。 次に、MySQL ルート ユーザーのパスワードを設定し、匿名ユーザーを削除するかどうかを決定し、ルート ユーザーがローカルとリモートの両方でログインできるようにするかどうかを決定し、テスト データベースを削除するかどうかを決定し、最後に特権テーブルを直ちに再読み込みするかどうかを決定します。

* Starting MySQL database server mysqld

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN 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 plugin?

Press y|Y for Yes, any other key for No: y

パスワードの強度を検証するかどうかを問われているので「y」にした。すると、



There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary
  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

パスワードの長さを決めなさいとのことなので「2」の 強い にした。



Please set the password for root here.

New password:

Re-enter new password:

パスワードを適当に入力する。長めに。



と、こんな風にあと幾つか質問が続くので y か n で設定していく。以下省略。

All done!

と出れば設定完了。



  • MySQLのプロンプトを開く
$ sudo mysql

起動するとプロンプトが $ から mysql> に替わる

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.36-0ubuntu0.18.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>

あとはSQL文を打つのみ。



2.4 SQL文でバージョン確認


プロンプトがmysql>になっている状態でMySQLのバージョンを確認するには

mysql> select version();


+-------------------------+
| version()               |
+-------------------------+
| 5.7.36-0ubuntu0.18.04.1 |
+-------------------------+
1 row in set (0.00 sec)


こういう表示がされた。



2.5 MySQLのrootパスワード設定

上の「セキュリティースクリプトの実行」で済んだので記事削除します。

2.5.1 認証内容確認

MySQLインストール時点でrootパスワードが設定されていない。
sqlite3はそもそもパスワード設定がないよな、知らんけど。

次のコマンドで今の認証の内容を確認

mysql> SELECT user,authentication_string,plugin,host From mysql.user;


表が出る。

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *D2451988368B1FAA56BDAB9C80E069CDCE7CD184 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.01 sec)


この時点でroot認証は「auth_socket」プラグインを使っていることが分かる。んだとか。



2.5.2 パスワード設定

パスワード認証を有効にするために以下のコマンドでパスワード設定します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '任意のパスワード';

Query OK, 0 rows affected (0.00 sec)



2.5.3 パスワードを有効にする

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

2.5.4 root認証にauth_socketが使われていないことを確認する

mysql>SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *D8B28299694A68DCA5DD44F0D871C221A30E6959 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *D2451988368B1FAA56BDAB9C80E069CDCE7CD184 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

root認証が「mysql_native_password」に変更されていればMySQLのrootパスワード設定これにて完了。



2.6 MySQLの終了


mysql> exit;

Bye



備考
PHPWordPressも使わないので関係ないが参考ページによると

ここで設定したパスワードはこの後にインストールするphpMyAdminのrootログインと、WordPressをインストールする時に使用するパスワードとなります。 忘れないようにメモしておきましょう。



2.7 MySQLコマンドを使用する時のrootパスワード入力


MySQLのrootパスワードを設定したので「2.3 MySQLサーバー起動」に書いた方法で
sudo service mysql startでサーバー起動 → sudo mysqlで開始しようとすると

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


こういうのが出ます。

MySQLのrootパスワードを設定したのでパスワードを入力できるコマンドを使います。

$ sudo mysql -u root -p


Enter password:と出ますので、設定したMySQLのrootパスワードを入力。

正しいパスワードを入れたら

Welcome to the MySQL monitor. なんとかかんとか

mysql>


とプロンプトがmysql>に変わればOK。

終了mysql> exit;で。



おわりに


参考にしたWindows10 WSLのUbuntuにLAMP環境を作ってWordPressをインストールする(前編) – CodeAid-Lab(コードエイド・ラボ) が大変親切丁寧に書かれてありましたので何の引っ掛かりもなく無事にApache2とMySQLのインストール、起動と終了までの確認をすることができました。助かりました。ありがとうございました。



さて、ローカルホストに本物のLinuxサーバーが立てられたので、今度はPythonで作ったWebアプリケーションをそこに載せて動かそうかと思います。ワクワクします。

【更新 2022.01.31】
MySQLの再インストールの為記事を更新しました。
インストール手順は WSL を使用してデータベースを追加または接続する | Microsoft Docs の通り。ちなみにこのページはWSL用のMySQLインストール方法の他に「PostgresSQL」「MongoDB」「Microsoft SQL sever」「SQLite」「Redis」の方法が載っている。



以上です。