環境

マシン環境 Hyper-V仮想マシン
OS ubuntu18.04LTS
参考にしたサイト https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04

Apacheのインストールとファイアウォールの更新

Apacheのインストール

Ubuntuのパッケージマネージャを使用してApacheをインストールします。

sudo apt update
sudo apt install apache2

”sudo”はroot権限での実行ですので、実行の意図を確認するためにパスワードを尋ねられます。

ファイアウォールを調整

利用可能なアプリケーションを確認してみます。

sudo ufw app list
[sudo] chiba のパスワード:
利用可能なアプリケーション:
  Apache
  Apache Full
  Apache Secure
  CUPS
  OpenSSH

Apache Fullを見てみましょう。

sudo ufw app info "Apache Full"
プロファイル: Apache Full
タイトル: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

HTTPおよびHTTPSのトラフィックを許可します。

sudo ufw allow in "Apache Full"

これでApacheServerが外部に公開されるようになりました。

http://your_server_ip

ブラウザで接続してみます。

仮想ホストの設定(推奨)

Apache Webサーバーを使用する場合、仮想ホストを使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストすることができます。
Ubuntu 18.04のApacheでは、/var/www/htmlディレクトリからドキュメントを提供するように構成されています。
これは単一のサイトではうまくいきますが、複数のサイトをホストしていると扱いにくくなる可能性があります。

”/var/www/”の下にドメインのディレクトリ構造を作成します。(話を現実のものとするため、ダイナミックDNSである”myDNS”でofficeyuai.0am.jpというドメインを取得しました)

sudo mkdir -p /var/www/officeyuai.0am.jp/html

次に、ディレクトリの所有権を$USER環境変数を割り当て,パーミッションを設定します。

sudo chown -R $USER:$USER /var/www/officeyuai.0am.jp/html

sudo chmod -R 755 /var/www/officeyuai.0am.jp

新しく作成したディレクトリに表示用の”index.html”ファイルを作成します。

sudo nano /var/www/officeyuai.0am.jp/html/index.html

内容は以下のようにしておきます。

<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
         <h1>Success! The example.com server block is working!</h1>
     </body>
</html>

入力したらファイルを保存して閉じます。

新しい仮想ホスト用の設定ファイルを作成します。

sudo nano /etc/apache2/sites-available/officeyuai.0am.jp.conf

内容を以下のようにします。

<VirtualHost *:80>

    ServerAdmin admin@officeyuai.0am.jp

    ServerName officeyuai.0am.jp

    ServerAlias www.officeyuai.0am.jp

    DocumentRoot /var/www/officeyuai.0am.jp/html

 

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

a2ensiteツールを使ってファイルを有効にします・

sudo a2ensite officeyuai.0am.jp.conf
sudo a2dissite 000-default.conf

次に、設定エラーをテストします。

sudo apache2ctl configtest
Output
Syntax OK

Apacheを再起動します。

sudo systemctl restart apache2

ブラウザからアクセスします。

http://your_server_ip

MySQLのインストール

再度ターミナルから以下を実行します。

sudo apt install mysql-server

インストールが完了したら、MySQLにあらかじめインストールされているセキュリティスクリプトを実行します。

sudo mysql_secure_installation

スクリプトが終了したら、認証方式の変更を行います。

sudo mysql

sudoでmysqlに入ります。

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 | *E57A7F9D17090828749C88D3669FF98394CE6780 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+

rootがauth_socket pluginになっていますので、通常のパスワード認証に変更します。

mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

再度”SELECT user,authentication_string,plugin,host FROM mysql.user;
”を実行してみます。

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *E57A7F9D17090828749C88D3669FF98394CE6780 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

パスワード認証に代わっています。

PHPのインストール

PHPは動的コンテンツを表示するコードを処理する設定のコンポーネントです。
スクリプトを実行し、MySQLデータベースに接続して情報を取得し、処理されたコンテンツをWebサーバーに渡して表示することができます。

いくつかのヘルパーパッケージを組み込んで、PHPコードをApacheサーバーの下で実行し、MySQLデータベースと対話できるようにします。

sudo apt install php libapache2-mod-php php-mysql

apacheが最初に探すファイルを”index.php”にするようにします。

sudo nano /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

を以下に変更します。

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

変更を反映させるために以下のコマンドを実行します。

sudo systemctl restart apache2

Apacheの状態を確認するには以下のようにします。

sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Mon 2018-06-04 07:29:28 JST; 41min ago
  Process: 13556 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 13561 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 13582 (apache2)
    Tasks: 6 (limit: 2179)
   CGroup: /system.slice/apache2.service
           ├─13582 /usr/sbin/apache2 -k start
           ├─13588 /usr/sbin/apache2 -k start
           ├─13589 /usr/sbin/apache2 -k start
           ├─13590 /usr/sbin/apache2 -k start

インストール結果の確認

以下を実行して、新しいファイルを作成します。

sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

ブラウザからアクセスしてみます。

http://<your_server_ip>/info.php

接続が確認出来たらファイルを削除したほうがよいでしょう。

sudo rm /var/www/html/info.php