前回の記事[LinuxでのNginx + PHP環境の構成](https://blog.izgq.net/archives/895/)では、非常に多くの複雑な概念について説明しましたが、実際の使用方法について説明します。
最近、PHPの最新バージョンの PHP 7.2.0
バージョン(2017年12月14日)のリリースと同時にVPSを再インストールしたいので、最新バージョンの PHP
を直接インストールするだけです。
PHP
の公式ウェブサイトに直接アクセスしてください:[php.net](https://php.net/downloads.php)最新バージョンのダウンロードリンクを見つける
サーバー上のフォルダーを見つけ、 wget
を使用して PHP
のソースコードパッケージをダウンロードします。
wget http://am1.php.net/get/php-7.2.0.tar.gz/from/this/mirror -O php-7.2.0.tar.gz
解凍してスペア:
tar -zxvf php-7.2.0.tar.gz
一般的に、ソースコードのコンパイルとインストールが必要なこの種のソフトウェアの場合、インストール前に、プログラムが依存する必要のあるコンパイル環境とライブラリを準備する必要があります。以下は、最も重要な実際の経験です。
まず、コンパイル環境を準備します。 Ubuntu 16.04 LTS
には、デフォルトで組み込みのCおよびC ++ビルド環境はありません。build-essential
というパッケージをインストールできます。さらに、 PHP
には bison
も必要です。 re2c
と pkg-config
をインストールできます。apt
を介して直接インストールできます。
sudo apt install build-essential bison re2c pkg-config -y
次に、 PHP-7.2.0
の依存関係パッケージを準備する必要があります。そのほとんどは、 apt
を介してインストールできます。唯一の注意点は、 Ubuntu 16.04LTS
ミラーソースの libzip
バージョンが古すぎることです。 、 PHP
の zip
拡張子が暗号化された zip
ファイルの操作をサポートできるようにするには、新しいバージョンを手動でリリースする必要があります。
依存コマンドをインストールします。
sudo apt install build-essential bison re2c pkg-config libxml2-dev libbz2-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libgmp-dev libreadline6-dev libxslt1-dev libzip-dev
暗号化された zip
の必要性を処理するために PHP
を使用しない場合は、 apt
のデフォルトの libzip
パッケージを直接使用することもできます。コマンドは今すぐに提供されました。完全にサポートしたい場合は、 libzip
に移動する必要があります。公式ウェブサイトの次のものは、コンパイル時に個別に指定します。
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar -zxvf libzip-1.3.2.tar.gz
この時点でのディレクトリ構造は次のようになっています。〜ディレクトリで説明した操作を実行したとします。
~ /libzip-1.3.2/~/php-7.2.0/
次のステップは、 。/ configure
を実行して makefile
を生成することです。言うまでもなく、調整したルーチンに従ってください。ソースコードをダウンロードしていない場合は、 --with-libzip = ../ libzip-1.3.2 \
を --with-libzip \
に置き換えてください( \
の前にスペースが必要です!)
. /configure \
- - prefix=/usr/local/php \
- - with-config-file-path=/etc \
- - enable-fpm \
- - enable-inline-optimization \
- - disable-debug \
- - disable-rpath \
- - enable-shared \
- - with-libxml-dir \
- - with-xmlrpc \
- - with-mhash \
- - with-pcre-regex \
- - with-sqlite3 \
- - with-zlib \
- - with-libzip=../libzip-1.3.2 \
- - enable-bcmath \
- - with-iconv \
- - with-bz2 \
- - with-openssl \
- - enable-calendar \
- - with-curl \
- - with-cdb \
- - enable-dom \
- - enable-exif \
- - enable-fileinfo \
- - enable-filter \
- - with-pcre-dir \
- - enable-ftp \
- - with-gd \
- - with-openssl-dir \
- - with-jpeg-dir \
- - with-png-dir \
- - with-zlib-dir \
- - with-freetype-dir \
- - enable-gd-jis-conv \
- - with-gettext \
- - with-gmp \
- - with-mhash \
- - enable-json \
- - enable-mbstring \
- - enable-mbregex \
- - enable-mbregex-backtrack \
- - with-libmbfl \
- - with-onig \
- - enable-pdo \
- - with-mysqli=mysqlnd \
- - with-pdo-mysql=mysqlnd \
- - with-pdo-sqlite \
- - with-readline \
- - enable-session \
- - enable-shmop \
- - enable-simplexml \
- - enable-sockets \
- - enable-sysvmsg \
- - enable-sysvsem \
- - enable-sysvshm \
- - enable-wddx \
- - with-libxml-dir \
- - with-xsl \
- - enable-zip \
- - enable-mysqlnd-compression-support \
- - with-pear \
- - enable-opcache
以下の情報が表示されている場合は、コンパイルできることを意味します。他にエラーがある場合は、1つずつ確認する必要があります。
Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +| License:|| This software is subject to the PHP License, available inthis|| distribution in the file LICENSE. By continuing this installation || process, you are bound by the terms ofthis license agreement.|| If you do not agree with the terms ofthis license, you must abort || the installation process at this point.|+--------------------------------------------------------------------+
Thank you for using PHP.
config.status: creating php7.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/www.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
最初に PHP
ソースコードディレクトリを入力し、次に1行のコマンドを入力します。単純で失礼です。
cd php-7.2.0/
make && sudo make install
成功すると、次の情報が表示されます。
Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
Installing PHP CLI binary:/usr/local/php/bin/
Installing PHP CLI man page:/usr/local/php/php/man/man1/
Installing PHP FPM binary:/usr/local/php/sbin/
Installing PHP FPM defconfig:/usr/local/php/etc/
Installing PHP FPM man page:/usr/local/php/php/man/man8/
Installing PHP FPM status page:/usr/local/php/php/php/fpm/
Installing phpdbg binary:/usr/local/php/bin/
Installing phpdbg man page:/usr/local/php/php/man/man1/
Installing PHP CGI binary:/usr/local/php/bin/
Installing PHP CGI man page:/usr/local/php/php/man/man1/
Installing build environment:/usr/local/php/lib/php/build/
Installing header files:/usr/local/php/include/php/
Installing helper programs:/usr/local/php/bin/
program: phpize
program: php-config
Installing man pages:/usr/local/php/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment:/usr/local/php/lib/php/[PEAR] Archive_Tar - installed:1.4.3[PEAR] Console_Getopt - installed:1.4.1[PEAR] Structures_Graph- installed:1.1.1[PEAR] XML_Util - installed:1.4.2[PEAR] PEAR - installed:1.10.5
Wrote PEAR system config file at:/usr/local/php/etc/pear.conf
You may want to add:/usr/local/php/lib/php to your php.ini include_path
/root/php-7.2.0/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:/usr/local/php/include/php/ext/pdo/
この時点で、 PHP
がサーバーにインストールされています。
php
などのコマンドを介してコマンドラインから直接 php
を実行するには、次の方法で bin
ディレクトリをシステム環境変数に追加する必要があります。
vim /etc/profile
ファイルの最後に追加します。
PATH=$PATH:/usr/local/php/bin
export PATH
保存後、 source / etc / profile
を実行して、環境変数を有効にします。
テストがあります:
php -v
構成が正しければ、この出力を取得できます
PHP 7.2.0(cli)(built: Dec 4201717:09:34)( NTS )Copyright(c)1997-2017 The PHP Group
Zend Engine v3.2.0,Copyright(c)1998-2017 Zend Technologies
php-fpm
コマンドを追加します。
cp sapi/fpm/init.d.php-fpm /usr/local/bin/php-fpm
chmod +x /usr/local/bin/php-fpm
まず、デフォルト構成をコピーします。
cp php.ini-production /etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf
ウェブサイトの権限管理も非常に重要です。問題が発生する可能性は非常に低いですが、誰かが私たちのプログラムを覆さないことを保証することは困難です。したがって、ハッキングの場合にWebサイトによって引き起こされる害を最小限に抑えるために、 PHP-FPM
が自分のWebサイト上のファイルのみを操作でき、他の場所にアクセスできないようにする必要があります。
ここでのより安全な戦略は、Webサイトに関連するすべてのプログラムを website
グループで実行し、 nginx
ユーザーを使用して nginx
を実行し、 PHP-FPM
で異なるユーザーを構成して異なるWebサイトを実行することです。これを実稼働環境で構成することをお勧めします。
プログラム | グループ | ユーザー |
---|---|---|
Nginxサーバー | ウェブサイト | nginx |
Typechoブログ | ウェブサイト | サイト-1 |
別のPHPWebサイト | website | site-2 |
... | website | site-n |
もちろん、怠け者の場合は、1つのサイトのユーザーと構成のみを構成できます。また、セキュリティの追求によっては、各サイトがプールを共有することもできます。
まず、この website
ユーザーグループが必要です。これは、ここで groupaddwebsite
を使用して作成されます。
次に、対応するユーザーを作成し、このユーザーがログインできるように「シェル」を無効にします。
useradd -s /sbin/nologin -g website site-1
次に、サーバーにアップロードしたWebサイトディレクトリの所有者とグループを website:site-1
に変更します。ただし、Webサイトが / var / www / site-1
にあると仮定して、次のコマンドを実行します。
chown -R website:site-1/var/www/site-1
次に、ファイルのアクセス許可を「0755」に変更します。これは8進数で、「rwxr-xr-x」です。書き込みできるのは自分だけで、他のユーザーには読み取りと実行のアクセス許可しかありません。
chmod -R 0755/var/www/site-1
php-fpm
の新しい pool
(プロセスプールとも呼ばれます)構成を作成する必要があります。新しいWebサイトを追加するたびに、デフォルト構成から新しいWebサイトをコピーできます。たとえば、ここにコピーします。 site-1.conf
。
cp /usr/local/php/etc/php-fpm.d/www.conf.default/usr/local/php/etc/php-fpm.d/site-1.conf
次に、テキストエディタを開いて編集します。
vim /usr/local/php/etc/php-fpm.d/site1.conf
;
の先頭にあるコメントは無視してください。実際、これらの行を変更するだけで済みます。
; Start a newpool named 'www'.; the variable $pool can be used in any directive and will be replaced by the
; pool name('www' here)[www]
user = nobody
group = nobody
listen =127.0.0.1:9000
pool name
を名前に変更し、異なるサイトの名前を同じにすることはできません。たとえば、 site-1
に変更してから、 listen
のポートを変更して、異なる pool
が接続を監視するようにします。競合はありません。例を次に示します。
[ site-1]
user = site-1
group = website
listen =127.0.0.1:9000
保存後、 php-fpm start
を実行してWebサイトサービスを開始します。構成が変更されたら、 php-fpmreload
を呼び出して新しい構成を有効にします。
Ubuntu 16.04LTSは systemd
を介してサービスを管理するため、サービスは次のように設定できます。
vim /etc/systemd/system/php-fpm.service
私たちが書くコンテンツ:
[ Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[ Service]
Type=forking
ExecStart=/usr/local/bin/php-fpm start
ExecReload=/usr/local/bin/php-fpm reload
ExecStop=/usr/local/bin/php-fpm stop
[ Install]
WantedBy=multi-user.target
保存後、スタートアップを自動的に開始するように設定します。
systemctl enable php-fpm.service
Nginx
をインストールする方法はたくさんありますが、一般的に、 sudo apt installnginx
とともにインストールされた Nginx
は要件を満たすことができます。
まず、 nginx.conf
を変更して、実行中のユーザーと nginx
のユーザーグループを次のように変更します。
user nginx website;
次に、元のWebサイト構成が次のようになっていると想定して、 server
構成を変更します。
server {
listen 80;
server_name izgq.net;
root /var/www/site-1;}
最初に index
を設定し、デフォルトの index.php
を追加します。
index index.html index.php;
次に、前の記事[LinuxでのNginx + PHP環境の構成](https://blog.izgq.net/archives/895/)で、適切な構成を選択して貼り付けます。
一例:
server {
listen 80;
server_name izgq.net;
root /var/www/site-1;
index index.html index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;}}
保存したら、nginxに構成を再読み込みさせることを忘れないでください。
sudo service nginx reload
この操作を実行した後、あなたのウェブサイトは展開されました〜
参考記事:
[ CentOS7再インストールの道-PHP7のインストールと使用に関する記事・Mai Mai Xiaojia](https://blog.micblo.com/2017/01/24/CentOS7%E9%87%8D%E8%A3%85%E4%B9 %8B%E8%B7%AF-PHP7%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E7%AF%87 /)
Recommended Posts