CentOS 上部署Discuz!X论坛1

前言



应公司需求,最近需要搭建一个内部员工交流的论坛,任务自然落到我的头上。所以这篇博文也就是记录一下部署过程,也希望各位博友多多指点。

Discuz! X 是一款以 PHP 为编程语言,以 MySQL 为数据库,并使用 Apache/IIS/Nginx(任意一种即可) 提供 web 服务的产品。要搭建 Discuz! X 站点,服务器必须安装由 PHP、MySQL、Apache/IIS/Nginx 构成的环境。其中,IIS 主要用于 Windows 服务器,Apache、Nginx 多用于 Linux 服务器(即 LAMP 和 LNMP)。

我这里采用的是LAMP架构,具体的部署环境如下:

  • CentOS 6.5 x64
  • Apache 2.4.10
  • MySQL 5.5.39
  • PHP 5.4
  • Discuz_X3.2_SC_UTF8

部署过程



CentOS系统的安装过程

这里就不讲解了,否则篇幅过于冗长。如果有需要的同学,请参考《使用VMware Workstation安装CentOS 5.8》。或者google之。

系统安装完成之后,做一些基本的优化操作

  • 更新yum源为国内网易163的源
  • 同步时间
  • 打开文件数量限制
  • SELinux 和 iptables
  • 内核参数调优
  • 关闭不需要的服务
  • ssh服务配置

注意:如果是root用户通过ssh软件远程连接到Linux服务器可要小心了,因为此脚本会配置sshd禁止root用户远程登录。

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

###CentOS 6.5_x64 minimal

### check OS version
platform=$(uname -i)
if [[ "x$platform" != "xx86_64"  ]];then
	echo "This script is only for 64 bit Operating System !"
	exit 1
fi

### check the root
uid=$(id -u)
if [[ "x$uid" ! "x0" ]];then
	echo "Must root can do it"
	exit 1
fi

cat << EOF
+---------------------------------------+
|   your system is CentOS 6 x86_64      |
|      start optimizing.......          |
+---------------------------------------
EOF

### yum install wget , lrzsz
yum -y install wget lrzsz

### make the 163.com as the default yum repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.$(date +%F).bak 
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -O /etc/yum.repos.d/CentOS-Base-163.repo

### update the system and set the ntp
yum clean all
yum makecache
# 这里可选,后续空闲的时候执行也可以,否则要等待很长一段时间
yum -y update

### ntp pool.ntp.org(202.118.1.130) 或者 210.72.145.44
if rpm -qa | grep -q ‘ntpdate‘ &> /dev/null; then
	echo ‘10 4 * * * /usr/sbin/ntpdate 210.72.145.44 &> /dev/null ; hwclock -w‘ >> /var/spool/cron/root
else
	yum -y install ntpdate
	echo ‘10 4 * * * /usr/sbin/ntpdate 210.72.145.44 &> /dev/null; hwclock -w‘ >> /var/spool/cron/root
fi
service crond restart

### set the file limit
echo ‘ulimit -SHn 102400‘ >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
*           soft   nofile       65535
*           hard   nofile       65535
EOF

### set the control-alt-delete to restart
sed -i ‘s#exec /sbin/shutdown -r now#\#exec /sbin/shutdown -r now#‘ /etc/init/control-alt-delete.conf

### disable selinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config

### tune kernel parameters
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
EOF

/sbin/sysctl -p

### close the nouse server
#for server in "$(chkconfig --list | grep 3:on | awk ‘{print $1}‘)";do
#	chkconfig --level 3 $server off
#done

#for server in crond kudzu network readahead_early rsyslog sshd iptables; do
#	chkconfig --level 3 $server on
#done

#ssh
sed -i ‘/^#UseDNS/s/#UseDNS yes/UseDNS no/g‘ /etc/ssh/sshd_config
#sed -i ‘s/#PermitRootLogin yes/PermitRootLogin no/g‘ /etc/ssh/sshd_config
sed -i ‘s/#PermitEmptyPasswords no/PermitEmptyPasswords no/g‘ /etc/ssh/sshd_config
/etc/init.d/sshd restart

### iptables
iptables -F
iptables -X
iptables -Z
iptables -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -P INPUT DROP

/etc/init.d/iptables save

cat << EOF
+-------------------------------------------------+
|               optimizer is done                 |
|   it‘s recommond to restart this server !       |
+-------------------------------------------------+
EOF

LAMP环境搭建



在安装之前,我们先关闭掉iptables,最后再开启它。

因为后期要编译源码包,所以我们需要安装所需的开发工具包。

编译安装的原则:对于我来说,需要定制的就直接编译,其余的一切皆yum / apt-get搞定

下载的软件包列表如下:在开始安装之前,最好先用rpm -qa 检查一下是否已经安装了相应的包,因为我这里是最小化安装,所以就跳过这个步骤了。

[[email protected] lamp]# ls -l
total 196880
-rw-r--r--. 1 root root   1020833 Sep 13 16:29 apr-1.5.1.tar.gz
-rw-r--r--. 1 root root    874462 Mar 18 17:16 apr-util-1.5.3.tar.gz
-rw-r--r--. 1 root root   6820719 Sep 13 16:27 httpd-2.4.10.tar.gz
-rw-r--r--. 1 root root    172464 Mar 20 13:54 libmcrypt-2.5.7-1.2.el6.rf.i686.rpm
-rw-r--r--. 1 root root     84680 Mar 20 13:54 libmcrypt-devel-2.5.7-1.2.el6.rf.i686.rpm
-rw-r--r--. 1 root root    100230 Mar 26 13:49 mod_fastcgi-2.4.6.tar.gz
-rw-r--r--. 1 root root 177020618 Jul 20 11:00 mysql-5.5.38-linux2.6-i686.tar.gz
-rw-r--r--. 1 root root  15323862 Sep 13 16:27 php-5.4.32.tar.gz
-rw-r--r--. 1 root root    166263 Sep 13 16:28 xcache-3.0.4.tar.gz

1、编译安装httpd

我这里仅列出简明扼要的命令,详细的安装步骤可以参考《编译安装LAMP之一》。

[[email protected] ~]# service iptables stop
# 安装开发工具 gcc make cmake , and so on
[[email protected] ~]# yum -y groupinstall "Development Tools"
# 安装openssl
[[email protected] ~]# yum -y install openssl openssl-devel pcre pcre-devel
# 安装 apr 1.5.1
[[email protected] lamp]# tar xf apr-1.5.1.tar.gz -C /usr/local/src
[[email protected] lamp]# cd /usr/local/src
[[email protected] src]# cd apr-1.5.1/
[[email protected] apr-1.5.1]# ./configure --prefix=/usr/local/apr-httpd
[[email protected] apr-1.5.1]# make && make install
# 安装 apr-util 1.5.3
[[email protected] lamp]# tar xf apr-util-1.5.3.tar.gz  -C /usr/local/src
[[email protected] lamp]# cd /usr/local/src
[[email protected] src]# cd apr-util-1.5.3/
[[email protected] apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd
[[email protected] apr-util-1.5.3]# make && make install

# 编译安装httpd
[[email protected] lamp]# tar xf httpd-2.4.10.tar.gz -C /usr/local/src
[[email protected] lamp]# cd /usr/local/src
[[email protected] src]# cd httpd-2.4.10/
[[email protected] httpd-2.4.10]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-modules=most --enable-mods-shared=most --enable-rewrite --with-zlib --with-pcre --enable-mpms-shared=all --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd
[[email protected] httpd-2.4.10]# make && make install
# 创建apache用户
[[email protected] ~]# groupadd -r apache
[[email protected] ~]# useradd -r -g apache -s /sbin/nologin apache
# 编辑httpd.conf配置文件
[[email protected] ~]# vi /etc/httpd/httpd.conf 
User apache
Group apache

# pidfile for httpd
Pidfile "/var/run/httpd.pid"

# 提供httpd服务启动脚本
[[email protected] ~]# vi /etc/init.d/httpd 
#!/bin/bash  
#  
# httpd        Startup script for the Apache HTTP Server  
#  
# chkconfig: - 85 15  
# description: Apache is a World Wide Web server. It is used to serve \  
#            HTML files and CGI.  
# processname: httpd  
# config: /etc/httpd/conf/httpd.conf  
# config: /etc/sysconfig/httpd  
# pidfile: /var/run/httpd.pid  
    
# Source function library.  
. /etc/rc.d/init.d/functions  
    
if [ -f /etc/sysconfig/httpd ]; then  
        . /etc/sysconfig/httpd  
fi  
    
# Start httpd in the C locale by default.  
HTTPD_LANG=${HTTPD_LANG-"C"}  
    
# This will prevent initlog from swallowing up a pass-phrase prompt if  
# mod_ssl needs a pass-phrase from the user.  
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server  
# with the thread-based "worker" MPM; BE WARNED that some modules may not  
# work correctly with a thread-based MPM; notably PHP will refuse to start.  
    
# Path to the apachectl script, server binary, and short-form for messages.  
apachectl=/usr/local/apache/bin/apachectl  
httpd=${HTTPD-/usr/local/apache/bin/httpd}  
prog=httpd 
pidfile=${PIDFILE-/var/run/httpd.pid}  
lockfile=${LOCKFILE-/var/lock/subsys/httpd}  
RETVAL=0 
    
start() {  
        echo -n $"Starting $prog: "  
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS  
        RETVAL=$?  
        echo  
        [ $RETVAL = 0 ] && touch ${lockfile}  
        return $RETVAL  
}  
    
stop() {  
       echo -n $"Stopping $prog: "  
       killproc -p ${pidfile} -d 10 $httpd  
       RETVAL=$?  
       echo  
       [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}  
}  
reload() {  
    echo -n $"Reloading $prog: "  
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then  
        RETVAL=$?  
        echo $"not reloading due to configuration syntax error"  
        failure $"not reloading $httpd due to configuration syntax error"  
    else  
        killproc -p ${pidfile} $httpd -HUP  
        RETVAL=$?  
    fi  
    echo  
}  

# See how we were called.  
case "$1" in  
 start)  
       start  
       ;;  
 stop)  
       stop  
       ;;  
 status)  
        status -p ${pidfile} $httpd  
       RETVAL=$?  
       ;;  
 restart)  
       stop  
       start  
       ;;  
 condrestart)  
       if [ -f ${pidfile} ] ; then  
              stop  
              start  
       fi  
       ;;  
 reload)  
        reload  
       ;;  
 graceful|help|configtest|fullstatus)  
       $apachectl [email protected]  
       RETVAL=$?  
       ;;  
 *)  
       echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"  
       exit 1  
esac  
    
exit $RETVAL 

###
[[email protected] ~]# chmod +x /etc/init.d/httpd 
[[email protected] ~]# chkconfig --add httpd
[[email protected] ~]# chkconfig httpd on
[[email protected] ~]# service httpd start
Starting httpd: AH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using localhost.localdomain. Set the ‘ServerName‘ directive globally to suppress this message
                                                           [  OK  ]
[[email protected] ~]# netstat -tulpn | grep 80
tcp        0      0 :::80                       :::*                        LISTEN      32608/httpd 
# 把httpd的bin目录添加到PATH
[[email protected] ~]# vi /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/local/apache/bin
[[email protected] ~]# . /etc/profile.d/httpd.sh
[[email protected] ~]# httpd -t
[[email protected] ~]# httpd -l
[[email protected] ~]# httpd -M

# OK, httpd到此安装完毕
时间: 2024-10-13 02:29:58

CentOS 上部署Discuz!X论坛1的相关文章

CentOS 上部署Discuz!X论坛2

紧接上一篇,废话少说,直接实战.详细内容请参考<编译安装LAMP一> <MySQL-5.5.38通用二进制安装> 2.安装MySQL # 创建mysql用户和组 [[email protected] ~]# groupadd -r mysql [[email protected] ~]# useradd -r -g mysql -s /sbin/nologin mysql # 目录规划 [[email protected] ~]# mkdir -pv /mydata/data mk

在CentOS上部署单机版Hadoop

本文记录如何在一台CentOS上部署单机版Hadoop.CentOS安装在Azure上. 安装CentOS 在Azure上新建一台虚拟机,选择操作系统CentOS6.8.记住主机名,比如centosforhd.主机名在后面设置中会用到. 安装好之后,用Putty工具登录到CentOS上.登录之后请转为root用户来操作下面的安装.(命令: sudo su) 安装Java 1 下载JDK 从Java官网下载最新的JDK.如果是在windows下下载,下载之后可以通过SSH Secure File

centos上部署openvpn

说明: 目的是实现在家可以访问公司内部局域网内的机器.实现方式是通过在centos上部署openvpn服务, 通过vpn连入内部局域网. 软件包下载:http://build.openvpn.net/downloads/releases/ 参考文档:https://openvpn.net/index.php/open-source/documentation/howto.html 系统环境:centos 6.8 安装包准备: Openssl   lzo   pam  openvpn 安装open

轻轻松松在centos上部署docker服务

首先,因为docker的运行需要linux本身某些组件和内核特性的支持,所以要确保centos的版本大于6,并且内核版本大于2.6.32-431.可以简单的升级centos6到最新版本. sudo yum upgrade 然后安装cgroup sudo yum install libcgroup service cgconfig start #启动croup服务 lssubsys -am 如果安装成功,最后一个命令lssubsys -am会显示所有子系统的挂载点 源码方式安装lxc sudo y

在Docker Centos上部署Jenkins(包含Jenkins汉化)

环境: 本机 - macOS 10.12.6 Docker - Docker Community Editoin_ Version 17.06.0-ce-mac19(安装步骤见另一篇) 使用的Docker镜像: centos (latest) 安装步骤: 1.新建并启动一个centos docker容器 tester_mac:~ $  docker run -itd --privileged --name=jenkins -p 4000:4000 centos /usr/sbin/init --

Linode VPS上部署类V2EX论坛应用Django forum

Django是Python Web比较著名的框架,很多有名的网站如Instagram都是利用该框架来搭建的.V2EX是一个界面简洁,功能丰富完整的论坛类型,基于Google APP Engine开发部署,部分源码尚未开源.网络上有很多模仿V2EX使用其它框架来开发部署的.今天记录下自己在Linode VPS上部署类V2EX Django应用. 登录Linode VPS账号 这里使用的是Ubuntu16.04LTS PuTTY远程登录Linode VPS主机 键入"Python",可以看

在CentOS上部署Asp.net Core应用程序

作为一个Linux新手,许多人向我鼓吹说CentOS多么强大,于是我就开始把一个演示程序发布到CentOS,想试一下它到底有多强大.在此之前,我将同样的程序已经成功发布到了Ubuntu,我觉得,既然已经有了前一次的成功经验,不论CentOS还是Ubuntu都是Linux,道理应该差不多吧.但事实证明,还是有些差异的,某些在CentOS上频出的问题在Ubuntu上却没有,所以我的感觉是Ubuntu部署Asp.net Core程序更容易些. 过程很不顺利,但最终经过一天摸索已摸清个七八成,应用总算能

源码时代Linux干货分享| 如何在CentOS上部署JDK及MySQL数据库

1.在CentOS上用包管理器快速部署JDK 查看centos原本自带的openjdk,运行命令:rpm -qa | grep java 卸载openjdk rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 rpm -e --nodeps java-1.7.0-openjdk-hea

在LAMP环境下部署Discuz! X论坛

前期准备 [[email protected] 桌面]# yum  -y  install  openssl-devel ncurses-devel libtermcap-devel libxml2-devel [[email protected] 桌面]# yum  -y  remove  httpd  mysql-server  mysql  php-mysql 1. 安装 httpd源码包 [[email protected] 桌面]# tar -zxvf httpd-2.2.25.tar