理想论坛_专业20年的财经股票炒股论坛交流社区 - 股票论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2700|回复: 0

LNMP环境搭建(PHP7.4.0)

[复制链接]

9650

主题

9650

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
28966
发表于 2019-12-27 11:46 | 显示全部楼层 |阅读模式
目录
            
    作为一位PHP斥地者,我们必定要晓得怎样搭建PHP斥地情况,现在支流的PHP斥地情况组合是LAMP和LNMP,本文将先容怎样在CentOS7.*上搭建LNMP斥地情况。
各项版天职析:
CentOS7: 7.7
Nginx: 1.16.1
MySQL:5.7.28
PHP:7.4.0
预备工作

安装wget

wget 是一个从收集上自动下载文件的自在工具,支持经过 HTTP、HTTPS、FTP 三个最多见的TCP/IP协议下载,并可以可以操纵HTTP代理。
  1. sudo yum install wget
复制代码
安装net-tools

最小化安装CentOS7时假如没法操纵ifconfig命令,则必要安装net-tools,假如是安装的CentOS6版本则无需安装
  1. sudo yum -y install net-tools
复制代码
安装vim
  1. sudo yum -y install vim
复制代码
设备表示行号
  1. vim ~/.vimrc # 编辑.vimrc设备文件set nu # 输入set nu 退却诞保存
复制代码
封闭防火墙
  1. systemctl stop firewalld.service  #令封闭防火墙systemctl disable firewalld.service  #封闭防火墙开机自启动经过欣赏器输入IP测试能否乐成
复制代码
安装Nginx

安装依靠

(1) 安装 nginx 必要先将官网下载的源码举行编译,编译依靠 gcc 情况,假如没有 gcc 情况,则必要安装gcc-c++。
  1. yum -y install gcc gcc-c++
复制代码
(2) PCRE是一个Perl库,中文"Perl兼容的正则表达式库"。安装Nginx是为了使Nginx支持具有URI重写功用的rewrite模块,假如不安装pcre库,则Nginx没法操纵rewrite模块功用,Nginx的Rewrite模块功用几乎是企业利用必须。
  1. yum -y install pcre pcre-devel
复制代码
(3) zlib 库供给了很多种紧缩息争紧缩的方式, nginx 操纵 zlib 对 http 包的内容举行 gzip ,所以必要在 Centos 上安装 zlib 库。
  1. yum -y install zlib zlib-devel
复制代码
(4) OpenSSL是一个强大的平安套接字层密码库,囊括严重的密码算法、常用的密钥和证书封装治理功用及 SSL 协议,并供给丰富的利用步伐供测试或此外方针操纵。 nginx 不但支持 http 协议,还支持 https(即在ssl协议上传输http),所以必要安装 OpenSSL 库 。
  1. yum -y install openssl openssl-devel
复制代码
分析: yum安装方式安装的pcre版本比力低,不外底子不影响操纵,可是最好还是手动编译安装官网最新安定版的openssl。
检查底子依靠包
上面的依靠安装完成后可以经过以下命令检查各个依靠安装能否乐成
  1. rpm -qa pcre pcre-develrpm -qa zlib zlib-develrpm -qa pcre pcre-devel
复制代码
编译安装Nginx
  1. # 这里我们把安装包都放到了/usr/local/src目录下,便于同一治理cd /usr/local/src  #切换到软件包目录wget http://nginx.org/download/nginx-1.16.1.tar.gz   #下载nginx源码包useradd nginx -s /sbin/nologin -M   #建立nginx用户用于治理nginx步伐tar -zxvf nginx-1.16.1.tar.gz  #解压nginx源码包cd nginx-1.16.1#留意,这里由于自界说了openssl位置,make时会报错,必要点窜一个nginx源码里的一个conf文件#/usr/local/src/nginx-1.16.1/auto/lib/openssl/conf,点窜方式见印象笔记#预编译./configure \--user=nginx \--group=nginx \--prefix=/usr/local/nginx-1.16.1 \--with-http_v2_module \--with-http_ssl_module \--with-http_stub_status_modulemake && make install #编译 和 安装cd /usr/localln -s nginx-1.16.1 nginx  #建立nginx的软链接
复制代码
安装分析
  1. --prefix=PATH    #设备安装路劲--user=USER      #过程用户权限--group=GROUP    #过程用户组权限--with-http_v2_module  # HTTP2--with-http_stub_status_module   #激活状态信息--with-http_ssl_module  #激活ssl功用
复制代码
设备情况变量
  1. vim /etc/profileexport PATH=/usr/local/nginx/sbin:$PATHsource /etc/profile
复制代码
Systemd治理

新建并编辑/usr/lib/systemd/system/nginx.service 文件
  1. vim /usr/lib/systemd/system/nginx.service
复制代码
并增加以下内容(这里的设备是按照自己安装Nginx的途径来设备的,Nginx安装在了/usr/local目录下)
  1. [Unit]Description=The nginx HTTP and reverse proxy serverAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s stopPrivateTmp=true[Install]WantedBy=multi-user.target
复制代码
经过yum安装的nginx,默许的nginx.service设备以下,可以作为参考
  1. # /usr/lib/systemd/system/nginx.service[Unit]Description=The nginx HTTP and reverse proxy serverAfter=network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/run/nginx.pid# Nginx will fail to start if /run/nginx.pid already exists but has the wrong# SELinux context. This might happen when running `nginx -t` from the cmdline.# https://bugzilla.redhat.com/show_bug.cgi?id=1268621ExecStartPre=/usr/bin/rm -f /run/nginx.pidExecStartPre=/usr/sbin/nginx -tExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDKillSignal=SIGQUITTimeoutStopSec=5KillMode=processPrivateTmp=true[Install]WantedBy=multi-user.target
复制代码
重载daemon
实行下面的命令重新载入 systemd,扫描新的或有变更的单元即可
  1. systemctl daemon-reload
复制代码
设备开机自启
  1. systemctl enable nginx.service # 设备开机自启systemctl disable nginx.service # 取消开机自启办事
复制代码
Nginx办事治理常用命令
  1. systemctl status nginx.service # 检察Nginx状态systemctl start nginx.service # 开启Nginxsystemctl stop nginx.service # 封闭Nginxsystemctl reload nginx.service # 重载设备systemctl restart nginx.service  # 重启Nginx(相当于stop&start)
复制代码
办事启动检查
可以经过该命令查询80端口被谁占用
  1. lsof -i :80
复制代码
假如没法识别该命令,必要安装lsof
  1. sudo yum -y install lsof
复制代码
安装MySQL

安装依靠

(1)cmake是新版MySQL的编译工具,必须安装
  1. sudo yum -y install ncurses-devel perl perl-devel autoconf
复制代码
倒霉用yum方式安装cmake,由于默许的cmake版本较低,这会致使在背面安装PHP时出现版本太低,没法安装的题目,由于安装MySQL必要cmake,所以在这里间接装最新安定版cmake
  1. cd /usr/local/srcyum remove cmakewget https://github.com/Kitware/CMake/releases/download/v3.16.1/cmake-3.16.1.tar.gztar -zxvf cmake-3.16.1.tar.gzcd cmake-3.16.1./configure \--prefix=/usr/local/cmakemake && make installcd /usr/localln -s /usr/local/cmake/bin/cmake /usr/bin/cmake# ln -s /usr/local/cmake/share/cmake-3.16.1 /usr/share/cmake
复制代码
下载boost

假如安装的MySQL5.7及以上的版本,在编译安装之前必要安装boost,由于高版本mysql必要boots库的安装才可以一般运转。否则会报CMake Error at cmake/boost.cmake:81毛病
切换到/usr/local/src目录,然后在这个目录下下载boost
MySQL5.7.28要求boost的版本是1.59,更高版本的不适用MySQL5.7.28
  1. wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
复制代码
编译安装MySQL
  1. # 增加MySQL用户useradd -s /sbin/nologin -M mysql# 切换到/usr/src目录cd /usr/local/src# 下载MySQLwget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28.tar.gz# 解压MySQLtar -zxvf mysql-5.7.28.tar.gz#解压boost,并移至mysql/boosttar -zxvf boost_1_59_0.tar.gzmv boost_1_59_0 mysql-5.7.28/boost# 进到MySQL目录cd mysql-5.7.28# 预编译cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.28 \-DWITH_BOOST=boost \-DWITH_SYSTEMD=1 \-DWITH_SSL=system \-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \-DMYSQL_DATADIR=/var/lib/mysql/data \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DWITH_EXTRA_CHARSETS=all \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_MEMORY_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_INNODB_MEMCACHED=1 \-DWITH_DEBUG=OFF \-DWITH_ZLIB=bundled \-DENABLED_LOCAL_INFILE=1 \-DENABLED_PROFILING=ON \-DMYSQL_MAINTAINER_MODE=OFF \-DMYSQL_TCP_PORT=3306# 编译&安装make && make install# 建立软链接cd /usr/localln -s mysql-5.7.28 mysql
复制代码
设备情况变量
  1. # 增加到情况变量vim /etc/profileexport PATH=/usr/local/mysql/bin:$PATHsource /etc/profile
复制代码
点窜设备文件


  • 在/var/lib目录下建立一个mysql文件夹
    1. mkdir -p /var/lib/{mysql,mysql/data}touch /var/lib/mysql/mysqld.pidchown mysql.mysql -R /var/lib/mysql/
    复制代码
  • 点窜/etc/my.cnf文件
    1. # 点窜/etc/my.cnf文件,编辑设备文件以下[mysqld]character-set-server=utf8mb4collation-server=utf8mb4_general_cidatadir=/var/lib/mysql/datasocket=/var/lib/mysql/mysql.sock[mysqld_safe]log-error=/var/log/mysql/mysqld.logpid-file=/var/lib/mysql/mysqld.pid[client]default-character-set=utf8mb4
    复制代码
  • 建立mysqld.log 和 mysqld.pid文件,并点窜文件权限
    1. # 建立mysqld.log 和 mysqld.pid文件mkdir /var/log/mysqltouch /var/log/mysql/mysqld.logchown mysql.mysql -R /var/log/mysql/
    复制代码
  • 初始化数据库
    1. # 初始化数据库, –initialize 表示默许天生一个平安的密码,–initialize-insecure 表示不天生密码mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data
    复制代码
Systemd治理

建立一个/usr/lib/systemd/system/mysqld.service文件,然后编辑内容以下
  1. vim /usr/lib/systemd/system/mysqld.service
复制代码
  1. [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlType=forkingPIDFile=/var/lib/mysql/mysqld.pid# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0# Execute pre and post scripts as rootPermissionsStartOnly=true# Needed to create system tablesExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd# Start main serviceExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/lib/mysql/mysqld.pid $MYSQLD_OPTS# Use this to switch malloc implementationEnvironmentFile=/etc/my.cnf# Sets open_files_limitLimitNOFILE = 5000Restart=on-failureRestartPreventExitStatus=1PrivateTmp=false
复制代码
重载daemon
实行下面的命令重新载入 systemd,扫描新的或有变更的单元即可
  1. systemctl daemon-reload
复制代码
启动MySQL
  1. systemctl start mysqld.service # 启动MySQLsystemctl stop mysqld.service # 封闭MySQLsystemctl status mysqld.service # 检察MySQL状态
复制代码
开机自启
  1. systemctl enable mysqld.service # 设备开机自启systemctl disable mysqld.service # 取消开机自启
复制代码
登录MySQL
  1. mysql -u root -p #第一次登陆不必要密码,回车即可set password for root@localhost = password('root');  #点窜密码
复制代码
安装PHP

安装依靠
  1. sudo yum -y install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel libsqlite3x libsqlite3x-devel oniguruma oniguruma-devel
复制代码
升级libzip
  1. yum remove libzipcd /usr/local/srcwget https://libzip.org/download/libzip-1.5.2.tar.gztar -zxvf libzip-1.5.2.tar.gzcd libzip-1.5.2mkdir buildcmake .make && make installecho '/usr/local/lib64/usr/local/lib/usr/lib/usr/lib64'>>/etc/ld.so.confldconfig -v
复制代码
编译安装PHP
  1. cd /usr/local/srcwget http://hk1.php.net/get/php-7.4.0.tar.gz/from/this/mirror -O php-7.4.0.tar.gztar -zxvf php-7.4.0.tar.gzcd  php-7.4.0./configure \--prefix=/usr/local/php-7.4.0 \--enable-fpm \--with-fpm-user=nginx \--with-fpm-group=nginx \--with-zlib \--enable-mysqlnd \--enable-bcmath \--enable-gd \--with-pdo-mysql=mysqlnd \--with-mysqli=mysqlnd \--with-mysql-sock=/var/lib/mysql/mysql.sock \--with-jpeg \--with-freetype \--with-iconv \--with-openssl \--with-curl \--enable-mbstring \--enable-static \--enable-sockets \--enable-xmlmake && make install
复制代码
编译参数详解
  1. ./configure \--prefix=/usr/local/php-7.4.0 \ # 指定安装途径--enable-fpm \             # 表示激活PHP-FPM方式办事,即FactCGI方式运转PHP办事。--with-fpm-user=nginx \    # 指定PHP-FPM过程治理的用户为www,此处最好和Nginx办事用户同一。--with-fpm-group=nginx \   # 指定PHP-FPM过程治理用户组为www,此处最好和Nginx办事用户组同一。--with-zlib \ # 翻开zlib库的支持,用于http紧缩传输--enable-mysqlnd \--with-pdo-mysql=mysqlnd \--with-mysqli=mysqlnd \--with-mysql-sock=/var/lib/mysql/mysql.sock \--with-gd \        # 翻开gd库的支持--with-png-dir \--with-jpeg-dir \--with-freetype-dir \--with-openssl \   # 翻开openssl,加密传输时用到--with-curl \      # 翻开curl欣赏工具的支持 --enable-mbstring \ # 多字节,字符串的支持--enable-static \ # 天生静态链接库--enable-zip \ # 翻开对zip的支持--enable-sockets \ # 翻开 sockets 支持--enable-xml
复制代码
设备
  1. cd /usr/localln -s php-7.4.0 phpcp  /usr/local/src/php-7.4.0/php.ini-development /usr/local/php-7.4.0/lib/php.ini  vim /usr/local/php/lib/php.ini date.timezone = PRC  (大约在954行) expose_php = Off  #制止PHP信息袒露在http头中(大约369行)  display_errors = Off(生产情况设备为off,斥地情况就设备为On,便于调试) 分析:设备了dispaly_errors为off后,必要在php-fpm.conf中开启毛病日志记录途径error_log = log/php-fpm.log cd /usr/local/php cp etc/php-fpm.conf.default etc/php-fpm.confcd /usr/local/php/etc/php-fpm.d/cp www.conf.default www.confcd /usr/local/phpsbin/php-fpmps -e | grep php-fpm假如在编译PHP时指定了--with-mysql=mysqlnd和--with-pdo-mysql=mysqlnd的参数,那末在生产中大要会碰到socket毗连题目,打点法子是在php.ini里加入命令: pdo_mysql.default_socket=/usr/local/mysql/tmp/mysql.sock最好是在编译PHP的时候,指定mysql.socket的位置:--with-mysql-sock=/usr/local/mysql/tmp/mysql.sock
复制代码
治理PHP-FPM
  1. vim /usr/local/php/etc/php-fpm.confpid = run/php-fpm.piderror_log = log/php-fpm.log #24行这个在php.ini设备display_errors = Off时启用设备完以后重启办事器向过程发送信号,便可以完成过程治理禁止: kill -INT `cat /usr/local/php/var/run/php-fpm.pid`平滑禁止: kill -QUIT `cat /usr/local/php/var/run/php-fpm.pid`重启:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`重新翻开日志:kill -USR1 `cat /usr/local/php/var/run/php-fpm.pid`
复制代码
设备情况变量
  1. vim /etc/profileexport PATH=/usr/local/php/bin:$PATHsource /etc/profile
复制代码
设备Systemd办事

实在php-fpm.service文件php已经帮我们设备好了,只必要我们复制到指定位置,并启用就行了。
  1. cp /usr/local/src/php-7.4.0/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
复制代码
并编辑该文件
  1. vim /usr/lib/systemd/system/php-fpm.service
复制代码
php-fpm.service文件内容以下:
  1. # It's not recommended to modify this file in-place, because it# will be overwritten during upgrades.  If you want to customize,# the best way is to use the "systemctl edit" command.[Unit]Description=The PHP FastCGI Process ManagerAfter=network.target[Service]Type=simplePIDFile=/usr/local/php/var/run/php-fpm.pidExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.confExecReload=/bin/kill -USR2 $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target
复制代码
重载daemon
实行下面的命令重新载入 systemd,扫描新的或有变更的单元即可
  1. systemctl daemon-reload
复制代码
开机自启
  1. systemctl enable php-fpm.servicesystemctl disable php-fpm.service
复制代码
启动php-fpm
  1. systemctl start php-fpm.service
复制代码
关联Nginx和PHP

nginx.conf设备
  1. #user  nobody;# 有一个工作的子过程,可以自行点窜,但太大无益,由于要争取CPU# 一样平常设备CPU数 * 核数worker_processes  1; #error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {#一样平常是设备Nginx过程与毗连的特征#若几个同时工作    multi_accept on; #翻开同时继续多个新收集毗连请求的功用。    use epoll;  #操纵epoll事变驱动,由于epoll的性能相比其他事变驱动要好很多    worker_connections  10240; #这是指一个子过程最大答应毗连10240个毗连}http { # 这是设备http办事器的严重段    include       mime.types;    default_type  application/octet-stream;        #隐藏Nginx软件版本号    server_tokens off;        #激活tcp_nodelay功用,进步I/O性能    tcp_nodelay on;    # 设备读取客户端请求头数据的超不时候。此处的数值为15,其单元是秒,为履历参考值    client_header_timeout 15;    # 设备读取客户端请求体的超不时候    client_body_timeout 15;    # 指定响应客户真个超不时候    send_timeout 25;    # 上传文件巨细限制    client_max_body_size 8m;        #紧缩设备    gzip on;    gzip_min_length 1k;    gzip_buffers 4 16k;    gzip_http_version 1.0;    gzip_comp_level 2;    gzip_types text/css text/xml application/javascript;    gzip_vary on;    #include extra/gzip.config;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    include extra/*.conf;}
复制代码
安装Redis

编译安装
  1. # 解压源码文件tar -zxf redis-5.0.6.tar.gz# 切换到解压目录cd redis-5.0.6# 编译安装mkdir /usr/local/redis-5.0.6make PREFIX=/usr/local/redis-5.0.6 installmkdir /usr/local/redis-5.0.6/etccp redis.conf /usr/local/redis-5.0.6/etc/# 建立软链接cd /usr/localln -sf redis-5.0.6 redis
复制代码
设备情况变量
  1. vim /etc/profileexport PATH=/usr/local/redis/bin:$PATHsource /etc/profile # 使点窜立即见效
复制代码
设备布景运转

让redis以布景过程的形式运转
  1. vim /usr/local/redis/etc/redis.conf# daeonize no(改成)# 改成 ->daemonize yes
复制代码
设备Systemd办事

在 /etc/systemd/system/增加一个redis.service文件,并增加以下内容
  1. [Unit]Description=RedisAfter=network.target [Service]Type=forkingPIDFile=/var/run/redis_6379.pidExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.confExecStop=/usr/local/redis/bin/redis-cli shutdownPrivateTmp=true [Install]WantedBy=multi-user.target
复制代码
重载daemon
实行下面的命令重新载入 systemd,扫描新的或有变更的单元即可
  1. systemctl daemon-reload
复制代码
开机自启
  1. systemctl enable redis.service
复制代码
启动redis办事
  1. systemctl start redis.service
复制代码
参考材料

centos7 源码编译安装 mysql5.7
mysql在linux7下systemd的关连设备
Managing MySQL Server with systemd
centos7 7.3php编译安装
centos7下编译安装php7.3
cmake安装设备及入门指南
编译CMake 3.15 和 gcc 5.3.0
CentOS7升级OpenSSL到1.1.1

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|理想论坛_专业20年的财经股票炒股论坛交流社区 - 股票论坛

GMT+8, 2020-7-7 08:16 , Processed in 0.194694 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表