LNMP架构——架构搭建之Nginx,MYSQL,PHP的源码编译

目录

  • 一、LNMP
  • 二、LNMP的工作原理
  • 三、源码编译
    • 1、MYSQL数据库的源码编译
    • 2、PHP的源码编译
    • 3、Nginx的源码编译

一、LNMP

  • LNMP = Linux+Nginx+Mysql+PHP
  • LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。
  • LNMP和LAMP唯一不同是:提供web服务的是Nginx而不是Apache。在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。Nginx直接处理静态请求,动态请求会转发给php-fpm。

二、LNMP的工作原理

  • 浏览器发送http request请求到服务器(Nginx)
  • 服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序)
  • PHP-FPM不做处理,然后调用PHP解析器进程,PHP解析器解析php脚本信息
  • PHP解析器进程可以启动多个,进行并发执行,然后将解析后的脚本返回到PHP-FPM
  • PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx
  • 服务器再通过Http response的形式传送给浏览器
  • 浏览器再进行解析与渲染然后进行呈现

三、源码编译

1、MYSQL数据库的源码编译

  • 解压安装 mysql:
tar zxf mysql-boost-5.7.28.tar.gz
  • 创建 mysql 用户:
useradd -s /sbin/nologin -M mysql
  • 编译MYSQL:
    cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等。
yum install -y cmake	##编译mysql需要用的包
cd mysql-5.7.28		##进入mysql解压后的目录
##编译:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \			##安装位置
> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ 	##指定套接字文件位置
> -DEXTRA_CHARSETS=all \ 										##扩展字符集
> -DDEFAULT_CHARSET=utf8 \										##默认字符集
> -DDEFAULT_COLLATION=utf8_general_ci \							##默认字符校对
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \							##安装myisam 存储引擎
> -DWITH_MYISAM_STORAGE_ENGINE=1 \								##安装innodb存储引擎
> -DWITH_MEMORY_STORAGE_ENGINE=1 \								##安装memory存储引擎
> -DWITH_READLINE=1 \											##支持readline库
> -DENABLED_LOCAL_INFILE=1 \									##启用加载本地数据
> -DMYSQL_USER=mysql \											##指定mysql运行用户
> -DMYSQL_TCP_PORT=3306											##指定mysql端口
  • 根据提示解决依赖性问题:
yum install -y gcc gcc-c++ ncurses-devel openssl-devel -y
  • 安装:
make && make install 
  • 修改权限:
cd /usr/local/lnmp/mysql
mkdir data
chown -R root .
chown -R mysql data
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/
  • 复制配置文件:
cd /usr/local/lnmp/mysql/mysql-test/include
cp default_my.cnf /etc/my.cnf
cd /usr/local/lnmp/mysql/support-files
cp -a mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig mysqld on
systemctl status mysqld
  • 初始化:
mysqld --user=mysql --initialize	##以mysql 用户身份初始化

注意:
初始化会生成一个临时密码,用于登录 mysql(要记住此密码)
比如:

2019-01-03T09:06:09.448851Z 1 [Note] A temporary password is generated
for root@localhost: r##9VqAoA/au

r##9VqAoA/au就是临时密码

  • 启动进入mysql:
systemctl start mysqld
mysql -uroot -pr##9VqAoA/au: ##使用刚才的临时密码(会有报错,所以需要安全初始化)
  • 安全初始化:
mysql_secure_installation	##然后会提示是否启用密码检测插件,直接回车不启用,否则会要求密码有大小写和特殊字符等要求。剩余全部选 y

2、PHP的源码编译

  • 解压安装包:
tar zxf php-7.4.1.tar.gz
  • 解决依赖性:
yum -y install bzip2
  • 进入解压后的目录,开始编译:
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config \
--enable-soap \
--enable-mbstring=all \
--enable-sockets \
--with-pdo-mysql=/usr/local/lnmp/mysql \
--enable-gd \
--without-pear \
--enable-fpm
  • 根据编译过程中的报错逐步解决依赖性:
    可能会需要安装的包:
yum install -y libxml2-devel
yum install -y libpng-devel
yum install -y oniguruma-*
  • 安装:
make && make install
  • 拷贝更改配置文件:
cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf		
##修改
pid = run/php-fpm.pid
  • 拷贝子配置文件:
cd /usr/local/lnmp/php/etc/php-fpm.d
cp www.conf.default www.conf
vim www.conf	
##修改
user = nginx
group = nginx
  • 拷贝更改php主配置文件:
cd php-7.4.1
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
vim /usr/local/lnmp/php/etc/php.ini	
##修改时区
date.timezone = Asia/Shanghai
  • 拷贝php启动脚本至/etc/init.d/
cd /root/lnmp/php-7.4.1/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm	##添加执行权限
  • 启动php:
/etc/init.d/php-fpm start

注意:
启动报错可能因为没有 nginx 用户,需要手动创建

useradd -u 900 nginx

3、Nginx的源码编译

  • 解压安装包
tar zxf nginx-1.16.0.tar.gz
  • 去掉Nginx的版本号:
cd /root/lnmp/nginx-1.16.0
vim src/core/nginx.h	
##修改: 
#define NGINX_VER	"nginx/"(将此行末尾显示 nginx 版本号的配置删除)
  • 关闭debug日至:
    因为debug的日志非常多,企业中一般不需要开启。这样也可以减小Nginx占用的内存。
vim auto/cc/gcc
##修改:
# debug
#CFLAGS="$CFLAGS -g" (将这2行注释调,关闭debug)
  • 编译安装 nginx:
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
  • 根据提示解决依赖性:
    此处应该还需要安装pcre-devel
yum install pcre-devel -y
  • 安装:
make && make install
  • 修改nginx配置文件,开启php模块:
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
##修改
user  nginx nginx;
location / {
     
root html;
index index.php index.html index.htm; 	##(添加 php 页面)
}
location ~ \.php$ {
     
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include        fastcgi.conf;
       }
  • 将Nginx启动脚本链接到/usr/local/sbin/
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
  • 开启Nginx:
nginx -t ##检测语法
nginx
  • 测试:
    尝试访问http://172.25.254.51可以访问到Nginx默认页面。
    在Nginx默认发布目录添加index.php
vim /usr/local/lnmp/nginx/html/index.php
##写入:
()
?>

刷新http://172.25.254.51可以看到php的默认页面。

你可能感兴趣的:(服务器,运维,linux)