サーバー設定 · 2 min read · Dec 26, 2025

Ubuntu 18.04 (LTS) LAMPサーバーのチュートリアル(Apache、PHP 7.2、MySQL)

LAMPはLinux、Apache、MySQL、PHPの略です。このチュートリアルでは、Ubuntu 18.04 LTS(Bionic Beaver)サーバーにApacheウェブサーバーをPHP 7.2(mod_php)およびMySQL / MariaDBサポートとともにインストールし、Let’s EncryptでSSL証明書を設定する方法を示します。さらに、MySQL管理を容易にするためにPHPMyAdminをインストールします。LAMPセットアップは、Joomla、Wordpress、Drupalなどの人気CMSシステムの完璧な基盤です。

前提条件

このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.1.100を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。

最小限のUbuntuサーバーセットアップをチュートリアルの基盤として使用することをお勧めします。これは、ウェブホスティング会社からのUbuntu 18.04最小インストールを含む仮想またはルートサーバーイメージであるか、または私たちの最小サーバーチュートリアルを使用してサーバーをゼロからインストールすることができます。

このチュートリアルのすべてのステップをroot権限で実行していますので、rootとしてログインしていることを確認してください:

sudo -s

1. MySQLまたはMariaDBデータベースのインストール

現在、Oracleが開発したクラシックな「MySQL」サーバー(バージョン5.7)と、元のMySQL開発者Monty Wideniusが開発したMySQLフォークであるMariaDBの2つの広く使用されているMySQLデータベースシステムがあります。

以下で両方の代替手段をインストールする方法を示します。1.1または1.2のいずれかの章に従ってくださいが、両方は実行しないでください。私はHowtoforgeからダウンロードできる仮想マシンイメージにMySQL 5.7を使用します。

1.1 MySQL 5.7のインストール

MySQL 5.7をインストールするには、次のコマンドを実行します:

apt-get -y install mysql-server mysql-client

パッケージmysql-serverとmysql-clientは、いわゆる「メタパッケージ」であり、Ubuntuから利用可能な最新のMySQLバージョンを常にインストールします。現在の最新バージョンはMySQL 5.7です。

インストール中にMySQLのrootパスワードを設定しましたが、セキュリティ上の理由から匿名ユーザーとテストデータベースを削除したいと思います。以下のmysql_secure_installationコマンドを実行してそれを達成します。

mysql_secure_installation

次の質問が表示されます:

MySQLサーバーのデプロイメントを保護しています。
ユーザーrootのパスワードを入力してください: <-- MySQLのrootパスワードを入力
VALIDATE PASSWORD PLUGINを使用してパスワードをテストし、セキュリティを向上させることができます。パスワードの強度をチェックし、ユーザーが十分に安全なパスワードのみを設定できるようにします。VALIDATE PASSWORDプラグインを設定しますか?
はいの場合はy|Yを押し、いいえの場合は他のキーを押してください:  
既存のパスワードを使用しています。  
rootのパスワードを変更しますか? ((はいの場合はy|Yを押し、いいえの場合は他のキーを押してください): <-- パスワード検証を有効にしたい場合は'y'を選択しますが、私はその機能が必要ないので、ここでは'n'を選択します。
... スキップ中。  
デフォルトでは、MySQLインストールには匿名ユーザーがあり、誰でもユーザーアカウントを作成せずにMySQLにログインできます。これはテスト専用であり、インストールを少しスムーズにするためのものです。  
本番環境に移行する前に削除する必要があります。
匿名ユーザーを削除しますか? (はいの場合はy|Yを押し、いいえの場合は他のキーを押してください): <-- y  
成功。

通常、rootは「localhost」からのみ接続を許可されるべきです。これにより、誰かがネットワークからrootパスワードを推測できないようにします。
リモートでのrootログインを禁止しますか? (はいの場合はy|Yを押し、いいえの場合は他のキーを押してください): <-- y  
成功。
デフォルトでは、MySQLには「test」という名前のデータベースがあり、誰でもアクセスできます。これもテスト専用であり、本番環境に移行する前に削除する必要があります。

テストデータベースとそのアクセスを削除しますか? (はいの場合はy|Yを押し、いいえの場合は他のキーを押してください): <-- y  
- テストデータベースを削除中...  
成功。
- テストデータベースの権限を削除中...  
成功。
権限テーブルを再読み込みすると、これまでに行ったすべての変更が即座に有効になります。
権限テーブルを今すぐ再読み込みしますか? (はいの場合はy|Yを押し、いいえの場合は他のキーを押してください): <-- y  
成功。
すべて完了!

MySQLのセットアップはこれで安全になりました。

1.2 MariaDB 10のインストール

次のコマンドを実行してMariaDBサーバーとクライアントをインストールします:

apt-get -y install mariadb-server mariadb-client

次に、MariaDBのrootパスワードを設定します。

mysql_secure_installation

次の質問が表示されます:

現在のrootのパスワードを入力してください(なしの場合はEnterを押してください): <-- Enterを押す  
rootパスワードを設定しますか? [Y/n] <-- y  
新しいパスワード: <-- ここに新しいMariaDBのrootパスワードを入力  
新しいパスワードを再入力してください: <-- パスワードを繰り返す  
匿名ユーザーを削除しますか? [Y/n] <-- y  
リモートでのrootログインを禁止しますか? [Y/n] <-- y  
権限テーブルを今すぐ再読み込みしますか? [Y/n] <-- y

1.3 MySQL/MariaDBのrootログインをテストする

「mysqlコマンド」を使用してMariaDBへのログインをテストします。

mysql -u root -p

そして、上記で設定したMariaDBのrootパスワードを入力します。結果は以下のスクリーンショットに似ているはずです:

Ubuntu 18.04 LTSでのMySQL rootログインのテスト

MySQL/MariaDBシェルを終了するには、「quit」と入力してEnterを押します。

2. Apacheウェブサーバーのインストール

Apache 2はUbuntuパッケージとして利用可能であるため、次のようにインストールできます:

apt-get -y install apache2

次に、ブラウザをhttp://192.168.1.100に向けると、Apache2のデフォルトページ(動作中!)が表示されるはずです:

Apacheのデフォルトページ

ApacheのデフォルトvhostのドキュメントルートはUbuntuの/var/www/htmlであり、メインの設定ファイルは/etc/apache2/apache2.confです。設定システムは/usr/share/doc/apache2/README.Debian.gzに完全に文書化されています。

3. PHP 7.2のインストール

次のようにPHP 7.2とApache PHPモジュールをインストールできます:

apt-get -y install php7.2 libapache2-mod-php7.2

次に、Apacheを再起動します:

systemctl restart apache2

4. PHPをテストし、PHPインストールの詳細を取得する

デフォルトのウェブサイトのドキュメントルートは/var/www/htmlです。今、そのディレクトリに小さなPHPファイル(info.php)を作成し、ブラウザで呼び出します。このファイルは、インストールされているPHPのバージョンなど、PHPインストールに関する多くの便利な詳細を表示します。

nano /var/www/html/info.php

次に、info.phpファイルの所有者をwww-dataユーザーおよびグループに変更します。

chown www-data:www-data /var/www/html/info.php

今、そのファイルをブラウザで呼び出します(例:http://192.168.1.100/info.php):

Ubuntu 18.04 PHP 7.2情報

ご覧の通り、PHP 7.2は動作しており、Server API行に示されているようにApache 2.0ハンドラーを介して動作しています。さらに下にスクロールすると、PHPで既に有効になっているすべてのモジュールが表示されます。MySQLはそこにリストされていないため、PHPにはまだMySQL / MariaDBサポートがありません。

5. PHPでMySQL / MariaDBサポートを取得する

PHPでMySQLサポートを取得するには、php7.2-mysqlパッケージをインストールできます。他のPHPモジュールもインストールすることをお勧めします。これらはアプリケーションに必要になるかもしれません。利用可能なPHPモジュールを次のように検索できます:

apt-cache search php7.2

および

apt-cache search php-

すべてのPHPパッケージがその名前にバージョン番号7.2を持っているわけではありません。

必要なものを選択し、次のようにインストールします:

apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext

次に、Apache2を再起動します:

systemctl restart apache2

PHP 7.2にMySQL拡張が読み込まれました

PHP 7.2には、上記のphpinfo()に示されているようにMySQL / MariaDBサポートがあります。

6. PHPの速度を上げるためにOpcache + APCu PHPキャッシュをインストールする

PHP 7には、PHP中間コードをキャッシュおよび最適化するための組み込みオペコードキャッシャーが付属しており、その名前は’opcache’で、php7.0-opcacheパッケージで利用可能です。PHPページの速度を上げるためにOpcacheをインストールすることを強くお勧めします。opcacheに加えて、APCuをインストールします。これは、PHP 5.xバージョンでよく使用されるキャッシングシステムのAPCキャッシュの機能を提供するためのopcacheの互換性ラッパーです。

OpcacheとAPCuは次のようにインストールできます:

apt-get -y install php7.2-opcache php-apcu

Opcacheがすでにインストールされている場合でも心配しないでください。

次に、Apacheを再起動します:

systemctl restart apache2

今、ブラウザでhttp://192.168.1.100/info.phpを再読み込みし、モジュールセクションに再度スクロールします。そこにはたくさんの新しいモジュールが見つかるはずです:

PHP 7.2でAPCとAPCuが有効になりました

もう必要ない場合は、info.phpファイルを削除することを忘れないでください。これはサーバーの機密情報を提供します。次のコマンドを実行してファイルを削除します。

rm -f /var/www/html/info.php

7. ApacheでSSLウェブサイトを有効にする

SSL/TLSは、ウェブブラウザとサーバー間の接続を暗号化するためのセキュリティ層です。ほとんどのウェブブラウザは、サーバーとウェブブラウザ間の接続がSSLで暗号化されていない場合、今日ではサイトを安全でないと表示し始めます。この章では、SSLでウェブサイトを保護する方法を示します。

サーバーで次のコマンドを実行してSSL(https://)サポートを有効にします。実行:

a2enmod ssl  
a2ensite default-ssl

これにより、SSLモジュールが有効になり、/etc/apache2/sites-enabledフォルダーに/etc/apache2/sites-available/default-ssl.confファイルへのシンボリックリンクが追加され、アクティブなApache設定に含まれます。次に、新しい設定を有効にするためにApacheを再起動します:

systemctl restart apache2

次に、ブラウザでhttps://192.168.1.100を開いてSSL接続をテストします。

自己署名SSL証明書の警告

サーバーのSSL証明書が「自己署名」SSL証明書であるため、SSL警告が表示されます。これは、ブラウザがデフォルトでこの証明書を信頼していないことを意味し、最初にセキュリティ警告を受け入れる必要があります。警告を受け入れると、Apacheのデフォルトページが表示されます。

SSLが有効なApache

ブラウザのURLの前にある閉じた「緑の南京錠」は、接続が暗号化されていることを示しています。

SSL警告を取り除く方法は2つあります。自己署名SSL証明書/etc/ssl/certs/ssl-cert-snakeoil.pemをSSL認証機関から購入した正式に署名されたSSL証明書に置き換えるか、Let’s Encryptから無料のSSL証明書を取得します。これについては第8章で説明します。

8. Let’s Encryptから無料のSSL証明書を取得する

Let’s Encrypt SSL証明書でウェブサイトを保護する最初のステップは、python3-certbot-apacheパッケージをインストールすることです。次のコマンドを実行します:

apt-get -y install python3-certbot-apache

次のステップでは、certbotクライアントプログラムを使用してLet’s EncryptからSSL証明書をリクエストします。このプロセス中に、Let’s Encryptサーバーは、certbotコマンドに提供するドメイン名を介してサーバーに接続しようとします。このドメイン名がすでにDNSでサーバーを指していることが重要です。そうしないと、ウェブサイトはポート80(http)でそのドメイン名からアクセスできません。ウェブサイトがインターネットからアクセスできない場合、Let’s Encrypt SSL証明書の作成は失敗します。

SSL証明書を作成する前に、vhost設定ファイルにドメイン名を設定します。デフォルトのvhostファイルをエディタで開きます:

nano /etc/apache2/sites-available/000-default.conf

そして、次の行を追加します:

ServerName example.com

‘文書ルート’行のすぐ下に。example.comを自分のウェブサイトのドメイン名に置き換えます。

次に、このコマンドでSSL証明書を作成します:

certbot --apache -d example.com

ここでもexample.comを自分のドメイン名に置き換えます。このコマンドは、いくつかの質問を尋ねるウィザードを開始します。

このウェブサイトの管理者に連絡できるメールアドレスを入力してください。

Let’s Encrypt SSL認証機関の利用規約に同意します。

Certbotは、あなたのメールアドレスをElectronic Frontier Foundationと共有したいかどうかを尋ねます。ここでは、あなたの好みに応じて選択してください。

次に、非SSLリクエストをhttps://に自動的にリダイレクトするかどうかを選択します。私は、ウェブサイトがhttp://とhttps://の両方のバージョンで利用可能な場合に重複コンテンツの問題を避けるために、ここで「はい」を選択します。

HTTPリクエストのリダイレクト

SSL証明書が正常に発行されました。

SSL証明書が正常に発行されました

今、ブラウザでウェブサイトにアクセスすると、自動的にSSLにリダイレクトされ、ブラウザのURLバーの前にある緑の南京錠が、私たちが信頼できるSSL証明書を使用していることを示しています。

SSL保護されたウェブサイト

8.1 Let’s Encryptの自動更新

Let’s Encrypt SSL証明書は、わずか80日間有効です。したがって、SSL証明書を自動更新するためのcronジョブが必要で、certbot –renewコマンドを実行します。

このcronジョブは、certbotをインストールすると自動的に設定されます。cronファイルは/etc/cron.d/certbotです。したがって、ここで何かをする必要はありません。cronジョブがどのように見えるかを知りたい場合は、次のコマンドを実行します:

/etc/cron.d/certbot

結果は:

root@server1:~# cat /etc/cron.d/certbot  
# /etc/cron.d/certbot: certbotパッケージのcrontabエントリ  
#  
# 上流では、1日に2回の更新を試みることを推奨しています  
#  
# 最終的には、これが証明書が取り消されていないことを検証する機会になります  
# 有効期限が30日以内の場合にのみ更新が行われます。  
SHELL=/bin/sh  
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

9. phpMyAdminのインストール

phpMyAdminは、MySQLデータベースを管理するためのウェブインターフェースです。インストールすることをお勧めします:

apt-get -y install phpmyadmin

重要: aptインストーラーは、いくつかの質問を尋ねます。その1つは、ウェブサーバーの種類を選択することです。一般的な間違いは、ウェブサーバーの種類が強調表示されているだけで、選択されていないことです。aptメニューで項目を選択するには、タブまたはカーソルキーで項目に移動した後、スペースバーを押す必要があります。強調表示するだけでは不十分です!

次の質問が表示されます:

自動的に設定するウェブサーバー: <-- apache2オプションを選択  
phpmyadminのdbconfig-commonでデータベースを設定しますか? <-- はい  
phpmyadminのMySQLアプリケーションパスワード: <-- Enterを押すと、aptが自動的にランダムなパスワードを作成します。

9.1 PHPMyAdminへのrootアクセス

MariaDBとMySQLは、デフォルトでrootユーザーに「unix_socket」というプラグインを有効にします。このプラグインは、rootユーザーがPHPMyAdminにログインできず、TCP接続がrootユーザーのMySQLに対して機能するのを防ぎます。PHPMyAdminで他のユーザーやデータベースを作成する権限を持つユーザーを取得するために、rootユーザーと同じ権限を持つ「admin」という名前の新しいMySQLユーザーを作成します。

シェルでrootユーザーとしてMySQLデータベースにログインします:

mysql -u root

「admin」という名前の新しいユーザーを作成し、パスワードを「howtoforge」に設定します。以下のコマンドで「howtoforge」というパスワードを安全なパスワードに置き換えてください!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';  
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;  
FLUSH PRIVILEGES;  
exit

その後、http://192.168.1.100/phpmyadmin/でphpMyAdminにアクセスできます:

phpMyAdminログイン

管理ユーザーとしてphpMyAdminにログイン

10 このチュートリアルの仮想マシンイメージのダウンロード

このチュートリアルは、VMWareおよびVirtualboxと互換性のあるovf/ova形式の使用準備が整った仮想マシンイメージとして利用可能です。仮想マシンイメージは、次のログイン詳細を使用します:

SSH / シェルログイン

ユーザー名: administrator
パスワード: howtoforge

このユーザーにはsudo権限があります。

MySQLログイン

ユーザー名: root
パスワード: howtoforge

VMのIPは192.168.1.100で、/etc/network/interfacesファイルで変更できます。仮想マシンを保護するために、上記のすべてのパスワードを変更してください。

11 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。