Linux CentOS 7 LNMP環境のインストール

16764 ワード

出典:私のブログサイトOceanicKang|《Linux CentOS 7インストールLNMP環境》
MySQLインストール
公式ドキュメント:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
MySQL公式Yum Repositoryのダウンロードとインストール
> rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

MySQLのインストール
> yum -y install mysql-community-server

MySQLの起動
> service mysqld start
#     Redirecting to /bin/systemctl start mysqld.service,       
> systemctl start mysqld.service

MySQLの実行ステータスの表示
> service mysqld status
# or
> systemctl status mysqld.service

起動の設定
> systemctl enable mysqld.service

初期パスワードの表示
> grep 'temporary password' /var/log/mysqld.log
#    ,     5Eatk=Q7iCPe

データベースへのアクセス
> mysql -uroot -p
#     Enter password       

データベースを操作するには、初期パスワードを変更する必要があります.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '     ';

【要件】パスワードは、少なくとも1つの大文字、1つの小文字、1つの数字、および1つの特殊文字を含み、総パスワード長は少なくとも8文字である
MySQL更新と更新しない
> yum -y update mysql-server
# or
> yum -y update
#      Yum  ,     MySQL,     Repository
> rpm -e --nodeps mysql80-community-release-el7-1.noarch

可視化MySQL管理ソフトウェアログイン許可
> grant all on *.* to root@'%' identified by '     ';

Nginxインストール
【注】Nginxを最適化するには、Yumではなくコンパイル方式でインストールします.ここではYumのインストールについてのみ説明します
Nginx公式Yum Repositoryのダウンロードとインストール
> rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

インストールNginx
> yum -y install nginx

Nginxの起動
> systemctl start nginx.service

80ポートをオンにし、ドメイン名またはIPからサイトにアクセス
> firewall-cmd --zone=public --add-port=80/tcp --permanent #    80   
> firewall-cmd --reload #      

起動の設定
> systemctl enable nginx.service

Nginx構成情報
説明
パス
Webサイトのファイル保存/usr/share/nginx/html
サイトのデフォルト設定/etc/nginx/conf.d/default.conf
カスタムNginxサイトプロファイル保存ディレクトリ/etc/nginx/conf.d/
Nginxグローバル構成/etc/nginx/nginx.conf
Nginx起動nginx -c /etc/nginx/nginx.conf
PHP取付
Yum Repositoryのダウンロードとインストール
> yum -y install epel-release
> rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

PHP 7を取り付ける.2
> yum -y install mod_php72w php72w-opcache php72w-cli php72w-fpm php72w-common php72w-devel php72w-mysql [...]

パッケージのインストール
拡張機能
mod_php72w
php72w, mod_php, php72w-zts
php72w-bcmath
php72w-cli
php-cgi, php-pcntl, php-readline
php72w-common
php-api, php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif, php-fileinfo, php-filter, php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-json, php-libxml, php-openssl, php-pcre, php-pecl-Fileinfo, php-pecl-phar, php-pecl-zip, php-reflection, php-session, php-shmop, php-simplexml, php-sockets, php-spl, php-tokenizer, php-zend-abi, php-zip, php-zlib
php72w-dba
php72w-devel
php72w-embedded
php-embedded-devel
php72w-enchant
php72w-fpm
php72w-gd
php72w-imap
php72w-interbase
php_database, php-firebird
php72w-intl
php72w-ldap
php72w-mbstring
php72w-mysql
php-mysqli, php_database
php72w-mysqlnd
php-mysqli, php_database
php72w-odbc
php-pdo_odbc, php_database
php72w-opcache
php72w-pecl-zendopcache
php72w-pdo
php72w-pdo_sqlite, php72w-sqlite3
php72w-pdo_dblib
php72w-mssql
php72w-pear
php72w-pecl-apcu
php72w-pecl-imagick
php72w-pecl-mongodb
php72w-pgsql
php-pdo_pgsql, php_database
php72w-phpdbg
php72w-process
php-posix, php-sysvmsg, php-sysvsem, php-sysvshm
php72w-pspell
php72w-recode
php72w-snmp
php72w-soap
php72w-sodium
php72w-tidy
php72w-xml
php-dom, php-domxml, php-wddx, php-xsl
php72w-xmlrpc
PHPバージョンと拡張機能を確認します
> php -v
> php -m

PHP+Nginx構成
PHP-FPMの設定
> vim /etc/php-fpm.d/www.conf
# ---------------------------
user = nginx
group = nginx

PHP-FPMの起動
> /usr/sbin/php-fpm

PHP-FPMサービスの確認
> ps -ef | grep php-fpm
> netstat -tlnp | grep 9000

Nginx構成の変更
> cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.backup #       
> vim /etc/nginx/conf.d/default.conf
# ----------------------------------
#     ,   root   fastcgi_param
location ~ \.php$ {
    root           /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Nginxリロード構成
> nginx -s reload

テストのPHPプログラムを作成する
> vim /usr/share/nginx/html/index.php
# -----------------------------------
<?php
    phpinfo();
?>

ブラウザ入力アドレスの表示
Sessionディレクトリへのアクセス権の設定
> cd /var/lib/php
> chown -R nginx:nginx *

PHP-FPM起動、停止、再起動
> systemctl start php-fpm   #   
> systemctl stop php-fpm    #   
> systemctl restart php-fpm #   

PHP-FPMプロファイルパス:/etc/php-fpm.conf and/etc/php-fpm.d/*.conf
Nginx最適化
TCMallocによるNginxのパフォーマンスの最適化
【注】ここのNginxはYumではなくコンパイルでインストールされています
libunwindダウンロードアドレス:http://download.savannah.nongnu.org/releases/libunwind/
gperftoolsダウンロードアドレス:https://gperftools.googlecode.com/files/
#    libunwind
> cd /opt
> wget http://download.savannah.nongnu.org/releases/libunwind/libunwind-1.2.1.tar.gz
> tar -zxvf libunwind-1.2.1.tar.gz
> cd libunwind-1.2.1
> ./configure && make && make install

#    google-perftools
> cd /opt
> wget https://gperftools.googlecode.com/files/gperftools-2.6.tar.gz
> tar -zxvf gperftools-2.0.tar.gz
> cd gperftools-2.0
> ./configure --enable-frame-pointers && make && make install

#    gperftools
> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
> /sbin/ldconfig

#      Nginx      
> ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-google_perftools_module
> make && make install

#       
> mkdir /tmp/tcmalloc
> chmod 777 /tmp/tcmalloc

#    Nginx     
> vim /usr/local/nginx/conf/nginx.conf
# ------------------------------------
# pid logs/nginx.pid;
google_perftools_profiles /tmp/tcmalloc;

#    Nginx
> service restart nginx

#   
> lsof -n | grep tcmalloc
> lsof -n | grep nginx

Nginxカーネル最適化
一般的な最適化パラメータは次のとおりです.
net.ipv4.tcp_max_tw_buckets = 6000        #    timewait   ,  180000
net.ipv4.ip_local_port_range = 1024 65000 #              
net.ipv4.tcp_tw_recycle = 1               #      timewait     
net.ipv4.tcp_tw_reuse = 1                 #       ,    timewait sockets        TCP   
net.ipv4.tcp_syncookies = 1               #      SYN Cookies,    SYN        ,   cookies     
net.core.somaxconn = 262144               #            TCP    ,  128。              
net.core.netdev_max_backlog = 262144      #                             ,                      
net.ipv4.tcp_max_orphans = 262144         #             TCP                    。        ,                  。              DOS   。          ,       ,           
net.ipv4.tcp_max_syn_backlog = 262144     #                         。    128MB        ,         1024,           128
net.ipv4.tcp_synack_retries = 1           #                   SYN+ACK     
net.ipv4.tcp_syn_retries = 1              #               SYN     
net.ipv4.tcp_fin_timeout = 1              #        FIN-WAIT-2      。     60  。           ,             WEB    ,                       
net.ipv4.tcp_keepalive_time = 30          #   keepalive      ,TCP    keepalive      。     2(  )

上記のカーネルパラメータ値を/etc/sysctl.confファイルに追加し、次のコマンドを実行して有効にします.
> /sbin/sysctl -p

プロファイルの最適化
コンフィギュレーション
パラメータ
説明
worker_processes
8
Nginxプロセス数は、CPU数で指定することを推奨し、一般的にその倍数(例えば2つのクアッドコアCPU計8)である.
worker_cpu_affinity
00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
各プロセスに対してCPUを割り当て、上の例では8つのプロセスを8つのCPUに割り当てるか、複数を書くか、1つのプロセスを複数のCPUに割り当てることができます.
worker_rlimit_nofile
65535
1つのNginxプロセスが開く最大ファイル記述子数の場合、理論値は最大オープンファイル数(ulimit-n)とNginxプロセス数を除くべきであるが、Nginx割当要求はそれほど均一ではないため、ulimit-nの値と一致することが望ましい
use epoll
epollを使用したI/Oモデル
worker_connections
65535
プロセスごとに許可される最大接続数、理論的にはNginxサーバ1台あたりの最大接続数はworker_processes * worker_connections
keepalive_timeout
60
keepaliveタイムアウト時間
client_header_buffer_size
4k
クライアントリクエストヘッダのバッファサイズは、システムのページングサイズに応じて設定できます.一般的に、1つのリクエストヘッダのサイズは4 kを超えません.
open_file_cache
max=65535inactive=60s
ファイル指定キャッシュが開き、デフォルトでは有効になりません.maxキャッシュ数を指定し、推奨ファイル数とオープンファイル数が一致し、inactiveはリクエストされていない時間が経過した後にキャッシュを削除することを指す.
open_file_cache_valid
80s
キャッシュの有効な情報をどのくらいチェックするかを指します.
open_file_cache_min_uses
1
open_file_Cacheコマンドのinactiveパラメータの時間内のファイルの最小使用回数が、この数値を超えると、ファイル記述子はキャッシュで開かれます.