Ubuntu16.04はPHP7.2をコンパイルしてインストールします

前回の記事[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

PHP7.2.0のコンパイルとインストールを開始します##

最初に 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などのコマンドを介してコマンドラインから直接 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を構成する###

php-fpmコマンドを追加します。

cp sapi/fpm/init.d.php-fpm /usr/local/bin/php-fpm
chmod +x /usr/local/bin/php-fpm

PHPおよび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

PHP-FPM ###のユーザーとユーザーグループを設定します

ウェブサイトの権限管理も非常に重要です。問題が発生する可能性は非常に低いですが、誰かが私たちのプログラムを覆さないことを保証することは困難です。したがって、ハッキングの場合に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を呼び出して新しい構成を有効にします。

PHP-FPM ###を自動的に開始するように設定します

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をインストールして構成します##

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

Ubuntu16.04はPHP7.2をコンパイルしてインストールします
ubuntu18.04python3.8をコンパイルしてインストールします
UbuntuでQEMUをコンパイルしてインストールします
Ubuntu18.04ソースコードはffmpeg4.1をコンパイルしてインストールします
UbuntuはPHPとPHPNginxの設定方法をインストールします
Ubuntu環境でPHPとNginxをコンパイルしてインストールする方法
CentOs7.3はNginx1.9.9をコンパイルしてインストールします
CentosはGitをコンパイルしてインストールします
ubuntuはGitLabをインストールして構成します
Centos7はntp-4.2.8p11をコンパイルしてインストールします
CentOS6.9はpythonをコンパイルしてインストールします
CentOS6はpython3をコンパイルしてインストールします
Ubuntu16.04のインストールとSVNの構成
Ubuntu16.04VMwareのインストールとアンインストール-Workstation14
Ubuntu18.04.1のソースコードからOpenJDK8をコンパイルしてインストールします
CentosはLAMPをコンパイルしてインストールします(apache-2.4.7 + mysql-5.5.35 + php 5.5.8)+ Redis
CentOSYumはMySQL5.6をコンパイルしてインストールします
Centos5.2でLAMPをコンパイルしてインストールします
UbuntuにMySQLをインストールして構成する
CentOS6.xはNginxをコンパイルしてインストールします
UbuntuにDockerをインストールして構成する
CentOS7はL(A | N)MP環境をコンパイルしてインストールします
UbuntuにGerritをインストールしてデプロイする
Ubuntu16.04にnodejsとnpmをインストールします
LinuxCentOS6はPytをコンパイルしてインストールします
[毎日] php pdo拡張機能をインストールし、ubuntuの下にデータベースをインポートします
CentOS7でlibmodbusライブラリをコンパイルしてインストールします
ubuntu18.04インストールpython2
ubuntu18.04インストールドッカー
ubuntu12.04インストールpython3
Ubuntuインストールガイド
CentOS7.5ソースコードはmysql5.7.29をコンパイルしてインストールします
[毎日] Win10はubuntuサブシステムを開いてインストールします
UbuntuはElasticsearchとelasticsearch-analysis-ikワードセグメンテーションをインストールします
ubuntuインストールnodejs
ubuntu16インストールasp.net
ubuntuインストールleanote
ubuntuと基本的な使用法にdockerをインストールします
Ubuntu19.10はC言語プログラムをコンパイルして実行します
Centos7はMySQL8問題レコードをコンパイルしてインストールします
Ubuntuにフォントをインストールし、デフォルトのフォントを切り替えます
CentOSはPHPをインストールします
ubuntuはJenkinsをインストールします
docker install ubuntu
ubuntuインストールelasticsearch
UbuntuにCUDAとCUDNNをインストールしてアンインストールします
Centos8でnodejsとyumをコンパイルしてインストールします
CentOS7.4ソースコードはMySQL8.0をコンパイルしてインストールします
ubuntu16.0.1インストールパゴダ
ubuntu18.04インストールpython
LinuxはDockerをインストールし、Ubuntuシステムを実行します
Ubuntuインストールftpサーバーと考えられる問題
Ubuntu20.04をインストールしてNVIDIAドライバーをインストールする方法
ubuntu18.04インストールteamviewer
ubuntu install sendmail
Ubuntu環境でソースコードからxdebugをコンパイルしてインストールする方法
Ubuntu 16.04 /18.04にPycharmとIpythonをインストールする方法
Ubuntu 16.04にJDKをインストールし、環境変数を構成します
Ubuntu18.04にGogsをインストールして構成する方法
Ubuntu18.04にCyberpanelをインストールして構成する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法