企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛

前言

本文使用的是用源码包安装服务程序,难度可能较大,至于为何要用源码包安装程序,说简单点就是方便自己使用吧,以及这是一门必备技能,以后在运维工作中也是会用到的!

一、源码安装服务程序步骤

1、下载 解压源码包文件

下载源码包后,相应命令解压,进入解压目录即可!

例如:
[root@allen mnt]# ls
keepalived-2.0.6.tar.gz
[root@allen mnt]# tar zxf keepalived-2.0.6.tar.gz 
[root@allen mnt]# ls
keepalived-2.0.6  keepalived-2.0.6.tar.gz
[root@allen mnt]# cd keepalived-2.0.6/

2、编译源码包代码

在编译期间可以通过追加参数–prefix,指定源码包程序的安装路径,当编译结束后,如果系统环境符合安装要求,一般会在当前目录下生成一个Makefile安装文件!

例如:
[root@allen keepalived-2.0.6]# ./configure --prefix=/usr/local/LVS

3、生成二进制文件程序

使用make命令根据Makefile文件内容编译出二进制可执行文件

[root@allen keepalived-2.0.6]# make

4、运行二进制程序

如果编译时用了- -prefix参数指定安装目录,那么程序会被安装在指定目录,没有使用的话,一般会默认安装在/usr/local/bin 目录中

[root@allen keepalived-2.0.6]#make install

5、清理源码包临时文件

使用make clean 命令可以对临时文件进行彻底清理,以达到不浪费磁盘存储空间的目的

[root@allen keepalived-2.0.6]# make clean

二、LNMP 动态网站架构

LNMP = Linux + Nginx + MySQL +PHP

1、 在使用源码包安装服务程序之前,首先让主机具备编译程序源码的环境。需要具备C语言,C++语言,Perl语言的编译器,以及各种常见的编译支持函数库程序。

yum install apr* autoconf automake bison bzip2* compat* cpp curl-devel fontconfig-devel  freetype* gcc gcc-c++ gd gettext-devel glibc kernel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2-devel libXpm*  libtifflibtiff* make mpfr ncurses* ntp openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet tllib* nasm* wget zlib-devel   -y

2、下载安装LNMP动态网站部署架构的16个软件源码包1个用于检测效果的论坛网站系统软件包

通过wget命令下载:

cd /usr/local/src
wget https://www.linuxprobe.com/Software/cmake-2.8.11.2.tar.gz
wget https://www.linuxprobe.com/Software/Discuz_X3.2_SC_GBK.zip
wget https://www.linuxprobe.com/Software/freetype-2.5.3.tar.gz
wget https://www.linuxprobe.com/Software/jpegsrc.v9a.tar.gz
wget https://www.linuxprobe.com/Software/libgd-2.1.0.tar.gz
wget https://www.linuxprobe.com/Software/libmcrypt-2.5.8.tar.gz
wget https://www.linuxprobe.com/Software/libpng-1.6.12.tar.gz
wget https://www.linuxprobe.com/Software/libvpx-v1.3.0.tar.bz2
wget https://www.linuxprobe.com/Software/mysql-5.6.19.tar.gz
wget https://www.linuxprobe.com/Software/nginx-1.6.0.tar.gz
wget https://www.linuxprobe.com/Software/openssl-1.0.1h.tar.gz
wget https://www.linuxprobe.com/Software/php-5.5.14.tar.gz
wget https://www.linuxprobe.com/Software/pcre-8.35.tar.gz
wget https://www.linuxprobe.com/Software/t1lib-5.1.2.tar.gz
wget https://www.linuxprobe.com/Software/tiff-4.0.3.tar.gz
wget https://www.linuxprobe.com/Software/yasm-1.2.0.tar.gz
wget https://www.linuxprobe.com/Software/zlib-1.2.8.tar.gz

企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第1张图片
3、CMake是 Linux系统中一款常用的编译工具。

[root@allen src]# tar zxf cmake-2.8.11.2.tar.gz 
[root@allen src]# cd cmake-2.8.11.2/
[root@allen cmake-2.8.11.2]# ./configure && make && make install

4、配置MySQL服务

MySQL数据库是当前生产环境中最常使用的关系型数据库管理系统之一,有极高的安全性和稳定性,坐拥极大的市场份额。

1)创建名为mysql的用户,专门用于负责运行MySQL数据库

切记这类用户的bash终端得设置为nologin解释器,避免黑客通过使用该用户登陆到服务器中,从而提高系统安全性!

[root@allen cmake-2.8.11.2]# cd ..
[root@allen src]# useradd -s /sbin/nologin mysql

2)创建一个目录用来保存MySQL数据库的程序和文件

[root@allen src]# mkdir -p /usr/local/mysql/var		#建立目录
			# /usr/local/mysql/	用来存放MySQL数据库的程序
			# /usr/local/mysql/var	用来保存真实数据库文件
[root@allen src]# chown -Rf mysql:mysql /usr/local/mysql/	
			# 将目录的所有者和所属组身份改为mysql

3)解压、编译、安装MySQL数据库服务程序

在编译数据库时使用的是CMake命令
-DCMAKE_INSTALL_PREFIX= 参数 定义数据库服务程序的保存目录
-DMYSQL_DATADIR= 参数 定义真实数据库文件的目录
-DSYSCONFDIR= 参数 定义MySQL数据库配置文件的保存目录

[root@allen src]# tar zxf mysql-5.6.19.tar.gz 
[root@allen src]# cd mysql-5.6.19/
[root@allen mysql-5.6.19]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/var -DSYSCONFDIR=/etc
[root@allen mysql-5.6.19]# make && make install

4)为了让MySQL正常运行,删除默认配置文件重新生成

[root@allen mysql-5.6.19]# rm -fr /etc/my.cnf		#删除/etc目录中的默认配置文件
[root@allen mysql-5.6.19]# cd /usr/local/mysql/		#进入MySQL数据库程序的保存目录
[root@allen mysql]# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var
		#执行/mysql_install_db脚本,并指定--user,--basedir,--datadir 参数
[root@allen mysql]# ln -s my.cnf /etc/my.cnf

5)加入service命令管理

./support-files/mysql.server 开机程序文件

[root@allen mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@allen mysql]# chmod 755 /etc/rc.d/init.d/mysqld 		#给执行权限

6)配置脚本文件并启动服务

[root@allen mysql]# vim /etc/rc.d/init.d/mysqld
 46 basedir=/usr/local/mysql			# MySQL程序 的保存目录
 47 datadir=/usr/local/mysql/var		# 真实数据库的文件内容 的保存目录

[root@allen mysql]# service mysqld start		#启动服务
[root@allen mysql]# chkconfig mysqld on			#开机自启

7)将MySQL命令保存目录永久性定义到PATH变量中

[root@allen mysql]# vim /etc/profile		#加入以下内容
 75 export PATH=$PATH:/usr/local/mysql/bin

[root@allen mysql]# source /etc/profile		#重新加载/etc/profile文件

在这里插入图片描述
8)将会调用的程序文件和函数库链接起来

[root@allen mysql]# mkdir /var/lib/mysql
[root@allen mysql]# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
[root@allen mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
[root@allen mysql]# ln -s /usr/local/mysql/include/mysql /usr/include/mysql

9)对MySQL数据库进行初始化

一直回车就行

[root@allen mysql]# mysql_secure_installation

5、配置Nginx服务

Nginx是一个高性能的HTTP和反向代理web服务器,是一款相当优秀的用于部署动态网站的轻量级服务程序。因稳定功能丰富(Web、反向代理、负载均衡)占用内存少并发能力强而被广泛运用!

1)解决相关软件依赖(pcre,openssl,zlib)

pcre:提供perl语言兼容的正则表达式库

[root@allen mysql]# cd /usr/local/src/
[root@allen src]# tar zxf pcre-8.35.tar.gz 
[root@allen src]# cd pcre-8.35/
[root@allen pcre-8.35]# ./configure --prefix=/usr/local/pcre && make && make install

openssl:用于提供网站加密证书服务

[root@allen pcre-8.35]# cd ..
[root@allen src]# tar zxf openssl-1.0.1h.tar.gz 
[root@allen src]# cd openssl-1.0.1h/
[root@allen openssl-1.0.1h]# ./config --prefix=/usr/local/openssl && make && make install

openssl软件包安装之后,会在/usr/local/openssl/bin/目录中提供很多可用的命令、将这个目录加入PATH环境变量中

[root@allen openssl-1.0.1h]# vim /etc/profile
 75 export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin/
[root@allen openssl-1.0.1h]# source /etc/profile

在这里插入图片描述

zlib:提供压缩功能

[root@allen openssl-1.0.1h]# cd ..
[root@allen src]# tar zxf zlib-1.2.8.tar.gz 
[root@allen src]# cd zlib-1.2.8/
[root@allen zlib-1.2.8]# ./configure --prefix=/usr/local/zlib && make && make install

2、创建一个用于执行Nginx服务程序的账户(可自定义)

[root@allen zlib-1.2.8]# useradd -s /sbin/nologin www

3、编译安装Nginx

[root@allen zlib-1.2.8]# cd ..
[root@allen src]# tar zxf nginx-1.6.0.tar.gz 
[root@allen src]# cd nginx-1.6.0/
[root@allen nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35 && make && make install

4、将Nginx服务加入到开机启动项中

[root@allen nginx-1.6.0]# vim /etc/rc.d/init.d/nginx
#!/bin/bash
# nginx - this script starts and stops the nginx daemon
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
        if [ -z "`grep $user /etc/passwd`" ]; then
                useradd -M -s /bin/nologin $user
        fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
        if [ `echo $opt | grep '.*-temp-path'` ]; then
                value=`echo $opt | cut -d "=" -f 2`
                if [ ! -d "$value" ]; then
                        # echo "creating" $value
                        mkdir -p $value && chown -R $user $value
                fi
        fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
#configtest || return $?
stop
sleep 1
start
}
reload() {
#configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
        rh_status_q && exit 0
        $1
        ;;
stop)
        rh_status_q || exit 0
        $1
        ;;
restart|configtest)
$1
;;
reload)
        rh_status_q || exit 7
        $1
        ;;
force-reload)
        force_reload
        ;;
status)
        rh_status
        ;;
condrestart|try-restart)
        rh_status_q || exit 0
        ;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

[root@allen nginx-1.6.0]# chmod 775 /etc/rc.d/init.d/nginx

5、启动服务

[root@allen nginx-1.6.0]# /etc/rc.d/init.d/nginx start
[root@allen nginx-1.6.0]# chkconfig nginx on			#开机自启

6、测试

浏览器访问服务器IP

企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第2张图片

6、配置PHP服务

PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言,具有开源免费快捷跨平台性强效率高等优良特点,是目前Web开发领域最常用的语言之一。

1、先安装部署将近十个用于搭建网站页面的软件程序包

yasm:常见的开源汇编器

[root@allen ~]# cd /usr/local/src/
[root@allen src]# tar zxf yasm-1.2.0.tar.gz 
[root@allen src]# cd yasm-1.2.0/
[root@allen yasm-1.2.0]# ./configure && make && make install

libmcrypt:用于加密算法的扩展库程序

[root@allen yasm-1.2.0]# cd ..
[root@allen src]# tar zxf libmcrypt-2.5.8.tar.gz 
[root@allen src]# cd libmcrypt-2.5.8/
[root@allen libmcrypt-2.5.8]# ./configure && make && make install

libvpx:提供视频编码器的服务程序

[root@allen src]# tar jxf libvpx-v1.3.0.tar.bz2 
[root@allen src]# cd libvpx-v1.3.0/
[root@allen libvpx-v1.3.0]# ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9 && make && make install

tiff:用于提供标签图像文件格式的服务程序

[root@allen libvpx-v1.3.0]# cd ..
[root@allen src]# tar zxf tiff-4.0.3.tar.gz 
[root@allen src]# cd tiff-4.0.3/
[root@allen tiff-4.0.3]# ./configure --prefix=/usr/local/tiff --enable-shared && make && make install

libpng:提供png图片格式支持函数库的服务程序

[root@allen tiff-4.0.3]# cd ..
[root@allen src]# tar zxf libpng-1.6.12.tar.gz 
[root@allen src]# cd libpng-1.6.12/
[root@allen libpng-1.6.12]# ./configure --prefix=/usr/local/libpng --enable-shared && make && make install

freetype:提供字体支持引擎的服务程序

[root@allen libpng-1.6.12]# cd ..
[root@allen src]# tar zxf freetype-2.5.3.tar.gz 
[root@allen src]# cd freetype-2.5.3/
[root@allen freetype-2.5.3]# ./configure --prefix=/usr/local/freetype --enable-shared && make && make install

jpeg:提供jpeg图片格式支持函数库的服务程序

[root@allen freetype-2.5.3]# cd ..
[root@allen src]# tar zxf jpegsrc.v9a.tar.gz 
[root@allen src]# cd jpeg-9a/
[root@allen jpeg-9a]# ./configure --prefix=/usr/local/jpeg --enable-shared && make && make install

libgd:提供图片处理的服务程序

[root@allen jpeg-9a]# cd ..
[root@allen src]# tar zxf libgd-2.1.0.tar.gz 
[root@allen src]# cd libgd-2.1.0/
[root@allen libgd-2.1.0]# ./configure --prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype --with-fontconfig=/usr/local/freetype --with-xpm=/usr/ --with-tiff=/usr/local/tiff --with-vpx=/usr/local/libvpx && make && make install

t1lib:提供图片生成函数库的服务程序

  • 安装后将/usr/lib64 目录中的函数文件链接到/usr/lib 目录中,以便系统能顺利调取到函数文件
[root@allen libgd-2.1.0]# cd ..
[root@allen src]# tar zxf t1lib-5.1.2.tar.gz 
[root@allen src]# cd t1lib-5.1.2/
[root@allen t1lib-5.1.2]# ./configure --prefix=/usr/local/t1lib --enable-shared && make && make install 

[root@allen t1lib-5.1.2]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so
[root@allen t1lib-5.1.2]# ln -s /usr/lib64/libXpm.so* /usr/lib/

2、编译、安装php

依次定义配置php服务程序配置文件的保存目录、MySQL数据库服务程序所在目录、MySQL数据库服务程序配置文件所在目录,以及libpng、jpeg、freetype、libvpx、zlib、t1lib等服务程序的安装目录路径,并通过参数启动php服务程序的诸多默认功能

[root@allen t1lib-5.1.2]# cd ..
[root@allen src]# tar zxf php-5.5.14.tar.gz 
[root@allen src]# cd php-5.5.14/
[root@allen php-5.5.14]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-vpx-dir=/usr/local/libvpx/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --enable-ctype
[root@allen php-5.5.14]# make && make install

3、php.ini 和 php-fpm.conf 文件的处理

[root@allen php-5.5.14]# rm -fr /etc/php.ini 
[root@allen php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
[root@allen php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
[root@allen php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@allen php-5.5.14]# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf 

4、php-fpm.conf 文件配置

[root@allen php-5.5.14]# vim /etc/php-fpm.conf		#制作的软链接
 25 pid = run/php-fpm.pid
 148 user = www				#和nginx用户相同
 149 group = www

5、将管理PHP服务的脚本文件复制到/etc/rc.d/init.d目录中

  • 赋予775权限,即可用命令控制
[root@allen php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@allen php-5.5.14]# chmod 775 /etc/rc.d/init.d/php-fpm
[root@allen php-5.5.14]# chkconfig php-fpm on

6、编辑php.ini配置文件,在305行的disable_functions参数后面追加上要禁止的功能

[root@allen php-5.5.14]# vim /etc/php.ini 
305 disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_ getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_ setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

7、最后配置nginx

[root@allen conf]# ln -s /usr/local/nginx/conf/nginx.conf /etc/nginx.conf
[root@allen conf]# vim /etc/nginx.conf 
  2 user  www www;
  
 45             index  index.html index.htm index.php;
 
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_na    me;
 70             include        fastcgi_params;
 71         }

[root@allen conf]# systemctl restart nginx
[root@allen conf]# systemctl restart php-f
  • 至此,LNMP动态网络架构配置实验全部结束

三、搭建Discuz!论坛

为了检验LNMP动态网站环境是否配置妥当,可以使用在上面部署Discuz!系统,然后查看结果。如果能够在LNMP动态网站环境中成功安装使用Discuz!论坛系统,也就意味着这套架构是可用的。Discuz! X3.2是国内最常见的社区论坛系统,在经过十多年的研发后已经成为了全球成熟度最高、覆盖率最广的论坛网站系统之一。

1、将解包的全部文件移至Nginx默认发布目录

[root@allen conf]# cd /usr/local/src/
[root@allen src]# unzip Discuz_X3.2_SC_GBK.zip
[root@allen src]# rm -fr /usr/local/nginx/html/{index.html,50x.html}*
[root@allen src]# mv upload/* /usr/local/nginx/html/
[root@allen src]# chown -Rf www:www /usr/local/nginx/html/
[root@allen src]# chmod -Rf 775 /usr/local/nginx/html/

2、浏览器访问服务器IP

点我同意
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第3张图片
3、没问题当前状态都是可写

如果为不可写,请自行检查目录的所有者和所属组是否为www用户,以及是否对目录设置了755权限,然后单击“下一步”按钮。

企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第4张图片
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第5张图片
4、如图,点击下一步
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第6张图片

5、根据提示填,特别是数据库密码

管理员信息,没有特殊要求,自定义

企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第7张图片
6、跟着提示点击
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第8张图片
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第9张图片

这就是论坛首页
企业项目实战----使用LNMP架构部署动态网站环境 | 搭建Discuz!论坛_第10张图片

你可能感兴趣的:(运维)