编译安装部署Lnmp
编译安装nginx
useradd -r -s /sbin/nologin nginx
yum -y install zlib gcc gcc-c++ libgcc zlib-devel pcre pcre-devel openssl openssl-devel libxslt-devel gd gd-devel GeoIP GeoIP-devel libxml2 libxml2-dev
tar xf nginx-1.22.0.tar.gz
cd nginx-1.22.0/
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--with-file-aio \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_gunzip_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-pcre \
--with-http_v2_module
make -j 2 && make install
#配置
cd /usr/local/nginx
#修改部分配置
vim ./conf/nginx.conf
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
error_log logs/error.log notice;
worker_rlimit_nofile 65535;
events {
#设置工作模式
use epoll;
#设置最大连接数
worker_connections 65535;
}
http {
#指明可被解析的文件类型
include mime.types;
default_type application/octet-stream;
#定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $scheme $request_filename $args';
access_log logs/access.log main;
#关闭显示nginx版本号
server_tokens off;
sendfile on;
#防止网络阻塞
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#优化相关的配置
server_names_hash_bucket_size 128;
client_max_body_size 20m;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#打开压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#虚拟主机的开始
server {
#指定监听端口
listen 80;
#指定ip或者域名
server_name localhost 10.50.34.88;
#指定字体
#charset koi8-r;
charset utf-8;
#指定虚拟主机日志
access_log logs/host.access.log main;
#设置访问根时的回应
location / {
#设置工作目录
root html;
#设置主页
index index.html index.htm;
}
#设置404时的页面 /404.html指的是工作目录下的404.html
error_page 404 /404.html;
#redirect server error pages to the static page /50x.html
#指定5系列状态码时跳转页面
error_page 500 502 503 504 /50x.html;
#设置当访问/50x.html时的操作
location = /50x.html {
#设置当前的工作目录
root html;
}
}
}
#要不间断服务地重新启动Nginx,可以使用如下命令:
$ /usr/local/nginx/sbin/nginx -s reopen
$ /usr/local/nginx/sbin/nginx -s reload
#关闭Nginx服务
$ /usr/local/nginx/sbin/nginx -s stop
$ /usr/local/nginx/sbin/nginx -s quit
编译安装mysql
https://downloads.mysql.com/archives/community/
#安装依赖
yum -y install make gcc gcc-c++ ncurses ncurses-devel bison libtirpc-devel cmake3 bison-devel bison perl perl-devel openssl openssl-devel
#安装rpcsvc-proto
tar xf rpcsvc-proto-1.4.3.tar.xz
cd rpcsvc-proto-1.4.3/
./configure
make -j 2 && make install
#新建用户
useradd -r -s /bin/false mysql
mkdir /data/mysql
chown mysql.mysql /data/mysql
#升级为10.2.1版本
#安装第三方scl源仓库
yum -y install centos-release-scl
#安装gcc 10.2.1 的版本
yum install devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-binutils -y
#激活gcc 10.2.1
scl enable devtoolset-10 bash
#编译安装mysql
tar xf mysql-boost-8.0.28.tar.gz
cd mysql-8.0.28
cmake3 . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/data/mysql/mysqld.sock \
-DEXTRA_CHARSETS=all \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=0 \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_BOOST=boost
make -j 12 && make install
#新建快捷方式
ln -s /usr/local/mysql/bin/* /usr/local/bin/
#新建日志文件夹
mkdir -p /usr/local/mysql/logs/
#新建配置文件
rm -rf /etc/my.cnf
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
innodb_log_file_size=1024M
default-authentication-plugin=mysql_native_password
character-set-server=utf8
collation-server=utf8_bin
[client]
port=3306
default-character-set=utf8
socket=/data/mysql/mysql.sock
#修改根目录权限
chown -R mysql:mysql /usr/local/mysql/
#初始化
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
#复制服务管理脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#添加服务
chkconfig --add mysqld
#启动服务
service mysqld start
#访问数据库
mysql
#修改root密码
mysql> alter user "root"@"localhost" identified by "xxxxxxx";
mysql> flush privileges;
#新建用户
mysql> create user 'root'@'%' identified by 'xxxxxxx';
mysql> grant all privileges on *.* to "root"@'%';
mysql> flush privileges;
如果编译过程中出现下面的问题,可以通过扩展swap解决,或者接着再编译也行
解决方案:
#获取要增加的2G的SWAP文件块
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#创建SWAP文件
mkswap /swapfile
#激活SWAP文件
swapon /swapfile
#查看SWAP信息是否正确
swapon -s
#添加到fstab文件中让系统引导时自动启动
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
swapfile文件的路径在/var/下,编译完后, 如果不想要交换分区了, 可以删除。
删除交换分区:
swapoff /swapfile
rm -rf /swapfile
至此,问题解决。
编译安装PHP
https://www.php.net/downloads.php
依赖库安装
yum -y install libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel libjpeg libjpeg-devel curl curl-devel openssl openssl-devel sqlite-devel
还需要手动安装libzip
$ cd /data/
$ wget https://libzip.org/download/libzip-1.3.2.tar.gz
$ tar xf libzip-1.3.2.tar.gz
$ cd libzip-1.3.2/
$ ./configure && make && make install
$ export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
安装remi源
https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/
$ wget https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
$ rpm -ivh remi-release-7.rpm
用remi源安装oniguruma5php
$ yum -y install --enablerepo=remi oniguruma5php oniguruma5php-devel
编译安装PHP7
下载php7安装包
https://www.php.net/downloads.php#v7.4.30
$ cd /data/
$ tar xf php-7.4.30.tar.gz
$ cd php-7.4.30/
$ ./configure \
--prefix=/usr/local/php7 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-zlib \
--with-curl \
--enable-gd \
--with-jpeg=/usr \
--with-freetype=/usr \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
-enable-tokenizer \
--with-zip
$ make && make install
$ cp php.ini-production /usr/local/php7/lib/php.ini
$ cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
--with-pdo-mysql=mysqlnd
表示使用mysqlnd驱动,这里选项涉及两个概念,一个是pdo,另一个是mysqlnd.
PDO是PHP Data Objects的缩写,它是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得PHP应用不用去关心具体要连接的数据库类型,也就是说,如果使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Oracle到MySQL,仅仅需要修改很少的PHP代码。它的功能类似于JDBC、ODBC、DBI之类接口。因此,这里的"--with-pdo-mysql"就是PHP与MySQL进行连接的方式。
mysqlnd是mysql native driver的简写,它是由PHP官方提供的mysql驱动连接代码,它出现的目的是代替旧的libmysql驱动,而libmysql是mysql官方自带的mysql与php连接的驱动,从PHP5.3开始已经不推荐使用libmysql驱动,而建议使用mysqlnd,而在PHP7版本中,libmysql驱动已经被移除。
因此,在PHP7中,“--with-mysql=mysqlnd”的写法已经被废除。另外,由于mysqlnd内置于PHP源代码,因此在编译安装php时就不需要预先安装好mysql, 这将减化不少安装工作量。
--with-mysqli=mysqlnd
mysqli叫做 “MySQL增强扩展”。也是PHP连接mysql数据库的一种方式,这里也使用mysqlnd驱动进行连接。
Nginx与PHP-FPM整合原理
PHP-FPM是一个第三方的FastCGI进程管理器,最先它是作为PHP的一个补丁来开发的,现在PHP-FPM已经集成到了PHP源码中,在安装PHP的时候,通过指定“--enable-fpm”选项即可启用PHP-FPM功能。
PHP-FPM管理的进程包含master进程和worker进程两种。master进程只有一个,主要负责监听端口,接收来自Web Server的请求,而worker进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌了一个PHP解释器,是PHP代码真正执行的地方。
那么Nginx又是如何发送请求给PHP-FPM的呢,这就要从Nginx层面讲起了,我们知道,Nginx不仅仅是一个Web服务器,也是一个功能强大的代理服务器,除了进行http请求的代理,也可以进行许多其他协议请求的代理,包括本节介绍的与PHP-FPM相关的FastCGI协议。为了能够使Nginx理解FastCGI协议,Nginx提供了一个FastCGI模块来将http请求映射为对应的FastCGI请求,这样,Nginx就可以将请求发送给PHP-FPM了,也就实现了Nginx与PHP-FPM的集成。
修改配置文件
$ cd /usr/local/php7/
$ cp etc/php-fpm.conf.default etc/php-fpm.conf
$ cat /usr/local/php7/etc/php-fpm.conf | egrep -v '((^$)|^;)'
[global]
include=/usr/local/php7/etc/php-fpm.d/*.conf
$ cd etc/php-fpm.d/
$ cp www.conf.default www.conf
$ cat /usr/local/php7/etc/php-fpm.d/www.conf | egrep -v '((^$)|(^;))'
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 50
-
user和group用于设置运行php-fpm进程的用户和用户组。
-
listen是配置php-fpm进程监听的IP地址以及端口,默认是127.0.0.1:9000
-
pm.max_children用于设置php-fpm的进程数。
-
pm:pm用来指定php-fpm进程池开启进程的方式,有两个值可以选择,分别是static(静态)和dynamic(动态)。
-
pm.max_children:在static方式下表示固定开启的php-fpm进程数量,在dynamic方式下表示开启php-fpm的最大进程数。
-
pm.start_servers:表示在dynamic方式下初始开启php-fpm进程数量。
-
pm.min_spare_servers:表示在dynamic方式空闲状态下开启的最小php-fpm进程数量。
-
pm.max_spare_servers:表示在dynamic方式空闲状态下开启的最大php-fpm进程数量,这里要注意pm.max_spare_servers的值只能小于等于pm.max_children的值。
配置Nginx来支持PHP
$ vim /usr/local/nginx/conf/nginx.conf
# 在server下配置个location
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
启动nginx和php-fpm服务
$ /usr/local/php7/sbin/php-fpm
$ /usr/local/nginx/sbin/nginx
测试Nginx对PHP的解析功能
创建一个info.php文件,内容如下:
<?php phpinfo(); ?>
然后通过浏览器访问http://www.laohe.icu/index.html,默认会在浏览器显示“Welcome to Nginx!”表示Nginx正常运行。
接着在浏览器中访问http://www.iaohe.icu/info.php,如果PHP能够正常解析,会出现PHP安装配置以及功能列表统计信息。
也可以通过如下命令查看PHP安装的模块信息:
/usr/local/php7/bin/php -m
通过输出可以判断,目前已经成功安装了哪些模块,同时确认需要的模块是否已经正常安装,这里重点需要注意的是mysqli、mysqlnd、pdo_mysql、gd、curl、openssl、pcre等常用功能模块是否已经安装好。
测试PHP连接MySQL是否正常
1、mysqli方式连接MySQL的代码
cat /usr/local/nginx/html/1.php
<?php
$conn = mysqli_connect('127.0.0.1', 'root', 'xxxxxxx', 'mysql');
if(!$conn){
die("数据库连接错误" . mysqli_connect_error());
}else{
echo"数据库连接成功";
}
2、pdo-mysql方式连接MySQL的代码
cat /usr/local/nginx/html/2.php
<?php
try{
$pdo=new pdo('mysql:host=127.0.0.1;dbname=mysql','root','xxxxxxx');
}catch(PDDException $e){
echo "数据库连接错误";
}
echo "数据库连接成功";
?>
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17136371.html