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安装以下所需库
1gcc 2gcc-c++ 3make 4cmake 5ncurses 6ncurses-devel 7bison 8pcre 9pcre-devel 10expat 11expat-devel 12perl 13perl-devel 14autoconf 15gd 16libpng 17libpng-devel 18libxml2 19libxml2-devel 20libjpeg 21libjpeg-devel 22libpng 23libpng-devel 24freetype 25freetype-devel 26zlib 27zlib-devel 28curl 29curl-devel 30openssl 31openssl-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
第二步:自定义配置
1[root@server opt]# cd nginx-1.12.2/ 2[root@server nginx-1.12.2]#./configure \ 3--prefix=/usr/local/nginx \ <---指定安装目录 4--user=nginx \ <---指定管理用户 5--group=nginx \ <---指定管理组 6--with-http_stub_status_module <---安装统计模块
第三步:编译安装
[root@server nginx-1.12.2]#make && make install
第四步:为nginx建立一个单独的管理用户nginx
1[root@server nginx-1.12.2]# useradd -M -s /sbin/nologin nginx 2[root@server nginx-1.12.2]# 3[root@server nginx-1.12.2]# 4[root@server nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ <---把nginx命令加到系统环境变量下便于直接使用
第五步:制作systemctl管理文件,修改权限,用systemctl启动nginx
1[root@server conf]# vim /lib/systemd/system/nginx.service 2 3[Unit] 4Description=nginx 5After=network.target 6 7[Service] 8Type=forking 9PIDFile =/usr/local/nginx/logs/nginx.pid 10ExecStart=/usr/local/nginx/sbin/nginx 11ExecReload=/usr/bin/kill -S HUP $MAINPID 12ExecStop=/usr/bin/kill -S QUIT $MAINPID 13PrivateTmp=true 14 15[Install] 16WantedBy=multi-user.target 17 18 19[root@server conf]# 20[root@server conf]# 21[root@server conf]# chmod 754 /lib/systemd/system/nginx.service 22[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源码包
1[root@server ~]# cd /opt 2[root@server opt]# tar xzvf mysql-boost-5.7.20.tar.gz
第三步:自定义配置
1[root@server opt]# cd mysql-5.7.20/ 2[root@server mysql-5.7.20]# cmake \ 3-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ <---指定安装目录 4-DMYSQL_UNIX_ADDR=/usr/local/mysql.sock \ <---指定mysql的sock路径 5-DSYSCONFDIR=/etc \ <---指定配置文件路径 6-DSYSTEMD_PID_DIR=/usr/local/mysql \ <---指定pid路径 7-DDEFAULT_CHARSET=utf8 \ <---指定默认字符集 8-DDEFAULT_COLLATION=utf8_general_ci \ <---指定默认编码 9-DWITH_INNOBASE_STORAGE_ENGINE=1 \ <---安装INNOBASE存储引擎 10-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ <---安装ARCHIVE存储引擎 11-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ <---安装BLACKHOLE存储引擎 12-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ <---安装FEDERATED存储引擎 13-DMYSQL_DATADIR=/usr/local/mysql/data \ <---指定数据存放路径 14-DWITH_BOOST=boost \ <----boost库主要是在对mysql的数据备份时用到 15-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 数据库的行为)
1[root@server ~]# vim /etc/my.cnf 2[client] 3port = 3306 4default-character-set=utf8 5socket = /usr/local/mysql/mysql.sock 6 7[mysql] 8port = 3306 9default-character-set=utf8 10socket = /usr/local/mysql/mysql.sock 11 12[mysqld] 13user = mysql <---指定默认启动用户为mysql 14basedir = /usr/local/mysql 15datadir=/usr/local/mysql/data 16port = 3306 17character_set_server=utf8 18pid-file = /usr/local/mysql/mysqld.pid 19socket = /usr/local/mysql/mysql.sock 20server-id = 1 21sql_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
第七步:优化设置
1[root@server ~]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile 2[root@server ~]# echo 'export PATH' >> /etc/profile 3[root@server ~]# source /etc/profile
第八步:初始化配置mysql(Mysql 5.7.6以后的5.7系列版本使用mysqld --initialize
或mysqld --initialize-insecure命令来初始化数据库)
1[root@server bin]# mysqld \ 2--initialize-insecure \ <---初始化数据库的时候不随机生成密码,设置数据库空密码 3--user=mysql \ 4--basedir=/usr/local/mysql \ 5--datadir=/usr/local/mysql/data 62020-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). 72020-08-08T05:44:46.685380Z 0 [Warning] InnoDB: New log files created, LSN=45790 82020-08-08T05:44:46.712869Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 92020-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. 102020-08-08T05:44:46.773250Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 112020-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
1[root@server bin]# cd .. 2 3[root@server mysql]# cp usr/lib/systemd/system/mysqld.service /lib/systemd/system 4[root@server mysql]# systemctl start mysqld.service 5[root@server mysql]# netstat -antp | grep 3306 6tcp6 0 0 :::3306 :::* LISTEN 27393/mysqld
第十步:为mysql创建管理账户root,密码为abc123
1[root@server mysql]# mysqladmin -u root -p password 2Enter password: (密码为空,直接回车) 3New password: 4Confirm new password: 5Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
第十一步:用管理员账户登陆数据库成功
1[root@server mysql]# mysql -u root -p 2Enter password: 3Welcome to the MySQL monitor. Commands end with ; or \g. 4Your MySQL connection id is 4 5Server version: 5.7.20 Source distribution 6 7Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. 8 9Oracle is a registered trademark of Oracle Corporation and/or its 10affiliates. Other names may be trademarks of their respective 11owners. 12 13Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 14 15mysql> quit 16Bye
搭建php
第一步:解压php源码包到/opt下
1[root@server mysql]# cd /opt 2[root@server opt]# tar xvjf php-7.1.10.tar.bz2
第二步:自定义配置
1[root@server opt]# cd php-7.1.10/ 2./configure \ 3--prefix=/usr/local/php \ 4--with-mysql-sock=/usr/local/mysql/mysql.sock \ 5--with-mysqli \ 6--with-zlib \ 7--with-curl \ 8--with-gd \ 9--with-jpeg-dir \ 10--with-png-dir \ 11--with-freetype-dir \ 12--with-openssl \ 13--enable-fpm \ 14--enable-mbstring \ 15--enable-xml \ 16--enable-session \ 17--enable-ftp \ 18--enable-pdo \ 19--enable-tokenizer \ 20--enable-zip
第三步:编译安装
[root@server php-7.1.10]# make && make install
第四步:拷贝默认配置文件并修改配置
1[root@server php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini 2[root@server php-7.1.10]# 3[root@server php-7.1.10]# vim /usr/local/php/lib/php.ini 4 5mysqli.default_socket = /usr/local/mysql/mysql.sock <---指定mysql的socket 6date.timezone = Asia/Shanghai <---指定时区为上海
第五步:查看php加载的模块
1[root@server php-7.1.10]# /usr/local/php/bin/php -m 2[PHP Modules] 3Core 4ctype 5curl 6date 7dom 8fileinfo 9filter 10ftp 11gd 12hash 13iconv 14json 15libxml 16mbstring 17mysqli 18mysqlnd 19openssl 20pcre 21PDO 22pdo_sqlite 23Phar 24posix 25Reflection 26session 27SimpleXML 28SPL 29sqlite3 30standard 31tokenizer 32xml 33xmlreader 34xmlwriter 35zip 36zlib 37 38[Zend Modules]
第六步:
1[root@server php-7.1.10]# cd /usr/local/php/etc/ 2[root@server etc]# ls 3pear.conf php-fpm.conf.default php-fpm.d 4[root@server etc]# cp php-fpm.conf.default php-fpm.conf 5[root@server etc]# vim php-fpm.conf 6pid = run/php-fpm.pid 7[root@server etc]# cd php-fpm.d/ 8[root@server php-fpm.d]# ls 9www.conf.default 10[root@server php-fpm.d]# cp www.conf.default www.conf
第七步:启动php-fpm,端口号是9000
1[root@server php-fpm.d]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini 2[root@server php-fpm.d]# netstat -anpt | grep 9000 3tcp 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
1[root@server php-fpm.d]# vim /usr/local/nginx/conf/nginx.conf 2location ~ \.php$ { 3 root html; 4 fastcgi_pass 127.0.0.1:9000; 5 fastcgi_index index.php; 6 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; 7 include fastcgi_params; 8}
第十步:启动nginx
[root@server php-fpm.d]# systemctl restart nginx.service
第十一步:修改nginx主页为php格式
1[root@server php-fpm.d]# cd /usr/local/nginx/html/ 2[root@server html]# ls 350x.html index.html 4[root@server html]# vim index.php 5 6<?php 7phpinfo(); 8?>
第十二步:真机访问php网页成功

搭建Discuz!论坛
第一步:管理员登陆mysql数据库
1[root@server mysql]# mysql -u root -p 2Enter password: 3mysql> CREATE DATABASE bbs; <----创建bbs数据库 4Query OK, 1 row affected (0.00 sec) 5 6mysql> GRANT all ON bbs.* To 'bbsuser'@'%' IDENTIFIED BY 'admin123'; <----创建登陆用户bbsuser和密码admin123,方式是从任何地方访问 7Query OK, 0 rows affected, 1 warning (0.00 sec) 8 9mysql> GRANT all ON bbs.* To 'bbsuser'@'localhost' IDENTIFIED BY 'admin123'; <----创建登陆用户bbsuser和密码admin123,方式是从本机 10Query OK, 0 rows affected, 1 warning (0.00 sec) 11 12mysql> flush privileges; <----不重启数据库刷新 13Query OK, 0 rows affected (0.00 sec)

第二步:修改nginx的主页,写入如下内容,测试连接数据库
1[root@server html]# vim index.php 2<?php 3$link=mysqli_connect('192.168.245.140','bbsuser','admin123'); 4if($link) echo "<h1>Success!!</h1>"; 5else echo "Fail!!" 6?>
第三步:在真机上测试连接数据库成功
访问http://192.168.245.140/index.php

第四步:解压论坛源码包
1[root@server html]# cd /opt 2[root@server opt]# unzip Discuz_X3.4_SC_UTF8.zip
第五步:将论坛的网页目录拷贝到nginx的默认主页目录下,起名为bbs
1[root@server opt]# cd dir_SC_UTF8/ 2[root@server dir_SC_UTF8]# ls 3readme upload utility 4[root@server dir_SC_UTF8]# cp -r upload/ /usr/local/nginx/html/bbs
第六步:切换到论坛网页目录下,修改以下目录的权限(否则论坛无法安装)
1[root@server dir_SC_UTF8]# cd /usr/local/nginx/html/bbs 2 3[root@server bbs]# chown -R root:nginx ./config/ 4[root@server bbs]# chown -R root:nginx ./data/ 5[root@server bbs]# chown -R root:nginx ./uc_client/ 6[root@server bbs]# chown -R root:nginx ./uc_server/ 7[root@server bbs]# 8[root@server bbs]# chmod -R 777 ./config/ 9[root@server bbs]# chmod -R 777 ./data/ 10[root@server bbs]# chmod -R 777 ./uc_client/ 11[root@server bbs]# chmod -R 777 ./uc_server/
第七步:访问http://192.168.245.140/bbs/install/index.php**会跳出安装界面,选择“我同意”

选择“下一步”


选择“下一步”

填写数据库信息,选择“下一步”

安装完成会出现如下页面,右下角“点此访问”可以进入论坛主页


第八步:访问http://192.168.245.140/bbs/admin.php**登陆论坛后台

