WSL2(Windows Subsystem for Linux 2)を使ってWebサーバを構築した時の色々
WSL2とはWindows上で「本物のLinux」を仮想的に動かすための仕組みでWindows上でLinixが動作します(といってもコマンドレベルでの話で、Xwindowが走るわけではない)ここにWebサーバ(Webサーバとして代表的なのがNginx(エンジンエックスと言うらしい)とApache(アパッチ)がある)のNginxをインストールして設定したその記録
Linuxって何?
オープンソースのOS(オペレーティングシステム)で、1991年にリーナス・トーバルズ氏がヘルシンキ大学で使っていたUNIX(Minix)を元によりよく使いやすくしようと開発したカーネル部分を指します。今では色々なソフトウェアやツール、デスクトップ環境をパッケージ化して提供されているオペレーティングシステムになっています。
Linuxのディストリビューション
Linuxカーネルを基盤に、様々なソフトウェアやツール、デスクトップ環境などをパッケージ化して提供される、完全なオペレーティングシステム(OS)のことで、Debian系とRedHat系があります(細かく言うとほかにもあります)
- Debian系
- 特徴: コミュニティ主導で開発され、柔軟性・使いやすさを重視。Debianは安定志向、Ubuntuはデスクトップ利用や最新技術導入に強い。
- パッケージ管理: apt, dpkg (.deb形式)。
- 代表例: Debian, Ubuntu, Linux Mint。
- 用途: デスクトップ、Webサーバー、開発環境など。
- Redhat系
- 特徴: Red Hat社が主導し、企業・商用環境での安定性と長期サポートを重視。最新技術をFedoraで検証しRHELへ反映するサイクル。
- パッケージ管理: yum, dnf (.rpm形式)。
- 代表例: Red Hat Enterprise Linux (RHEL), Fedora, CentOS Stream, AlmaLinux。
- 用途: エンタープライズサーバー、クラウド、ミッションクリティカルなシステム。
UNIXとは
UNIXはAT&T(American Telephone & Telegraph Companyの略)というアメリカの電話会社(日本で言うNTT)が1968年に開発したオペレーティングシステムです。
AT&Tが開発したSystemVとネットワークやviエディターなどを盛り込んだBSD(Berkeley Software Distribution)BSD版UNIXがあります。このBSD版が後にFreeBSDとして公開されています。SystemVはその後、SUN Micro Systems(Oracleに買収されたので現在はOracle)のSoralisやOracle社の有料のOSとなっています。(Sun OSは一時期BSD版とSystemV版が混在していました。JANISオープン当初は一般向けユーザのサーバーはBSD版で、ほかのサーバーはSystemVと混在した環境でした。また、Sorarisの無償版も存在しています。)AppleのmacOSはMacOS X(テン)からUNIXの派生のオペレーティングシステムです。
WSL2をインストール
まず、WSL2を有効にします。
コントロールパネル→プログラム→Windowsの機能の有効化または無効化を表示
HyperVとLinux用Windowsシステムを有効にします。
コマンドプロンプト(PowerShell(ターミナル))を管理者で開いてwsl --installを実行します。
実行したら再起動
これでUbuntuが(ウブントゥと読むらしい)インストールされます。(WindowsのデフォルトはUbuntuです。
Nginxパッケージのインストール
Ubuntuはdebian系なのでapt apt-get を使ってインストールする。まずはこれを最初にやるおまじない。インストール直後だとこれをやらないとパッケージがインストールできません。コマンドの部分は太字(ボールドにしています。)
user ~$ sudo apt-get update
これでコマンド(実行ファイル)やマニュアル(man page)の一覧表(コマンドがどこにあるのかの表)を更新します。
nginxパッケージのインストールは以下のコマンドを実行します。
user-~$ apt-get install -y nginx
apt-get install パッケージ名 でインストールします。 -yはインストール中のY/nの問い合わせにすべてyを指定するオプションです。
これでパッケージがインストールできました。(何もエラーなく終わるはずです。)
パッケージって何、パッケージマネジャーって何
パッケージとは実行ファイル本体と実行するために必要なファイル、マニュアルであるmanページ(man xxxと実行するとそのコマンドについての詳細が表示されます。)をひとまとめにしたものです。(実行ファイルに必要なファイルがインストールされていなければインストールします。
パッケージがなかった頃は・・・・
ソースをダウンロードして(C言語で書かれています。)
make(ソースをコンパイル(実行ファイルにすること))
make install (実行ファイルをインストール)
でした。
makeに必要なファイル(MakeFile)を作らなければmakeができません。これば大変な作業で、インストールに必要な環境変数やライブラリを設定しなければなりませんでした。ダウンロードしたソースは作成したマシン環境で動作するので、作成したマシン以外の環境で動作させるためには環境変数や、ライブラリーなどをチェックするためのconfigureスクリプトが配布されるようになり、これを実行することで、インストールに必要な環境変数やライブラリが正しく設定、設置されているか等がチェックされます。チェックした結果、MakeFileが作られます。
./configure
make
make install
でインストールができましたが、Linuxを使う人が増え、WindowsやMacみたいに簡単にインストールできるようになったのがパッケージマネージャーです。
debian系はapt-getまたはapt
RedHat系はyumまたはdnfがパッケージマネジャーとなっています。
nginxの起動
user~$ sudo systemctl start nginx # Nginx を起動
これでWebサーバーが起動します。
WindowsからWSL2のNginxを確認する
WSL2 の IP アドレスの確認
user~$ ip addr | grep eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
172.27.248.222
表示された172.27.248.222をメモしておきます。
WindowsのIPアドレスを確認し、WSL2で起動しているWebサーバーの80番ポートを別のポート(例:8888)にポートフォワーディングします。
管理者でコマンドプロンプト(PowerShell)を起動します。
次に以下のコマンドを発行します。必要な値は以下
listenaddress:上記のVirtualBox Host-Only Ethernet AdapterのIPアドレス
listenport=8888 指定のポートで80番ポートに接続
connectaddress:メモしたWSL2のIPアドレス
connectport=80 デフォルトのWebポート
C:\Windows\System32>netsh.exe interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8888 connectaddress=172.27.248.222 connectport=80
これでhttp://localhost:8888でアクセスできるようになります。
ポートフォワーディングができているか確認するコマンドは以下
C:\Windows\System32>netsh.exe interface portproxy show v4tov4 ipv4 をリッスンする: ipv4 に接続する: Address Port Address Port --------------- ---------- --------------- ---------- 0.0.0.0 8888 172.27.248.222 80
これでブラウザに
http://localhost:8888/を実行すると
Welcome to nginx!If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Thank you for using nginx. |
が表示されます。これでNginxのインストールの確認ができました。
WordPress、MariaDB、PHP、 PHP-fpmのインストール
php php-fpm(fastCGI)
apt-get install -y php php-mbstring php-pear php-fpm php-mcrypt php-mysql
mariaDB(データベース)
apt-gat install -y install mariadb mariadb-server
WordPress本体のダウンロード
#Wordpressの最新版を入手 wget https://ja.wordpress.org/latest-ja.tar.gz #展開します。 tar xvf latest-ja.tar.gz #展開したフォルダーを/var/htmlへ mv wordpress /var/html/ #wordpressフォルダー(ファイル)をwww-data:www-dataにユーザー:グループ変更 chown -R www-data:www-data /var/html/
MariaDBの設定
インストールしたMariaDBを起動します。
systemctl start mariadb
MariaDBの設定
MariaDBを設定します
mysql_secure_installation
色々質問されますが、
New password: # パスワードを設定 Re-enter new password: # 上記で設定したパスワードを再入力
以外はEnterキー押下します。
データベースで使用する文字コードの設定
データベースで使用する文字コードの設定をUTF-8に設定します。
必要に応じて
/etc/my.cnf.d/server.cnfをバックアップしておきます。
/etc/my.cnf.d/server.cnfを設定します。
vim /etc/my.cnf.d/server.cnf [mariadb] character-set-server = utf8mb4 <- これを追記
/etc/my.cnf.d/client.confを設定します。
[client-mariadb] default-character-set = utf8mb4 <- これを追記
MariaDBを再起動します。
systemctl restart mariadb
WordPressで使うデータベースの設定
mysql -u root -p Enter password: <- rootパスワードを入力 MariaDB [(none)]> CREATE DATABASE wordpress; Wordpressというデータベースを作成します。 MariaDB [(none)]> GRANT ALL ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'wordpress'; wordpressというユーザー名/パスワードを作成します。(赤字の部分は適宜変更してください。) 設定を反映させます FLUSH PRIVILEGES;
Nginxを再起動
設定を変更したので、Nginxを再起動します。
systemctl restart nginx
WordPressにアクセス
ブラウザから
http://localhost:8888/wordpress/にアクセスしてWordpressを設定します。
上記がうまくいかない場合は
cd /var/www/html/wordpress/ #wp-config-sample.phpをコピーしてwp-config.phpを作成します。 cp wp-config-sample.php wp-config.php #wp-config.phpを編集します。 vim wp-config.php #以下を上記データベースで設定したデータベース名:ユーザー名:パスワードなどを設定します。 define( 'DB_NAME', 'wordpress' ); define( 'DB_USER', 'wordpress' ); define( 'DB_PASSWORD', 'wordpress' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8mb4' ); #https://api.wordpress.org/secret-key/1.1/salt/にアクセスして define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' ); を入手して変更します。
にログインして設定を行います。
