LNMP架构:
- L:Linux系统
- N:nginx,负责处理静态页面以及转发动态请求
- M:mysql数据库,是作为后端服务器保存用户和密码信息,以及论坛的信息
- P:php,负责处理和转发动态请求
流程简述:
- 如果用户发送的是静态请求,nginx会自己处理完,并响应给用户
- 如果用户发送的是动态请求,nginx会将请求转发给php,如果这个请求不涉及后端服务器,那么php会自己处理完动态请求后将响应结果发给nginx,nginx再转发给用户
- 如果用户发送的是动态请求,nginx会将请求转发给php,如果这个请求涉及了后端服务器,在这里是mysql数据库,那么php会将请求转发给mysql,mysql将响应结果发给php,php再转发给nginx,nginx再转发给用户
实验:用LNMP架构搭建一个论坛
0. 在开始前请先确保虚拟机有8G以上内存,4核以上的处理器,这是为了编译起来快一点,另外最好把防火墙关了
- 先安装nginx服务
- 安装依赖包:
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
- 创建一个运行用户:
useradd -M -s /sbin/nologin nginx
- 解压:
tar zxvf /opt/nginx-1.22.0.tar.gz
- 配置:
cd /opt/nginx-1.22.0/ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module
- 编译安装:
make && make install
- 优化路径:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
- 添加nginx系统服务:
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=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
- 启动服务:
systemctl start nginx.service systemctl enable nginx.service
- 安装依赖包:
- 安装mysql服务
- 安装依赖包:
yum -y install \ ncurses \ ncurses-devel \ bison \ cmake
- 创建一个运行用户:
useradd -M -s /sbin/nologin mysql
- 解压:
tar zxvf /opt/mysql-boost-5.7.20.tar.gz
- 配置:
cd /opt/mysql-5.7.20/ cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=boost \ -DWITH_SYSTEMD=1
#指定安装路径 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql进程监听的套接字文件(数据库连接文件)的存储路径 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定配置文件的存储路径 -DSYSCONFDIR=/etc \ #指定进程文件的存储路径 -DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定默认使用的字符集编码 -DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集校对规则 -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ #安装INNOBASE存储引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装PREFSCHEMA存储引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #指定数据库文件的存储路径 -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定boost的路径 -DWITH_BOOST=boost \ -DWITH_SYSTEMD=1
- 编译安装:
#4核编译安装,会快很多,但请不要超过自己的虚拟机核数 make -j 4 && make install
- 修改mysql配置文件:
vim /etc/my.cnf
[client] port = 3306 socket=/usr/local/mysql/mysql.sock [mysqld] user = 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 bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M 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_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
部分解释:
#客户端的配置 [client] #端口号3306 port = 3306 #客户端连接mysql服务器使用的socket文件路径 socket=/usr/local/mysql/mysql.sock #服务端配置 [mysqld] #用户名 user = mysql #mysql安装目录 basedir=/usr/local/mysql #mysql数据文件的路径 datadir=/usr/local/mysql/data #mysql服务监听的端口 port = 3306 #使用的字符集 character-set-server=utf8 #保存mysql服务器进程id的文件路径 pid-file = /usr/local/mysql/mysqld.pid #mysql服务器监听的socket文件路径 socket=/usr/local/mysql/mysql.sock #MySQL服务器绑定的IP地址,0.0.0.0表示允许任何IP地址访问MySQL服务器 bind-address = 0.0.0.0 #禁用DNS反向解析,可以提高性能 skip-name-resolve #MySQL服务器支持的最大并发连接数 max_connections=2048 #设置默认的存储引擎为InnoDB default-storage-engine=INNODB #MySQL服务器接收的最大数据包大小 max_allowed_packet=16M #设置MySQL服务器的唯一ID,在主从复制设置中使用 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_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
- 更改mysql安装目录和配置文件的属主属组:
chown -R mysql:mysql /usr/local/mysql/ chown mysql:mysql /etc/my.cnf
- 设置路径环境变量:
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
#使配置生效 source /etc/profile
- 初始化数据库:
cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data
- 添加mysqld系统服务:
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload systemctl start mysqld.service systemctl enable mysqld
- 修改mysql 的登录密码:
mysqladmin -u root -p password "123456"
- 授权远程登录:
详解:grant all privileges on *.* to 'root'@'%' identified by '123456';
grant:授权语句的关键字
all privileges:授予所有权限(权限指增删改查等)
*.*:第一个*代表任意数据库,填具体的数据库也可以,第二个*表示任意表,填具体表也可以,这就代表用户在所有数据库的所有表上都有权限
'root'@'%':指定的用户为root,%表示任意主机,这句就表示root用户可以从任何主机连接
identified by '123456':设置密码为123456,远程连接的密码
- 安装依赖包:
- 安装PHP
- 安装依赖环境:
yum -y install gd \ libjpeg libjpeg-devel \ libpng libpng-devel \ freetype freetype-devel \ libxml2 libxml2-devel \ zlib zlib-devel \ curl curl-devel \ openssl openssl-devel
- 解压:
tar jxvf /opt/php-7.1.10.tar.bz2
- 配置:
cd /opt/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
解释:
./configure \ #指定安装目录 --prefix=/usr/local/php \ #指定mysql的socket文件路径,用于与mysql建立连接 --with-mysql-sock=/usr/local/mysql/mysql.sock \ #启用mysqli扩展 --with-mysqli \ #启用zlib库,用于压缩和解压数据 --with-zlib \ #启用curl库,用于支持对url操作 --with-curl \ #启用GD库,用于处理图像 --with-gd \ #指定JPEG库的路径,用于GD库对JPEG格式图片的处理 --with-jpeg-dir \ #指定PNG库的路径,用于GD库对PNG格式图片的处理 --with-png-dir \ #指定FreeType库的路径,用于GD库对字体的支持 --with-freetype-dir \ #启用OpenSSL库,用于支持SSL加密和HTTPS协议 --with-openssl \ #启用PHP-FPM(FastCGI Process Manager),用于提供更高效的PHP进程管理和请求处理 --enable-fpm \ #启用多字节字符串支持,用于处理多字节字符集的操作 --enable-mbstring \ #启用XML支持,用于处理XML文档和数据 --enable-xml \ #启用会话支持,用于在不同页面间保持用户会话状态 --enable-session \ #启用FTP支持,用于对FTP服务器进行操作 --enable-ftp \ #启用PDO(PHP Data Objects),用于支持数据库访问的统一接口 --enable-pdo \ #启用Tokenizer扩展,用于对字符串进行分词处理 --enable-tokenizer \ #启用Zip扩展,用于对ZIP文件进行操作 --enable-zip
- 编译安装:
make -j 4 && make install
- 路径优化:
ln -s /usr/local/php/bin/* /usr/local/bin/ ln -s /usr/local/php/sbin/* /usr/local/sbin/
- 修改PHP主配置文件:php.ini
先把php自带的模板文件复制过来:cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
进入配置文件修改:
- 修改进程服务配置文件:php-fpm.conf
先将默认模板文件复制过来:cd /usr/local/php/etc/ cp php-fpm.conf.default php-fpm.conf
进入配置文件修改:
- 修改扩展配置文件:www.conf
复制默认模板文件:cd /usr/local/php/etc/php-fpm.d/ cp www.conf.default www.conf
- 启动php-fpm:
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
可以用 netstat -anpt | grep 9000 检查一下是否开启成功:
- 启动服务:
cd /opt/php-7.1.10/sapi/fpm cp php-fpm.service /usr/lib/systemd/system/php-fpm.service systemctl restart php-fpm.service
- 安装依赖环境:
- 配置nginx,使其支持php
- 修改 /usr/local/nginx/conf/nginx.conf:
重启服务:systemctl restart nginx.service
- 修改 /usr/local/nginx/conf/nginx.conf:
- 验证
- 验证php:
vim /usr/local/nginx/html/index.php
在里面输入一些内容:
<?php phpinfo(); ?>
浏览器输入/ip/index.php进行验证:
- 验证数据库
vim /usr/local/nginx/html/index.php
在里面输新的内容:
<?php $link=mysqli_connect('192.168.188.12','bbsuser','admin123'); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; ?>
访问测试:
- 验证php:
- 部署DISCUZ论坛
- 解压,顺便改个名:
unzip /opt/Discuz_X3.4_SC_UTF8.zip -d /opt/dis
- 复制默认页面到nginx工作目录下:
cd /opt/dis/dir_SC_UTF8/ cp -r upload/ /usr/local/nginx/html/bbs/
- 调整论坛目录的权限:
cd /usr/local/nginx/html/bbs/ chown -R nginx ./config/ chown -R nginx ./data/ chown -R nginx ./uc_client/ chown -R nginx ./uc_server/ chmod -R 777 ./config/ chmod -R 777 ./data/ chmod -R 777 ./uc_client/ chmod -R 777 ./uc_server/
- 解压,顺便改个名:
- 访问测试:
没有问题