LNMP动态软件架构
LNMP动态网站部署架构是一套由Linux+ Nginx + MySQL + PHP组成的动态网站系统解决方案,具有免费、高效、扩展性强且资源消耗低等优良特性。
本实验将采用源码包方式安装服务程序,然后使用Discuz! X3.2版本论坛系统验证架构环境 。
源码包安装的优势:
源码包的可移植性非常好,几乎可以在任何Linux系统中安装使用,而RPM软件包是针对特定系统和架构编写的指令集,必须严格地符合执行环境才能顺利安装(即只会去“生硬地”安装服务程序)。
使用源码包安装服务程序时会有一个编译过程,因此可以更好地适应安装主机的系统环境,运行效率和优化程度都会强于使用RPM软件包安装的服务程序。也就是说,可以将采用源码包安装服务程序的方式看作是针对系统的“量体裁衣”。
配置Yum软件仓库
把光盘设备中的系统镜像挂载到/media/cdrom目录
1 | mkdir -p /media/cdrom |
创建Yum仓库的配置文件
1 | vim /etc/yum.repos.d/rhel7.repo |
设置成开机自动挂载(否则开机后yum安装会报错)
1 | vim /etc/fstab |
安装编译程序源码的环境,需具备C语言、C++语言、Perl语言的编译器,以及各种常见的编译支持函数库程序
1 | yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel |
将源码包发送到指定目录,rz
后选择所需要的源码包即可发送到所在目录,若没有可先执行yum install -y lrzsz
命令安装(LNMP所需软件源码包与Discuz!软件包 提取码:1234)
1 | cd /usr/local/src |
源码包安装Linux系统中一款常用的编译工具 CMake
1 | cd /usr/local/src |
配置MySQL服务
创建一个名为mysql的用户,专门用于负责运行MySQL数据库
将账户的Bash终端设置成nologin解释器,避免黑客通过该用户登录到服务器中,从而提高系统安全性
1 | useradd mysql -s /sbin/nologin |
创建一个用于保存MySQL数据库程序和数据库文件的目录,并将目录的所有者和所属组身份修改为mysql
/usr/local/mysql 用于保存MySQL数据库服务程序的目录
/usr/local/mysql/var 用于保存真实数据库文件的目录
1 | mkdir -p /usr/local/mysql/var |
解压、编译、安装MySQL数据库服务程序
1 | cd /usr/local/src |
参数 | 说明 |
---|---|
- DCMAKE_INSTALL_PREFIX | 用于定义数据库服务程序的保存目录 |
- DMYSQL_DATADIR | 用于定义真实数据库文件的目录 |
- DSYSCONFDIR | 定义MySQL数据库配置文件的保存目录 |
为使MySQL数据库程序正常运转,先删除/etc目录中的默认配置文件,然后执行在MySQL数据库程序的保存目录scripts下名为mysql_install_db的脚本程序
1 | rm -rf /etc/my.cnf |
命令/参数 | 说明 |
---|---|
./scripts/mysql_install_db | 生成系统数据库文件、新的MySQL服务配置文件 |
–user | 指定MySQL服务的对应账号名称 |
–basedir | 指定MySQL服务程序的保存目录 |
–datadir | 指定MySQL真实数据库的文件保存目录 |
将系统新生成的MySQL数据库配置文件链接到/etc目录中
将程序目录中的开机程序文件复制到/etc/rc.d/init.d目录中,以便通过service命令来管理MySQL数据库服务程序
将数据库脚本文件的权限修改成755以便于让用户有执行该脚本的权限
1 | cd /usr/local/mysql |
编辑MySQL数据库脚本文件 ,basedir与datadir参数分别修改为MySQL数据库程序的保存目录和真实数据库的文件内容
1 | vim /etc/rc.d/init.d/mysqld |
启动mysqld
数据库服务,加入开机启动项
1 | service mysqld start |
手动方式将MySQL数据库服务程序需调用到的一些程序文件和函数库文件链接过来 ( 为兼容32位和64位平台 )
1 | mkdir /var/lib/mysql |
初始化 MySQL数据库
1 | mysql_secure_installation |
注意:源码包安装时突然中断,需先执行命令make clean
清理源码包临时文件 ,然后再 make;make install
配置Nginx服务
安装pcre软件包,用于提供Perl语言兼容的正则表达式库,Nginx服务程序用于实现伪静态功能必不可少的依赖包
1 | cd /usr/local/src |
安装openssl软件包,用于提供网站加密证书服务的程序文件
1 | cd /usr/local/src |
添加/usr/local/openssl/bin到PATH环境变量,并写入配置文件 , source /etc/profile
命令使环境变量立即生效
1 | vim /etc/profile |
安装zlib软件包,用于提供压缩功能的函数库文件
1 | cd /usr/local/src |
创建一个用于执行Nginx服务程序的账户
1 | useradd www -s /sbin/nologin |
安装Nginx服务程序
1 | cd /usr/local/src |
参数 | 说明 |
---|---|
–user | 指定执行Nginx服务程序的用户名 |
–group | 指定执行Nginx服务程序的用户组 |
–with-openssl | 调用openssl软件包,指的是软件源码包的解压路径 |
启动Nginx服务程序( 在/etc/rc.d/init.d目录中创建启动脚本文件 )
1 | vim /etc/rc.d/init.d/nginx |
赋予755权限,以绝对路径的方式执行脚本,restart
重启Nginx服务程序 ,加入到开机启动项
1 | chmod 755 /etc/rc.d/init.d/nginx |
浏览器访问服务器的IP地址看到 Welcome to nginx!标题的网页
配置PHP服务
安装汇编器yasm
1 | cd /usr/local/src |
安装用于加密算法的扩展库程序 libmcrypt-2.5.8.tar.gz
1 | cd /usr/local/src |
安装用于提供视频编码器的服务程序 libvpx-v1.3.0.tar.bz2 源码包,解压的参数为 xjvf
1 | cd /usr/local/src |
安装用于提供标签图像文件格式的服务程序 tiff-4.0.3.tar.gz 源码包
1 | cd /usr/local/src |
安装用于提供png图片格式支持函数库的服务程序 libpng-1.6.12.tar.gz 源码包
1 | cd /usr/local/src |
安装用于用于提供字体支持引擎的服务程序 freetype-2.5.3.tar.gz 源码包
1 | cd /usr/local/src |
安装用于提供jpeg图片格式支持函数库的服务程序 jpegsrc.v9a.tar.gz 源码包
1 | cd /usr/local/src |
安装用于提供图形处理的服务程序 libgd-2.1.0.tar.gz 源码包
1 | cd .. |
安装用于提供图片生成函数库的服务程序 t1lib-5.1.2.tar.gz 源码包
将/usr/lib64目录中的函数文件链接到/usr/lib目录中,以便系统能够顺利调取到函数文件 (兼容32位系统)
1 | cd .. |
定义一个名为LD_LIBRARY_PATH的全局环境变量,帮助系统找到指定的动态链接库文件——编译php服务源码包的必须元素之一
编译php服务源码包时,除了定义要安装到的目录以外,还需要依次定义配置php服务程序配置文件的保存目录、MySQL数据库服务程序所在目录、MySQL数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、libvpx、zlib、t1lib等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能
1 | cd .. |
删除 php 默认的配置文件,将php服务程序目录中相应的配置文件复制过来
1 | rm -rf /etc/php.ini |
编辑 php 主配置文件 php-fpm.conf ( :set nu
查看文件的行号)
第25行:启用该配置文件中的pid文件保存目录
第148行:user参数修改为www账户
第149行:group参数修改为www用户组名称
1 | vim /usr/local/php/etc/php-fp |
将用于管理php服务的脚本文件复制到/etc/rc.d/init.d中,赋予755权限,将 php-fpm 服务程序加入到开机启动项
1 | cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm |
编辑php.ini配置文件,在305行的disable_functions参数后面追加上要禁止的功能
解释:
php服务程序的配置参数直接会影响到Web服务服务的运行环境,如果默认开启一些不必要且高危的功能(如允许用户在网页中执行Linux命令),则会降低网站被入侵的难度,入侵者甚至可拿到整台Web服务器的管理权限
1 | vim /usr/local/php/etc/php.ini |
编辑Nginx服务程序的主配置文件,在确认参数信息填写正确后便可重启Nginx服务与php-fpm服务
第2行: 负责运行Nginx服务程序的账户名称和用户组名称;
第45行:index参数后面是网站的首页名称
第65~71行:修改第69行的脚本名称路径参数,$document_root变量即为网站信息存储的根目录路径,若没有设置该变量,则Nginx服务程序无法找到网站信息,会提示“404页面未找到”的报错信息
1 | vim /usr/local/nginx/conf/nginx.conf |
搭建Discuz论坛
unzip
命令解压Discuz_X3.2_SC_GBK.zip
将Nginx服务程序网站根目录的内容清空
复制 Discuz!论坛的系统程序即upload目录下的文件 到Nginx服务程序网站根目录
将Nginx服务程序的网站根目录的所有者和所属组修改为本地的www用户,赋予755权限以便于能够读、写、执行该论坛系统内的文件
1 | cd /usr/local/src/ |
浏览器访问服务器IP地址,接受Discuz!安装向导的许可协议
检查Discuz! X3.2论坛系统的安装环境及目录权限 (必须确保状态都是可写!)
选择“全新安装Discuz! X(含UCenter Server)”
填写服务器的数据库信息与论坛系统管理员信息
等待Discuz! X3.2论坛系统安装完毕
成功安装Discuz! X3.2论坛系统,欢迎界面
至此,整个LNMP架构搭建完成,同时也验证了其可用性。