CentOS 6.4环境下配置LNMP环境

1 环境、目标和约定

1.1 环境

项目项目
架构X86-64内存4G
磁盘200GB发行版Centos 6.4

1.2 安装需求

软件版本软件版本
mysqlmysql5.6.21nginx1.8.0
redis3.05python2.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 "s@^\(TCL_SRC_DIR='\).*@\1/usr/include'@"  -e "/TCL_B/s@='\(-L\)\?.*unix@='\1/usr/lib@"  -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! #保存退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值