FreeBSD10.1にNginx、MySQL、およびPHP(FEMP)スタックをインストールする方法
序章
Nginx、MySQL、およびPHPは、Web上で動的コンテンツを提供するための強力なソリューションとして簡単に組み合わせることができます。 これらの3つのソフトウェアは、FreeBSDマシンにインストールおよび構成して、FEMPスタックと呼ばれるものを作成できます。
このガイドでは、FreeBSD10.1サーバーにFEMPスタックをインストールする方法を示します。 より迅速に起動して実行するために、パッケージを使用してソフトウェアをインストールします。 これらのパッケージは、ほとんどのサーバーで適切に機能する適切なデフォルトを提供します。
Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.
コンポーネントをインストールします
まず、FreeBSDパッケージシステムを使用して、必要なすべてのソフトウェアをインストールします。 「install」コマンドは、使用可能なパッケージのローカルコピーを更新してから、要求したパッケージをインストールします。
sudo pkg install nginx mysql56-server php56 php56-mysql
これにより、コンテンツを提供するためのNginx Webサーバー、情報の保存に使用されるMySQLデータベースサーバー、および動的コンテンツを処理するためのPHP処理言語がダウンロードおよびインストールされます。
インストールが完了したら、必ず実行してください rehash
デフォルトを実行している場合はコマンド tcsh
シェル。 これにより、シェルはインストールした新しいアプリケーションを認識します。
rehash
終了したら、次に進んでコンポーネントの有効化と構成を開始できます。
すべてのサービスを有効にする
前のセクションでは、サーバーで実行する必要がある3つの個別のサービスをダウンロードしました。
FreeBSDがこれらを従来のサービスとして開始するためには、それらを有効にしたいことをFreeBSDに伝える必要があります。 これにより、それらを1回限りのアプリケーションではなくサービスとして処理できるようになり、起動時に自動的に起動するようにFreeBSDも構成されます。
まず、各サービスに設定する正しいrcパラメーターを知る必要があります。 にあるサービススクリプト /usr/local/etc/rc.d
ディレクトリ、を使用して各サーバーを有効にするために使用する必要があるパラメータを定義します rcvar
変数。 各サービスが何であるかを見ることができます rcvar
次のように入力すると、に設定されます。
grep rcvar /usr/local/etc/rc.d/*
次のようなリストが表示されます。
/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable
/usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable
/usr/local/etc/rc.d/dbus:rcvar=dbus_enable
/usr/local/etc/rc.d/mysql-server:rcvar=mysql_enable
/usr/local/etc/rc.d/nginx:rcvar=nginx_enable
/usr/local/etc/rc.d/php-fpm:rcvar=php_fpm_enable
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
ご覧のとおり、これにより、各サービスに設定する必要のあるパラメーターを簡単に出力できます。 スクリプト自体の名前(コロン文字までのパスの最後のコンポーネント)も、FreeBSDがサービスに使用する実際の名前を示しているので注目に値します。
これらのサービスを有効にするために、 /etc/rc.conf
sudo権限を持つファイル:
sudo vi /etc/rc.conf
内部に、開始したいサービスごとに行を追加します。 使用できます rcvar
サービスごとに検出したパラメータを「YES」に設定して、各サービスを有効にします。
mysql_enable="YES"
nginx_enable="YES"
php_fpm_enable="YES"
終了したら、ファイルを保存して閉じます。
PHPを構成する
次に、Webサーバーから送信されたPHPリクエストの処理を担当するPHP-FPMサービスを構成します。
開始するには、に変更します /usr/local/etc
オプションプログラムの構成ファイルが保存されているディレクトリ:
cd /usr/local/etc
このディレクトリには、変更したいPHP構成ファイルがいくつかあります。 PHP-FPM構成ファイル自体から始めます。 これを開く sudo
特権:
sudo vi php-fpm.conf
内部では、いくつかの異なるオプションを調整したいと思います。 まず、通信にネットワークポートの代わりにUnixソケットを使用するようにPHP-FPMを構成します。 これは、単一のサーバー内で通信するサービスにとってより安全です。
次のような行を見つけます。
listen = 127.0.0.1:9000
内のソケットを使用するようにこれを変更します /var/run
ディレクトリ:
listen = /var/run/php-fpm.sock
次に、作成するソケットの所有者、グループ、および権限セットを構成します。 次のようなこの構成を処理するオプションのコメントアウトされたグループがあります。
;listen.owner = www
;listen.group = www
;listen.mode = 0660
最初にコメントマーカーを削除して、これらを有効にします。
listen.owner = www
listen.group = www
listen.mode = 0660
終了したら、ファイルを保存して閉じます。
次に、作成する必要があります php.ini
PHPの一般的な動作を構成するファイル。 にコピーすることを選択できる2つのサンプルファイルが含まれていました php.ini
PHPが読み取るファイル。
The php.ini-production
ファイルは必要なものに近いので、それを使用します。 PHPがチェックするファイルに製品版をコピーします。
sudo cp php.ini-production php.ini
で編集するためにファイルを開きます sudo
特権:
sudo vi php.ini
内部では、を構成するセクションを見つける必要があります cgi.fix_pathinfo
行動。 コメントアウトされ、デフォルトで「1」に設定されます。 これをコメント解除して「0」に設定する必要があります。 これにより、プロセスに渡されたファイルが見つからない場合に、PHPがパスの一部を実行しようとするのを防ぐことができます。 この動作を阻止しない場合、悪意のあるユーザーがこれを使用して任意のコードを実行する可能性があります。
コメントを外す cig.fix_pathinfo
行を「0」に設定します。
cgi.fix_pathinfo=0
終了したら、ファイルを保存して閉じます。
PHP-FPMが完全に構成されたので、次のように入力してサービスを開始できます。
sudo service php-fpm start
これで、MySQLインスタンスの構成に進むことができます。
MySQLを構成する
MySQLの構成を開始するには、MySQLサービスを開始する必要があります。
sudo service mysql-server start
このコマンドを初めて実行すると、ファイルシステムに必要なディレクトリ構造が作成され、必要なデータベースファイルがインストールされます。 次に、MySQLサーバープロセスを開始します。
サービス開始後、インストールを保護する必要があります。 これは、と呼ばれるスクリプトを介して実行できます mysql_secure_installation
. これを実行します sudo
いくつかの安全でないデフォルトをロックダウンする特権:
sudo mysql_secure_installation
. . .
Enter current password for root (enter for none):
スクリプトは、MySQLルートアカウントの現在のパスワードを要求することから始まります。 このユーザーのパスワードはまだ設定されていないため、「ENTER」を押してこのプロンプトをバイパスできます。
Set root password? [Y/n]
次に、MySQLルートアカウントのパスワードを設定するかどうかを尋ねられます。 「ENTER」を押して、この提案を受け入れます。 管理者パスワードを選択して確認します。
次に、スクリプトは、デフォルトのMySQLインストールの安全でない状態を元に戻すのに役立つ追加の提案を続行します。 これらすべてのプロンプトで「ENTER」を押すだけで、提案されたすべてのアクションを完了できます。
MySQLサービスを再起動して、インスタンスがセキュリティの変更をすぐに実装するようにすることができます。
sudo service mysql-server restart
これで、MySQLインスタンスが希望どおりに稼働しているので、先に進むことができます。
Nginxを構成する
次のタスクは、Nginxをセットアップすることです。 開始するには、Webサーバーを起動する必要があります。
sudo service nginx start
これで、Nginxの構成を開始できます。 nginx
のディレクトリ /usr/local/etc
ディレクトリ:
cd /usr/local/etc/nginx
ここでは、メインのNginx構成ファイルを次のように開く必要があります。 sudo
特権:
sudo vi nginx.conf
内部では、Nginxインスタンスが他のコンポーネントと連携できるように変更を加えることができます。
開始するには、コメントを外して変更します user
ファイルの先頭にあるディレクティブ。 Webサーバーがとして動作する必要があります www
ユーザー、それが私たちのPHP-FPMインスタンスが探しているものだからです:
user www;
また、 worker_processes
システムに搭載されているCPUまたはコアの数。 (サーバーに搭載されているCPUの数を確認するには、次のように入力します sysctl hw.ncpu
コマンドラインから):
worker_processes 2;
次に、を使用してエラーの冗長性と場所を設定します error_log
指令。 次の場所にログインします /var/log/nginx/error.log
で info
ログレベル:
error_log /var/log/nginx/error.log info;
の中に http
ブロック、アクセスログも設定します。 これは次の場所にあります /var/log/nginx/access.log
:
access_log /var/log/nginx/access.log;
の中に server
ブロック、変更する必要があります server_name
サーバーのドメイン名またはIPアドレスを使用するためのディレクティブ。 サーバーを応答させることができます www
メインドメインの後にホスト名を追加することによってもホスト名:
server {
listen 80;
server_name example.com www.example.com;
. . .
を構成します root
と index
メインのディレクティブ server
ブロック。 ドキュメントルートは /usr/local/www/nginx
そして私たちのインデックスディレクティブは役立つことを試みる必要があります index.php
フォールバックする前のファイル index.html
また index.htm
ファイル。
これらのディレクティブを server
コンテキストでは、 location /
ブロック。 このブロックでは、代わりに try_files
404エラーでフォールバックする前に、ユーザーリクエストをファイルとして、次にディレクトリとして提供しようとするディレクティブ:
server {
. . .
root /usr/local/www/nginx;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
. . .
最後に、PHPファイルを処理するロケーションブロックを構成する必要があります。 このブロックは、で終わるすべてのリクエストに一致します .php
. ファイル自体のみを処理し、ファイルが見つからない場合は404エラーをスローします。
で構成したソケットを使用します php-fpm.conf
以前にファイルします。 他のFastCGIプロキシオプションも設定します。一部は、からパラメータを読み込みます。 fastcgi_params
ファイル。 明示的に設定する必要があります SCRIPT_FILENAME
PHPが実行するファイルを認識できるようにするためのパラメータ:
server {
. . .
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
コメントを削除すると、ファイルは次のようになります。
user www;
worker_processes 2;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name example.com www.example.com;
root /usr/local/www/nginx;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
}
終了したら、ファイルを保存して閉じます。
次に、ファイルで参照したログディレクトリとファイルを作成する必要があります。 まず、を作成します /var/log/nginx
ディレクトリ:
sudo mkdir -p /var/log/nginx
次に、空のログファイルを作成できます。
sudo touch /var/log/nginx/access.log
sudo touch /var/log/nginx/error.log
これで、ドキュメントルートを構成する準備が整いました。 ルートを次のように構成しました /usr/local/www/nginx
、しかし現在、これはへのシンボリックリンクです /usr/local/www/nginx-dist
将来的にパッケージ操作によって更新される可能性のあるディレクトリ。
リンクを破棄して、リンクされていないディレクトリを再度作成する必要があります。
sudo rm /usr/local/www/nginx
sudo mkdir /usr/local/www/nginx
Webサーバーをテストする必要があるため、 index.html
新しいWebルートにファイルします。
sudo cp /usr/local/www/nginx-dist/index.html /usr/local/www/nginx
ここにいる間、一時的なものも作成する必要があります info.php
PHP-FPMにリクエストを渡すNginxの機能をテストするために使用できるファイル。 を使用してドキュメントルート内にファイルを作成します sudo
特権:
sudo vi /usr/local/www/nginx/info.php
ファイルに次の内容を入力します。 これにより、PHP構成に関する情報を含むHTMLページが生成されます。
<?php phpinfo(); ?>
終了したら、ファイルを保存して閉じます。
これで、新しい構成を利用するためにNginxを再起動する準備が整いました。 まず、次のように入力して、構成ファイルの構文エラーをテストします。
sudo nginx -t
構成ファイルに検出可能な構文エラーがない場合は、次のようなものが表示されます。
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
上記のコマンドがエラーで返される場合は、エラーが見つかった場所でNginx構成ファイルを再度開き、問題の修正を試みてください。
構成が正しくチェックアウトされたら、Nginxを再起動できます。
sudo service nginx restart
結果のテスト
これでWebスタックが完成しました。 私たちがしなければならないのは、それをテストすることだけです。
Webブラウザーで、ベースドメイン名またはサーバーのIPアドレスに移動することから始めます。
http://example.com
の内容が表示されます index.html
コピーしたファイル。 次のようになります。
これは、Nginxが稼働していて、単純なHTMLページを提供できることを示しています。
次に、チェックアウトする必要があります info.php
作成したファイル。 ブラウザで、ドメイン名またはサーバーのIPアドレスにアクセスし、続いて /info.php
:
http://example.com/info.php
次のようなPHP情報ページが生成されます。
このページが表示されている場合は、FreeBSDサーバーでFEMPスタックが正常に構成されています。
構成をテストした後、を削除することをお勧めします info.php
インストールに関する機密情報を提供する可能性があるため、ドキュメントルートからファイルを作成します。
sudo rm /usr/local/www/nginx/info.php
このファイルは後でいつでも簡単に再作成できます。
結論
これで、動的PHPコンテンツを処理し、MySQLを使用してデータを保存できるNginxを搭載した完全に機能するWebサーバーができました。 この構成は、他のさまざまな構成やWebアプリケーションのベースとして使用できます。