CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)

Stella981
• 阅读 596

LNMP架构

  • LNMP是什么
  • 搭建环境
  • 搭建准备
  • LNMP软件包
  • 搭建nginx
  • 搭建mysql数据库
  • 搭建php
  • 搭建Discuz!论坛

LNMP是什么

LNMP:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

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

搭建环境

LNMP服务器:192.168.245.140(CentOS 7.6)

搭建准备

yum安装以下所需库

gcc 
gcc-c++ 
make
cmake
ncurses 
ncurses-devel 
bison 
pcre  
pcre-devel 
expat 
expat-devel 
perl 
perl-devel 
autoconf 
gd 
libpng 
libpng-devel
libxml2  
libxml2-devel
libjpeg 
libjpeg-devel
libpng 
libpng-devel 
freetype 
freetype-devel 
zlib 
zlib-devel 
curl 
curl-devel 
openssl 
openssl-devel

LNMP软件包

  • nginx-1.12.2.tar.gz
  • mysql-boost-5.7.20.tar.gz
  • php-7.1.10.tar.bz2
  • Discuz_X3.4_SC_UTF8.zip

搭建nginx

第一步:解压nginx源码包到/opt目录下

[root@server opt]# tar xzfv nginx-1.12.2.tar.gz

第二步:自定义配置

[root@server opt]# cd nginx-1.12.2/
[root@server nginx-1.12.2]#./configure \
--prefix=/usr/local/nginx \   <---指定安装目录
--user=nginx \    <---指定管理用户
--group=nginx \   <---指定管理组
--with-http_stub_status_module   <---安装统计模块

第三步:编译安装

[root@server nginx-1.12.2]#make && make install

第四步:为nginx建立一个单独的管理用户nginx

[root@server nginx-1.12.2]# useradd -M -s /sbin/nologin nginx
[root@server nginx-1.12.2]# 
[root@server nginx-1.12.2]# 
[root@server nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   <---把nginx命令加到系统环境变量下便于直接使用

第五步:制作systemctl管理文件,修改权限,用systemctl启动nginx

[root@server conf]# vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -S HUP $MAINPID
ExecStop=/usr/bin/kill -S QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target


[root@server conf]# 
[root@server conf]# 
[root@server conf]# chmod 754 /lib/systemd/system/nginx.service
[root@server conf]# systemctl start nginx.service

搭建mysql数据库

MYSQL的新特性

1、性能更快3倍
2、新的优化器
3、原生的JSON支持
4、多源复制
5、GIS空间扩展

第一步:为mysql创建一个管理用户mysql

[root@server ~]# useradd -s /sbin/nologin mysql

第二步:解压mysql源码包

[root@server ~]# cd /opt
[root@server opt]# tar xzvf mysql-boost-5.7.20.tar.gz

第三步:自定义配置

[root@server opt]# cd mysql-5.7.20/
[root@server mysql-5.7.20]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   <---指定安装目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql.sock \  <---指定mysql的sock路径
-DSYSCONFDIR=/etc \    <---指定配置文件路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \   <---指定pid路径
-DDEFAULT_CHARSET=utf8 \    <---指定默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \   <---指定默认编码
-DWITH_INNOBASE_STORAGE_ENGINE=1 \   <---安装INNOBASE存储引擎 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \    <---安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \    <---安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \   <---安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \    <---指定数据存放路径
-DWITH_BOOST=boost \   <----boost库主要是在对mysql的数据备份时用到
-DWITH_SYSTEMD=1     <---这是MySQL 5.7原生支持Systemd的选项,如果要是用systemctl启动,就必须开启。

第四步:安装编译

[root@server mysql-5.7.20]# make && make install

第五步:修改mysql属主和属组为mysql,否则影响启动!

[root@server mysql-5.7.20]# chown -R mysql.mysql /usr/local/mysql/

第六步:修改my.cnf配置文件(mysql 可以通过sql_mode 来控制mysql 数据库的行为)

[root@server ~]# vim /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
  
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql   <---指定默认启动用户为mysql
basedir = /usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DAT    E,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

第七步:优化设置

[root@server ~]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@server ~]# echo 'export PATH' >> /etc/profile
[root@server ~]# source /etc/profile

第八步:初始化配置mysql(Mysql 5.7.6以后的5.7系列版本使用mysqld --initialize
或mysqld --initialize-insecure命令来初始化数据库)

[root@server bin]# mysqld \
--initialize-insecure \  <---初始化数据库的时候不随机生成密码,设置数据库空密码
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
2020-08-08T05:39:36.615339Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-08-08T05:44:46.685380Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-08-08T05:44:46.712869Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-08-08T05:44:46.770159Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 446f5f0a-d93a-11ea-99d3-000c295a2680.
2020-08-08T05:44:46.773250Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-08-08T05:44:46.774057Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

第九步:拷贝启动文件,使用systemctl启动mysql

[root@server bin]# cd ..

[root@server mysql]# cp usr/lib/systemd/system/mysqld.service /lib/systemd/system
[root@server mysql]# systemctl start mysqld.service 
[root@server mysql]# netstat -antp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      27393/mysqld 

第十步:为mysql创建管理账户root,密码为abc123

[root@server mysql]# mysqladmin -u root -p password
Enter password: (密码为空,直接回车)
New password: 
Confirm new password: 
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

第十一步:用管理员账户登陆数据库成功

[root@server mysql]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit
Bye

搭建php

第一步:解压php源码包到/opt下

[root@server mysql]# cd /opt
[root@server opt]# tar xvjf php-7.1.10.tar.bz2

第二步:自定义配置

[root@server opt]# cd php-7.1.10/
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

第三步:编译安装

[root@server php-7.1.10]# make && make install

第四步:拷贝默认配置文件并修改配置

[root@server php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini
[root@server php-7.1.10]# 
[root@server php-7.1.10]# vim /usr/local/php/lib/php.ini

mysqli.default_socket = /usr/local/mysql/mysql.sock  <---指定mysql的socket
date.timezone = Asia/Shanghai    <---指定时区为上海

第五步:查看php加载的模块

[root@server php-7.1.10]# /usr/local/php/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

第六步:

[root@server php-7.1.10]# cd /usr/local/php/etc/
[root@server etc]# ls
pear.conf  php-fpm.conf.default  php-fpm.d
[root@server etc]# cp php-fpm.conf.default php-fpm.conf
[root@server etc]# vim php-fpm.conf
pid = run/php-fpm.pid
[root@server etc]# cd php-fpm.d/
[root@server php-fpm.d]# ls
www.conf.default
[root@server php-fpm.d]# cp www.conf.default www.conf

第七步:启动php-fpm,端口号是9000

[root@server php-fpm.d]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini 
[root@server php-fpm.d]# netstat -anpt | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      34677/php-fpm: mast 

第八步:把php的命令制作软链接到系统环境变量/usr/local/bin/下便于使用管理

[root@server php-fpm.d]# ln -s /usr/local/php/bin/* /usr/local/bin/

第九步:修改nginx配置文件,使它可以支持php,以下这段本身是被注释的,取消注释修改DocumentRoot为/usr/local/nginx/html

[root@server php-fpm.d]# vim /usr/local/nginx/conf/nginx.conf
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

[root@server php-fpm.d]# systemctl restart nginx.service

第十一步:修改nginx主页为php格式

[root@server php-fpm.d]# cd /usr/local/nginx/html/
[root@server html]# ls
50x.html  index.html
[root@server html]# vim index.php

<?php
phpinfo();
?>

第十二步:真机访问php网页成功
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)

搭建Discuz!论坛

第一步:管理员登陆mysql数据库

[root@server mysql]# mysql -u root -p
Enter password: 
mysql> CREATE DATABASE bbs;    <----创建bbs数据库
Query OK, 1 row affected (0.00 sec)

mysql> GRANT all ON bbs.* To 'bbsuser'@'%' IDENTIFIED BY 'admin123';     <----创建登陆用户bbsuser和密码admin123,方式是从任何地方访问
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> GRANT all ON bbs.* To 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';   <----创建登陆用户bbsuser和密码admin123,方式是从本机
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;   <----不重启数据库刷新
Query OK, 0 rows affected (0.00 sec)

CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
第二步:修改nginx的主页,写入如下内容,测试连接数据库

[root@server html]# vim index.php
<?php
$link=mysqli_connect('192.168.245.140','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!"
?>

第三步:在真机上测试连接数据库成功

访问http://192.168.245.140/index.php
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
第四步:解压论坛源码包

[root@server html]# cd /opt
[root@server opt]# unzip Discuz_X3.4_SC_UTF8.zip

第五步:将论坛的网页目录拷贝到nginx的默认主页目录下,起名为bbs

[root@server opt]# cd dir_SC_UTF8/
[root@server dir_SC_UTF8]# ls
readme  upload  utility
[root@server dir_SC_UTF8]# cp -r upload/ /usr/local/nginx/html/bbs

第六步:切换到论坛网页目录下,修改以下目录的权限(否则论坛无法安装)

[root@server dir_SC_UTF8]# cd /usr/local/nginx/html/bbs

[root@server bbs]# chown -R root:nginx ./config/
[root@server bbs]# chown -R root:nginx ./data/
[root@server bbs]# chown -R root:nginx ./uc_client/
[root@server bbs]# chown -R root:nginx ./uc_server/
[root@server bbs]# 
[root@server bbs]# chmod -R 777 ./config/
[root@server bbs]# chmod -R 777 ./data/
[root@server bbs]# chmod -R 777 ./uc_client/
[root@server bbs]# chmod -R 777 ./uc_server/

第七步:访问http://192.168.245.140/bbs/install/index.php会跳出安装界面,选择“我同意”
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
选择“下一步”
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
选择“下一步”
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
填写数据库信息,选择“下一步”
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
安装完成会出现如下页面,右下角“点此访问”可以进入论坛主页
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
第八步:访问http://192.168.245.140/bbs/admin.php登陆论坛后台
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)
CentOS 7.6 源码安装搭建LNMP架构(Nginx、MYSQL、PHP)

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这