ウェブサイト検索

Apache、PHP 7.2、および MySQL を使用した Ubuntu 18.04 (LTS) LAMP サーバーのチュートリアル


このチュートリアルは、これらの OS バージョン用に存在します

  • Ubuntu 18.04 (Bionic Beaver)
  • Ubuntu 14.04 LTS (Trusty Tahr)

このページでは

  1. 予備メモ
  2. 1. MySQL または MariaDB データベースのインストール
    1. 1.1 MySQL 5.7 をインストールする
    2. 1.2 MariaDB 10 をインストールする
    3. 1.3 MySQL/MariaDB ルート ログインのテスト

    1. 8.1 自動更新を暗号化する

    1. 9.1 PHPMyAdmin へのルート アクセス

    LAMP は、Linux、Apache、MySQL、PHP の略です。このチュートリアルでは、PHP 7.2 (mod_php) および MySQL/MariaDB をサポートする Ubuntu 18.04 LTS (Bionic Beaver) サーバーに Apache Web サーバーをインストールする方法と、Lets encrypt を使用して SSL 証明書をセットアップする方法を示します。さらに、PHPMyAdmin をインストールして、MySQL の管理を容易にします。 LAMP セットアップは、Joomla、Wordpress、Drupal などの一般的な CMS システムの完全な基盤です。

    予備メモ

    このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.1.100 を使用します。これらの設定は異なる場合があるため、必要に応じて置き換える必要があります。 =div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var コンテナー=document.getElementById(slotId);container.style.width=100%;var ins=ドキュメント.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive =真;}

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

    このチュートリアルのすべての手順を root 権限で実行しているため、root としてログインしていることを確認してください。

    sudo -s

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

    現在、広く使用されている 2 つの MySQL データベース システムが利用可能です。Oracle によって開発され、現在バージョン 5.7 で利用可能な従来の「MySQL」サーバーと、元の MySQL 開発者 Monty Widenius によって開発された MariaDB という名前の 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 のルート パスワードを設定しましたが、セキュリティ上の理由から、匿名ユーザーとテスト データベースを削除したいと考えています。以下の mysql_secure_installation コマンドを実行して、それを実現します。

    mysql_secure_installation

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

    Securing the MySQL server deployment.
    Enter password for user root: <-- Enter the MySQL root 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:
    Using existing password for root.
    Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
    ... skipping.
    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
    Success.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
    Success.
    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.

    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
    - Dropping test database...
    Success.
    - Removing privileges on test database...
    Success.
    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
    Success.
    All done!

    MySQL のセットアップが保護されました。

    1.2 MariaDB 10 のインストール

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

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

    ここで、MariaDB のルート パスワードを設定します。

    mysql_secure_installation

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

    Enter current password for root (enter for none): <-- press enter
    Set root password? [Y/n] <-- y
    New password: <-- Enter the new MariaDB root password here
    Re-enter new password: <-- Repeat the password
    Remove anonymous users? [Y/n] <-- y
    Disallow root login remotely? [Y/n] <-- y
    Reload privilege tables now? [Y/n] <-- y

    1.3 MySQL/MariaDB ルート ログインをテストする

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

    mysql -u root -p

    上記で設定した MariaDB ルート パスワードを入力します。結果は次のスクリーンショットのようになります。

    MySQL/MariaDB シェルを終了するには、コマンド \quit\ を入力して Enter キーを押します。

    2. Apache Web サーバーをインストールする

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

    apt-get -y install apache2

    ブラウザで http://192.168.1.100 にアクセスすると、Apache2 のデフォルト ページが表示されます (動作します)。

    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 インストールに関する詳細を取得する

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

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

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

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

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

    ご覧のとおり、PHP 7.2 は動作しており、サーバー 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

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

    6. Opcache + APCu PHP キャッシュをインストールして PHP を高速化する

    PHP 7 には、PHP 中間コードをキャッシュして最適化するための組み込みのオペコード キャッシャーが付属しています。これは opcache という名前で、パッケージ php7.0-opcache で利用できます。 PHP ページを高速化するために、Opcache をインストールすることを強くお勧めします。 opcache のほかに、opcache の互換ラッパーである APCu をインストールして、APC キャッシュの機能を提供します。APC キャッシュは、PHP 5.x バージョンでよく使用されるキャッシュ システムであり、多くの CMS システムが今でも使用しています。

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

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

    Opcache が既にインストールされていることが表示されても心配しないでください。

    Apache を再起動します。

    systemctl restart apache2

    ブラウザで http://192.168.1.100/info.php をリロードし、もう一度モジュール セクションまでスクロールします。そこにはたくさんの新しいモジュールがあるはずです:

    サーバーの機密情報が含まれているため、不要になった場合は忘れずに info.php ファイルを削除してください。次のコマンドを実行して、ファイルを削除します。

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

    7.ApacheでSSL Webサイトを有効にします

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

    サーバーで次のコマンドを実行して、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 警告が表示されます。これは、ブラウザがデフォルトでこの証明書を信頼していないことを意味し、最初にセキュリティ警告を受け入れる必要があります。警告を受け入れると、Apache のデフォルト ページが表示されます。

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

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

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

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

    apt-get -y install python3-certbot-apache

    次のステップでは、certbot クライアント プログラムを使用して Lets Encrypt から SSL 証明書を要求します。このプロセス中に、Lets Encrypt サーバーは、certbot コマンドに指定したドメイン名を使用してサーバーへの接続を試みます。ポート 80 (http) のドメイン名でウェブサイトにアクセスできるように、このドメイン名が DNS 内のサーバーを指していることが重要です。インターネットから Web サイトにアクセスできない場合、Lets Encrypt SSL 証明書の作成は失敗します。

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

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

    次の行を追加します。

    ServerName example.com

    DocumentRoot 行のすぐ下。 example.com を自分の Web サイトのドメイン名に置き換えます。

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

    certbot --apache -d example.com

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

    この Web サイトを担当する管理者に連絡できる電子メール アドレスを入力します。

    Lets Encrypt SSL オーソリティの利用規約に同意します。

    Certbot は、あなたの電子メール アドレスを Electronic Frontier Foundation と共有するかどうかを尋ねます。ここで好きなものを選んでください。

    次に、非 SSL リクエストを https:// に自動的にリダイレクトするかどうかを選択します。 Web サイトが http:// および https:// バージョンとして利用可能な場合、コンテンツの重複の問題を回避するために、ここでは [はい] を選択します。

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

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

    8.1 自動更新を暗号化しましょう

    Lets Encrypt SSL 証明書の有効期間は 80 日間のみです。したがって、certbot --renew コマンドを実行する SSL 証明書を自動更新する cron ジョブが必要です。

    この cron ジョブは、certbot をインストールすると自動的にセットアップされます。cron ファイルは /etc/cron.d/certbot です。したがって、ここで行うことはこれ以上ありません。 cronjob がどのようなものか知りたい場合は、次のコマンドを実行します。

    /etc/cron.d/certbot

    結果は次のとおりです。

    :~# cat /etc/cron.d/certbot
    # /etc/cron.d/certbot: crontab entries for the certbot package
    #
    # Upstream recommends attempting renewal twice a day
    #
    # Eventually, this will be an opportunity to validate certificates
    # haven't been revoked, etc. Renewal will only occur if expiration
    # is within 30 days.
    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 データベースを管理できる Web インターフェイスです。それをインストールすることをお勧めします:

    apt-get -y install phpmyadmin

    重要: apt インストーラーはいくつかの質問をします。そのうちの 1 つは Web サーバーの種類を選択することです。よくある間違いは、Web サーバーのタイプが強調表示されているだけで選択されていないことです。 apt メニューでアイテムを選択するには、タブ キーまたはカーソル キーでアイテムに移動した後、キーボードのスペース バーを押す必要があります。ハイライトだけじゃ物足りない!

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

    Web server to configure automatically: <-- Select the option: apache2
    Configure database for phpmyadmin with dbconfig-common? <-- Yes
    MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

    9.1 PHPMyAdmin へのルート アクセス

    MariaDB と MySQL は、デフォルトで root ユーザーに対して \unix_socket\ というプラグインを有効にします。このプラグインは、root ユーザーが PHPMyAdmin にログインできず、MySQL への TCP 接続が root ユーザーに対して機能することを防ぎます。 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 にアクセスできます。

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

    このチュートリアルは、VMWare および Virtualbox と互換性のある ovf/ova 形式のすぐに使用できる仮想マシン イメージとして提供されています。仮想マシン イメージは、次のログインの詳細を使用します。

    SSH/シェル ログイン

    ユーザー名: 管理者
    パスワード: howtoforge

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

    MySQL ログイン

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

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

    11 リンク

    • Apache: http://httpd.apache.org/
    • PHP: http://www.php.net/
    • MySQL: http://www.mysql.com/
    • MariaDB: https://mariadb.com/
    • Ubuntu: http://www.ubuntu.com/
    • phpMyAdmin: http://www.phpmyadmin.net/