GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04でPHPとMariaDBを使用してCaddyWebサーバーをインストールおよび構成する方法

Caddy Webサーバーは、GO言語で記述された最新のオープンソースWebサーバーです。依存関係はなく、静的バイナリファイルから実行され、SSL証明書を自動的に生成および更新します。静的ファイルサーバー、スケーラブルなリバースプロキシ、または強力な動的サーバーとして機能し、プラグインを介して拡張できます。 HTTP/2および実験的なHTTP/3プロトコルのサポートも含まれています。

このチュートリアルでは、Ubuntu20.04ベースのサーバーでPHPおよびMariaDBと一緒に実行するようにCaddyをインストールして構成します。

前提条件
  • sudo権限を持つroot以外のアカウントを持つUbuntu20.04サーバー。
  • サーバーのIPアドレスを指す完全に登録されたドメイン名。
ステップ1-ファイアウォールを構成する

UFW(Uncomplicated Firewall)を使用している場合は、サーバーが機能するようにHTTPおよびHTTPSポートへのアクセスを許可するように構成する必要があります。

ファイアウォールのステータスを確認してください。

$ sudo ufw status

次のように表示されます。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

HTTPおよびHTTPSポートを許可します。

$ sudo ufw allow http
$ sudo ufw allow https

ステータスをもう一度確認して確認します。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
ステップ2-キャディをインストールする

Caddyをインストールする方法はいくつかあります。これには、Dockerのインストール、公式リポジトリの使用、またはソースからのビルドが含まれます。ソースからの構築方法は、サードパーティのモジュール/プラグインを介してのみ追加できる機能が必要な場合に役立ちます。

このチュートリアルでは、Ubuntu/Debianベースのシステム用の公式のCaddyリポジトリを使用することに固執します。

リポジトリをリストに追加します。

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update

これにより、 /etc/apt/sources.list.dにキャディリポジトリファイルが作成されます。 キャディのリポジトリへの場所を含むディレクトリ。

キャディをインストールします。

$ sudo apt install caddy

これにより、CaddyWebサーバーが自動的にインストールされて実行されます。ブラウザでhttp:// を開くと、次のページが表示されます。

ステップ3-PHPをインストールする

OndrejのPHPリポジトリをインストールします。

$ sudo add-apt-repository ppa:ondrej/php

PHP7.4をいくつかの追加パッケージと一緒にインストールします。

$ sudo apt install php-cli php-fpm php-mysql

PHPが正しく機能しているかどうかを確認します。

$ php --version

同様の出力が表示されるはずです。

PHP 7.4.6 (cli) (built: May 14 2020 10:03:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
ステップ4-MariaDBをインストールする

MariaDBはMySQLのドロップイン代替品です。つまり、MariaDBを実行および操作するコマンドはMySQLのコマンドと同じです。

Mariadbの公式リポジトリを追加します。 MariaDBのリポジトリページから、サーバーの場所に近い別のミラーを選択できます。

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu f
ocal main'

MariaDBをインストールするには、次のコマンドを発行します。

$ sudo apt install mariadb-server

MariaDBが正しくインストールされているかどうかを確認してください。

$ mysql --version

次の出力が表示されます。

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

MariaDBサービスを有効にします。

$ sudo systemctl enable mariadb
ステップ5-MariaDBを構成する

次のコマンドを実行して、rootパスワードの指定、匿名ユーザーの削除、rootログインのリモートでの禁止、テストテーブルの削除などのデフォルト設定を実行します。

$ sudo mysql_secure_installation

MariaDB 10.4では、ルートパスワードと unix_socketのどちらを使用するかを尋ねられます。 プラグイン。 unix_socket プラグインを使用すると、Linuxユーザーの資格情報を使用してMariaDBにログインできます。 phpMyAdminなどのサードパーティ製アプリを使用するには、従来のユーザー名/パスワードが必要ですが、より安全であると見なされます。 unix_socketの使用に固執します このチュートリアルのプラグイン。データベース用に作成した特定のユーザーを介して、phpMyAdminを引き続き使用できます。

Enterキーを押すと、デフォルトのオプション(大文字のオプション、この場合はY)が選択されます。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] [PRESS ENTER]
 ... 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? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB 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? [Y/n] [PRESS ENTER]
 \- 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? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDBのSQLシェルにログインします。

$ sudo mysql

プロンプトが表示されたら、rootパスワードを入力します。

テストデータベースとアクセス許可を持つユーザーを作成します。 databaseを置き換えます およびuser あなたの選択で。 passwordを置き換えます 強力なパスワードを使用します。

CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';

MySQLシェルを終了します。

exit
ステップ6-キャディを構成する

キャディは、API呼び出し、JSONファイル、またはキャディファイルなど、いくつかの方法で構成できます。 Caddyfileは、チュートリアルで使用するCaddyを構成する最も簡単な方法です。

Caddyを構成する前に、サイトのルートディレクトリを作成する必要があります。

$ sudo mkdir -p /var/www/example.com/html

-p フラグは、欠落している親ディレクトリも作成します。

また、Caddyのログファイルを保存するためのディレクトリを作成する必要があります。

$ sudo mkdir /var/log/caddy

インストール時にCaddyサーバーがユーザーcaddyを作成します そのためのタスクを処理します。 Caddyがログディレクトリにアクセスして書き込むことができるように、ログディレクトリにアクセス許可を与える必要があります。

$ sudo chown -R caddy:caddy /var/log/caddy

インストール中に、Caddyは / etc / caddy / CaddyfileにデフォルトのCaddyfileを生成しました 。開きます。

$ sudo nano /etc/caddy/Caddyfile

次のようになります。

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
:80

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

:80 ポート番号80を介してすべてを提供するようにCaddyに指示します。root サイトのホームディレクトリのパスを設定します。 file_server Caddyを静的ファイルサーバーとして実行できるようにします。

上記のコードを次のコードに置き換えます。

{
	experimental_http3
}
example.com {
    root * /var/www/example.com/html
    log {
        output file /var/log/caddy/example.com.access.log {
        	roll_size 3MiB
	        roll_keep 5
	        roll_keep_for 48h
        }
        format console
    }
    encode gzip zstd
    php_fastcgi unix//run/php/php7.4-fpm.sock
   
    tls [email protected] {
    	protocols tls1.2 tls1.3    	
    }
}

以下のCaddyfileのすべてのセクションを見ていきましょう。

  • ホスト名を指定しない限り、Caddyfileの最初のブロックはグローバルブロックであり、ホスト名がサイトブロックになります。グローバルブロックは、サーバーの下でホストするすべてのサイトに適用されるディレクティブを伝送します。この例では、実験的なHTTP/3プロトコルのサポートを有効にしました。グローバルブロックは完全にオプションであり、いつでもサイトブロックから直接Caddyfileを開始できます。
  • 次のブロックはサイトブロックです。サーバー上にサイトが1つしかない場合は、構成を1つのブロックで囲む必要はありませんが、複数のサイトをホストする場合は、各サイトの構成を独自のブロックでホストする必要があります。サイトブロックは中括弧でマークされています。すべてのサイトブロックは、サイトのホスト名で始まります。
  • ログ HTTPリクエストロギングを有効にして設定します。 logなし ディレクティブ、キャディは何もログに記録しません。 出力 ログファイルの書き込み先を設定します。 format ログをエンコードまたはフォーマットする方法について説明します。 コンソール 人間が読みやすいようにログエントリをフォーマットします。
  • エンコード ここでのディレクティブは、サイトのGzipおよびZstandard圧縮を有効にします。
  • php_fastcgi php-fpmなどのPHPFastCGIサーバーにリクエストをプロキシします 。ここでは、Unixソケットを介してリクエストをリッスンしています。
  • tls ブロックは、SSL証明書とセキュリティに関連する設定を構成します。ここでは、TLSv1.2プロトコルとTLSv1.3プロトコルの両方のサポートを有効にしました。デフォルトでは、CaddyはそのままTLSv1.2をサポートします。 Caddyは、すべてのサイトに対してSSL証明書も自動的に生成します。 CaddyにSSLを生成させたくない場合は、ホスト名の代わりにIPアドレスを使用するか、完全なURL(http://example.com)を指定することで生成できます。このような場合、CaddyはSSL証明書を生成しません。

これまで、始めるのに役立つCaddyfileの作成の絶対的な基本について説明してきました。詳細については、公式ドキュメントをご覧ください。

ステップ7-PHPを構成する

これで、Caddyfileの準備ができたので、PHPを構成します。

まず、PHPプロセスのユーザー名を変更する必要があります。ファイル/etc/php-fpm.d/www.confを開きます 。

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

user =www-dataを見つけます およびgroup=www-data ファイル内の行をcaddyに変更します 。

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

また、 listen.owner =www-dataの行を見つけます およびlisten.group=www-data ファイル内でそれらをcaddyに変更します 。

listen.owner = caddy
listen.group = caddy

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

PHP-fpmプロセスを再起動します。

$ sudo systemctl restart php7.4-fpm
ステップ8-デモサイトを起動する

Caddyfileを作成し、サーバーで実行するようにPHPを構成したので、デモWebサイトを作成して起動します。

ドメイン名がサーバーのIPアドレスを指していることを確認してください。

Caddyサーバーを再起動して、上記で作成したCaddyfileの変更を適用します。

$ sudo systemctl restart caddy

Caddyサーバーのステータスをチェックして、正しく機能していることを確認します。

$ sudo systemctl status caddy
? caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-05-20 07:09:25 UTC; 2s ago
       Docs: https://caddyserver.com/docs/
   Main PID: 25410 (caddy)
      Tasks: 7 (limit: 1074)
     Memory: 17.8M
     CGroup: /system.slice/caddy.service
             ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Obtain: Lock acquired; proceeding...
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Started certificate maintenance routine
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registering account for [email protected]
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Waiting on rate limiter...
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Done waiting
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Obtaining bundled SAN certificate given a CSR
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4696123289
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: use tls-alpn-01 solver
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS handshake error from 127.0.0.1:39466: EOF

上から、Caddyfileの作成後にサーバーを最初に再起動したときに、Caddyが証明書を自動的に生成したことがわかります。

テストページを作成して、CaddyがPHPをレンダリングし、MariaDBデータベースに接続できることを確認しましょう。

$ sudo nano /var/www/example.com/html/test.php

次のコードをエディターに貼り付けます。 "user"を置き換えます および"password" 以前に作成したMariaDBクレデンシャルを持つフィールド。

<html>
<head>
    <title>Caddy Demo Site</title>
    <style type="text/css">
        #wrap {
            width: 900px;
            margin: 0 auto;
        }
    </style>
</head>
<body id="wrap">
    <h2>Caddy Demo Site</h2>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "user";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。

https://example.com/test.phpにアクセスします Webブラウザで。次のページが表示されます。

エラーメッセージが表示された場合、またはページがまったく読み込まれない場合は、構成を再確認してください

満足したら、テストファイルを削除します。

$ sudo rm /var/www/example.com/html/test.php
結論

これで、PHPおよびMariaDBSQLとともにCaddyWebサーバーをインストールしたチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄でお尋ねください。


Ubuntu
  1. Ubuntu20.04にDHCPサーバーをインストールして構成する方法

  2. Ubuntu11.04にPHP5とMySQLを使用してCherokeeWebサーバーをインストールする方法

  3. Ubuntu13.10にApacheWebサーバーをインストールして構成する方法

  1. Ubuntu20.04にNFSサーバーをインストールして構成する方法

  2. Ubuntu20.04にMariadb10をインストールして構成する方法

  3. Ubuntu20.10にOpenLiteSpeedWebサーバーPHPとMariaDBをインストールする方法

  1. Ubuntu20.04にVNCをインストールして構成する方法

  2. Ubuntu18.04にVNCをインストールして構成する方法

  3. Ubuntu18.04にNFSサーバーをインストールして構成する方法