CentOS 6.4环境下配置LNMP环境
1 环境、目标和约定
1.1 环境
项目 | 值 | 项目 | 值 |
---|---|---|---|
架构 | X86-64 | 内存 | 4G |
磁盘 | 200GB | 发行版 | Centos 6.4 |
1.2 安装需求
软件 | 版本 | 软件 | 版本 |
---|---|---|---|
mysql | mysql5.6.21 | nginx | 1.8.0 |
redis | 3.05 | python | 2.7 |
1.3 约定
软件安装使用编译安装的方式,安装目录:/usr/local/qqwebserver,源码放置目录:/usr/local/qqwebserver/src;
2 准备工作
在正式环境配置之前需要做一些准备工作。
2.1 关闭selinux
为何要关闭?概括起来就是配置selinux非常麻烦,投入回报率太低,所以一般运维都会直接给它关掉了事。
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
2.2 挂载硬盘
云主机供应商提供的主机默认只挂载了一个50GB左右的磁盘到/,额外的磁盘需要自己单独挂载,挂载命令如下:
fdisk -l
fdisk /dev/sdb #进行分区
mkfs -t ext3 -c /dev/sdb1
mount /dev/sdb1 /data
如果想每次系统重启都能自动挂载该分区可修改/etc/fstab文件,在最后加一段 /dev/sdb1 /www ext3 defaults 1 2 (格式说明:/dev/sdb1 代表哪个分区 ext3是该分区的格式 defaults 是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async) ,1是使用dump是否要记录,0是不要。 2是开机时检查的顺序,是boot系统文件就为1,其他文件系统都为2,如不要检查就为0)
2.3 软件下载
下载nginx:
wget http://nginx.org/download/nginx-1.6.2.tar.gz
下载MySQL:
wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.21.tar.gz
下载cmake(MySQL编译工具):
wget http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz
下载pcre (支持nginx伪静态,rewrite模块需要 pcre 库):
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
下载openssl(nginx扩展,ssl 功能需要):
wget http://www.openssl.org/source/openssl-1.0.2g.tar.gz
下载zlib(nginx扩展,gzip模块需要 zlib 库):
wget http://zlib.net/zlib-1.2.8.tar.gz
下载tcl(安装redis之前需要安装tcl,因为redis的make test是使用tcl编写的):
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
下载redis:
wget http://download.redis.io/redis-stable.tar.gz
2.4 依赖安装
在正式进行编译安装之前,需要安装一些依赖软件
yum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng* libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libX* libtiff libtiff* make mpfr ncurses* ntp openssl nasm nasm* openssl-devel patch pcre-devel perl php-common php-gd policycoreutils ppl telnet t1lib t1lib* wget zlib-devel
3 安装mysql
3.1 安装cmake
cd /usr/local/qqwebserver/src
tar zxvf cmake-3.0.2.tar.gz
cd cmake-3.0.2
./configure
make
make install
3.2 安装mysql
准备工作
groupadd mysql #添加mysql组
useradd -g mysql mysql -s /bin/false #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统
mkdir -p /data/mysql #创建MySQL数据库存放目录
chown -R mysql:mysql /data/mysql #设置MySQL数据库存放目录权限
mkdir -p /usr/local/qqwebserver/mysql #创建MySQL安装目录
源码编译和安装
cd /usr/local/qqwebserver/src #进入软件包存放目录
tar zxvf mysql-5.6.21.tar.gz #解压
cd mysql-5.6.21 #进入目录
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/qqwebserver/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc #配置
make #编译
make install #安装
相关配置
rm -rf /etc/my.cnf #删除系统默认的配置文件(如果默认没有就不用删除)
cd /usr/local/qqwebserver/mysql #进入MySQL安装目录
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/qqwebserver/mysql --datadir=/data/mysql #生成mysql系统数据库
ln -s /usr/local/qqwebserver/mysql/my.cnf /etc/my.cnf #添加到/etc目录的软连接
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld #把Mysql加入系统启动
chmod 755 /etc/init.d/mysqld #增加执行权限
chkconfig mysqld on #加入开机启动
vi /etc/rc.d/init.d/mysqld #编辑
basedir=/usr/local/qqwebserver/mysql #MySQL程序安装路径
datadir=/data/mysql #MySQl数据库存放目录
:wq! #保存退出
service mysqld start #启动
vi /etc/profile #把mysql服务加入系统环境变量:在最后添加下面这一行
export PATH=$PATH:/usr/local/qqwebserver/mysql/bin
:wq! #保存退出
source /etc/profile #使配置立刻生效
#下面这两行把myslq的库文件链接到系统默认的位置,这样你在编译类似PHP等软件时可以不用指定mysql的库文件地址。
ln -s /usr/local/qqwebserver/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/qqwebserver/mysql/include/mysql /usr/include/mysql
ln -s /usr/local/qqwebserver/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
mkdir /var/lib/mysql #创建目录
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #添加软链接
mysql_secure_installation #设置Mysql密码,根据提示按Y 回车输入2次密码
#修改默认的mysql端口(默认的3306是高危端口):
vi /etc/my.cnf,#将下面前面的注释解除,添加下面的信息。
basedir = /usr/local/qqwebserver/mysql
datadir = /data/mysql
port = xxxx
#修改字符编码,mysqld下面添加
character-set-server=utf8
4 安装nginx
4.1 安装pcre
cd /usr/local/qqwebserver/src
mkdir /usr/local/qqwebserver/pcre
tar zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure --prefix=/usr/local/qqwebserver/pcre
make
make install
4.2 安装openssl
cd /usr/local/qqwebserver/src
mkdir /usr/local/qqwebserver/openssl
tar zxvf openssl-1.0.2e.tar.gz
cd openssl-1.0.2e
./config --prefix=/usr/local/qqwebserver/openssl
make
make install
vi /etc/profile
export PATH=$PATH:/usr/local/openssl/bin
:wq!
source /etc/profile
4.4 安装zlib
cd /usr/local/qqwebserver/src
mkdir /usr/local/zlib
tar zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/usr/local/qqwebserver/zlib
make
make install
4.5 安装Nginx
groupadd www
useradd -g www www -s /bin/false
cd /usr/local/qqwebserver/src
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/qqwebserver/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/qqwebserver/src/openssl-1.0.2e --with-zlib=/usr/local/qqwebserver/src/zlib-1.2.8 --with-pcre=/usr/local/qqwebserver/src/pcre-8.37
make
make install
/usr/local/qqwebserver/nginx/sbin/nginx #启动Nginx
编译nginx的时候注意:–with-openssl=/usr/local/qqwebserver/src/openssl-1.0.2e –with-zlib=/usr/local/qqwebserver/src/zlib-1.2.8 –with-pcre=/usr/local/qqwebserver/src/pcre-8.37指向的是源码包解压的路径,而不是安装的路径,否则会报错
连接配置文件
ln -s /usr/local/qqwebserver/nginx/conf.d/nginx.cnf /etc/nginx.cnf
4.6 设置nginx开机启动
vi /etc/rc.d/init.d/nginx #编辑启动文件添加下面内容
#!/bin/sh
# chkconfig: - 85 15
# nginx - this script starts and stops the nginx daemon
# config: /usr/local/qqwebserver/nginx/conf/nginx.conf
# pidfile: /usr/local/qqwebserver/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/qqwebserver/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/qqwebserver/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
:wq! #保存退出
chmod 775 /etc/rc.d/init.d/nginx #赋予文件执行权限
chkconfig nginx on #设置开机启动
/etc/rc.d/init.d/nginx restart #重启
5 安装python2.7
5.1 编译安装python2.7
mkdir /usr/local/qqwebserver/python
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
tar xf Python-2.7.11.tgz
cd Python-2.7.11
./configure --prefix=/usr/local/qqwebserver/python
make && make install
5.2 安装 setuptools + pip
这里需要注意,一定要使用 python2.7 来执行相关命令。
cd /usr/local/qqwebserver/python/bin
# First get the setup script for Setuptools:
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 :
./python2.7 ez_setup.py
# Nowinstall pip using the newly installed setuptools:
./easy_install-2.7 pip
./pip2.7install virtualenv
./virtualenv-2.7 cloudphone
# Check the system Python interpreter version:
python --version
# This will show Python 2.6.6
# Activate the my27project sandbox andcheck the versionof the default Python interpreter in it:
source cloudphone/bin/activate
python --version
# This will show Python 2.7.11
deactivate
使用这种安装方法来安装python2.7,可以不影响centos6.4原有的python2.6
5.3 安装mysql python
下载mysql-python
wget http://jaist.dl.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
python setup.py build
python setup.py install
5.4 安装WSGI容器
在这里nginx仅仅是充当一个反向代理服务器,使用python的Flask框架编写的网站程序将会以webservice的形式运行,webservice也有多种形式,例如FastCGI,WSGI等,这本次安装中我们使用WSGI的模式,使用的容器是gunicorn,同时这里使用supervisor来管理服务器进程。
所以最终网站的部署模式是:
nginx+gunicorn+flask+supervisor
安装gunicorn和supervisor
pip install gunicorn
pip install supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
vim supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理
在supervisor.conf的底部添加下面的内容:
[program:myapp]
command=/usr/local/qqwebserver/python/bin/myapp/bin/gunicorn -w4 -b0.0.0.0:6000 manage:app ; supervisor启动命令 w4表示启动4个进程
directory=/opt/myapp ; 项目的文件夹路径
startsecs=0 ; 启动时间
stopwaitsecs=0 ; 终止等待时间
autostart=false ; 是否自动启动
autorestart=false ; 是否自动重启
stdout_logfile=/opt/myapp/log/gunicorn.log ; log 日志
stderr_logfile=/opt/myapp/log/gunicorn.err ; 错误日志
supervisor的基本使用命令
supervisord -c supervisor.conf 通过配置文件启动supervisor
supervisorctl -c supervisor.conf status 察看supervisor的状态
supervisorctl -c supervisor.conf reload 重新载入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname] 启动指定/所有 supervisor管理的程序进程
supervisorctl -c supervisor.conf stop [all]|[appname] 关闭指定/所有 supervisor管理的程序进程
首先使用 supervsior 启动 gunicorn,运行命令
supervisord -c supervisor.conf
然后利用上面的supervisorctl命令管理容器进程。
6 安装redis
6.1 安装tcl
redis的make test是使用tcl语言编写的,因此在编译安装redis之前需要先安装tcl
cd /usr/local/qqwebserver/src #进入软件包存放目录
tar zxvf tcl8.6.1-src.tar.gz #解压
cd tcl8.6.1 #进入安装目录
cd unix
./configure --prefix=/usr --without-tzdata --mandir=/usr/share/man $([ $(uname -m) = x86_64 ] && echo --enable-64bit) #配置
make #编译
sed -e "[email protected]^\(TCL_SRC_DIR='\).*@\1/usr/include'@" -e "/TCL_B/[email protected]='\(-L\)\?.*[email protected]='\1/usr/[email protected]" -i tclConfig.sh
make install #安装
make install-private-headers
ln -v -sf tclsh8.6 /usr/bin/tclsh
chmod -v 755 /usr/lib/libtcl8.6.so
6.2 安装Redis
cd /usr/local/qqwebserver/src
tar -zxvf redis-stable.tar.gz #解压
mv redis-stable /usr/local/qqwebserver/redis #移动文件到安装目录
cd /usr/local/qqwebserver/redis #进入安装目录
make #编译
make install #安装
cd /usr/local/bin #查看是否有下面文件,如果没有,拷贝下面文件到/usr/local/bin目录
cd /usr/local/qqwebserver/redis
mkdir -p /usr/local/bin
cp -p redis-server /usr/local/bin
cp -p redis-benchmark /usr/local/bin
cp -p redis-cli /usr/local/bin
cp -p redis-check-dump /usr/local/bin
cp -p redis-check-aof /usr/local/bin
ln -s /usr/local/qqwebserver/redis/redis.conf /etc/redis.conf #添加配置文件软连接
vi /etc/redis.conf #编辑
daemonize yes #设置后台启动redis
:wq! #保存退出
redis-server /etc/redis.conf #启动redis服务
redis-cli shutdown #关闭redis
vi /etc/sysctl.conf #编辑,在最后一行添加下面代码
vm.overcommit_memory = 1
:wq! #保存退出
sysctl -p #使设置立即生效
6.3 设置redis开机启动
vi /etc/init.d/redis #编辑,添加以下代码
#!/bin/sh
# chkconfig: 2345 10 90
# redis Startup script for redis processes
redis_path="/usr/local/bin/redis-server"
redis_conf="/etc/redis.conf"
redis_pid="/var/run/redis.pid"
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $redis_path ] || exit 0
RETVAL=0
prog="redis"
# Start daemons.
start() {
if [ -e $redis_pid -a ! -z $redis_pid ];then
echo $prog" already running...."
exit 1
fi
echo -n $"Starting $prog "
# Single instance for all caches
$redis_path $redis_conf
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog"
}
echo
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $"Stopping $prog "
killproc -d 10 $redis_path
echo
[ $RETVAL = 0 ] && rm -f $redis_pid /var/lock/subsys/$prog
RETVAL=$?
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if test "x`pidof redis`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit $RETVAL
:wq! #保存退出
chmod 755 /etc/init.d/redis #添加脚本执行权限
chkconfig --add redis #添加开启启动
6.4 设置redis配置文件参数
mkdir -p /usr/local/qqwebserver/redis/var #创建redis数据库存放目录
vi /etc/redis.conf #编辑
daemonize yes #以后台daemon方式运行redis
pidfile "/var/run/redis.pid" #redis以后台运行,默认pid文件路径/var/run/redis.pid
port 6543 #默认端口
bind 127.0.0.1 #默认绑定本机所有ip地址,为了安全,可以只监听内网ip
timeout 300 #客户端超时设置,单位为秒
loglevel verbose #设置日志级别,支持四个级别:debug、notice、verbose、warning
logfile stdout #日志记录方式,默认为标准输出,logs不写文件,输出到空设备/deb/null
logfile "/usr/local/qqwebserver/redis/var/redis.log" #可以指定日志文件路径
databases 16 #开启数据库的数量
save 900 1
save 300 10
save 60 10000
#创建本地数据库快照,格式:save * *
#900秒内,执行1次写操作
#300秒内,执行10次写操作
#60秒内,执行10000次写操作
rdbcompression yes #启用数据库lzf压缩,也可以设置为no
dbfilename dump.rdb #本地快照数据库名称
dir "/usr/local/qqwebserver/redis/var/" #本地快照数据库存放目录
requirepass doodod123 #设置redis数据库连接密码
maxclients 10000 #同一时间最大客户端连接数,0为无限制
maxmemory 1024MB #设定redis最大使用内存,值要小于物理内存,必须设置
appendonly yes #开启日志记录,相当于MySQL的binlog
appendfilename "appendonly.aof" #日志文件名,注意:不是目录路径
appendfsync everysec #每秒执行同步,还有两个参数always、no一般设置为everysec,相当于MySQL事物日志的写方式
:wq! #保存退出
上一篇: lnmp环境下 PHP安装redis并 配置redis扩展
下一篇: 干货:有哪些业余赚钱的途径?
推荐阅读
-
ubuntu 下JDK环境变量配置方法
-
spark-windows(含eclipse配置)下本地开发环境搭建
-
详解CentOS 7.0源码包搭建LNMP 实际环境搭建
-
Gentoo 下安装与配置Nginx+ MySQL + PHP (fastcgi) 环境步骤分享
-
centos系统下LNMP环境一键安装
-
Centos7系统下搭建.NET Core2.0+Nginx+Supervisor环境
-
Linux环境(CentOS6.7 64位)下安装subversion1.9.5的方法
-
CentOS环境下安装Redis3.0及phpredis扩展测试示例
-
CentOS6.5环境安装nginx服务器及负载均衡配置操作详解
-
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程