1 安装环境、安装需求、安装方式
1.1 安装环境
架构 X86-64
内存 8G
磁盘 200GB
发行版 Centos 6.9
1.2 安装需求
mysql 5.7.19
nginx 1.12.2
redis 3.05
python 2.7
java 1.7
tomcat 7.0.79
1.3 安装方式
软件安装使用编译安装的方式,安装目录:/usr/local/zcmserver,源码放置目录:/usr/local/zcmserver/src;
2 准备工作
在正式环境配置之前需要做一些准备工作。
2.1 关闭selinux
为何要关闭?概括起来就是配置selinux非常麻烦,投入回报率太低,所以一般运维都会直接给它关掉了事。
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
2.2 软件下载
下载nginx:
wget http://nginx.org/download/nginx-1.12.2.tar.gz
下载MySQL:
wget http://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.19.tar.gz
下载cmake(MySQL编译工具):
wget http://www.cmake.org/files/v3.9/cmake-3.9.6.tar.gz
下载pcre (支持nginx伪静态,rewrite模块需要 pcre 库):
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.41/pcre-8.41.tar.gz
下载openssl(nginx扩展,ssl 功能需要):
wget http://www.openssl.org/source/openssl-1.1.0g.tar.gz
下载zlib(nginx扩展,gzip模块需要 zlib 库):
wget http://zlib.net/zlib-1.2.11.tar.gz
下载tcl(安装redis之前需要安装tcl,因为redis的make test是使用tcl编写的):
wget http://downloads.sourceforge.net/tcl/tcl8.6.7-src.tar.gz
下载redis:
wget http://download.redis.io/redis-stable.tar.gz
下载boost:
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
下载python:
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.14.tar.xz
下载mysql-python :
wget http://jaist.dl.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
2.3 依赖安装
在正式进行编译安装之前,需要安装一些依赖软件
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
2.4 修改主机名(个人喜好)
hostname #查看主机名 localhost.localdomain即为默认的主机名。
su #用root用户登录,如果不是root用户,使用su命令切换为root用户
cd /etc/sysconfig #然后修改/etc/sysconfig下的network文件
vi network
NETWORKING=yes
HOSTNAME= localhost.localdomain #这里修改为想要改成的主机名
cd /etc #修改hosts文件
vi hosts
127.0.0.1 localhost (想要修改的主机名)
reboot #重启
2.5 配置线上服务器IP(个人业务需要)
vim /etc/profile
export IP_FOR_CODING=XXXX
source /etc/profile
3 安装mysql
3.1 安装cmake
cd /usr/local/zcmserver/src
tar zxvf cmake-3.9.6.tar.gz
cd cmake-3.9.6
./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/zcmserver/mysql #创建MySQL安装目录
源码编译和安装
cd /usr/local/zcmserver/src #进入软件包存放目录
tar zxvf mysql-5.7.19.tar.gz #解压
cd mysql-5.7.19 #进入目录
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/zcmserver/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc #配置
make #编译
make install #安装
cmake 时报错 CMake Error at cmake/boost.cmake:81 (MESSAGE)
原因
从MySQL 5.7.5开始Boost库是必需的
解决办法
下载安装Boost库,然后重新cmake并在后面的选项中加上选项 -DWITH_BOOST=/usr/local/zcmserver/boost
cd /usr/local/zcmserver/src
tar –zxvf boost_1_59_0.tar.gz
cp –a /usr/local/zcmserver/src/boost_1_59_0 /usr/local/zcmserver/boost
切回mysql源码目录
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/zcmserver/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_BOOST=/usr/local/zcmserver/boost #配置
make #编译
make install #安装
3.3相关配置
rm -rf /etc/my.cnf #删除系统默认的配置文件(如果默认没有就不用删除)
cd /usr/local/zcmserver/mysql/bin
./mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/zcmserver/mysql --socket=/usr/local/zcmserver/mysql/mysql.sock
生成了一个临时密码 :XXXXX
ln -s /usr/local/zcmserver/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/zcmserver/mysql #MySQL程序安装路径
datadir=/data/mysql #MySQl数据库存放目录
:wq! #保存退出
service mysqld start #启动
vi /etc/profile #把mysql服务加入系统环境变量:在最后添加下面这一行
export PATH=$PATH:/usr/local/zcmserver/mysql/bin
:wq! #保存退出
source /etc/profile #使配置立刻生效
下面这些行把myslq的库文件链接到系统默认的位置,这样你在编译类似PHP等软件时可以不用指定mysql的库文件地址。
ln -s /usr/local/zcmserver/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/zcmserver/mysql/include/mysql /usr/include/mysql
ln -s /usr/local/zcmserver/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
mkdir /var/lib/mysql #创建目录
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #添加软链接
如果忘了 root原始密码的解决办法
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
use mysql;
flush privileges;
alter user 'root'@'localhost' IDENTIFIED BY 'XXXXXXX'
修改默认的mysql端口(默认的3306是高危端口):
vi /etc/my.cnf,#将下面前面的注释解除,添加下面的信息。
basedir = /usr/local/zcmserver/mysql
datadir = /data/mysql
port = xxxx
修改字符编码,mysqld下面添加
character-set-server=utf8
如果数据库通过工具连接不上:
1.查看端口号是否开放
2.用户的权限是否是本地
3.数据库端口是否被绑定到了本地 (参考http://blog.csdn.net/Abaneo/article/details/72853513)
(最后发现阿里云有安全组策略,修改之)
4 安装nginx
4.1 安装pcre
cd /usr/local/zcmserver/src
mkdir /usr/local/zcmserver/pcre
tar zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure --prefix=/usr/local/zcmserver/pcre
make
make install
4.2 安装openssl
cd /usr/local/zcmserver/src
mkdir /usr/local/zcmserver/openssl
tar zxvf openssl-1.1.0g.tar.gz
cd openssl-1.1.0g
./config --prefix=/usr/local/zcmserver/openssl
make
make install
vi /etc/profile
export PATH=$PATH:/usr/local/openssl/bin
:wq!
source /etc/profile
4.3 安装zlib
cd /usr/local/zcmserver/src
mkdir /usr/local/zlib
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zcmserver/zlib
make
make install
4.4 安装Nginx
groupadd www
useradd -g www www -s /bin/false
cd /usr/local/zcmserver/src
tar zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/zcmserver/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/zcmserver/src/openssl-1.1.0g --with-zlib=/usr/local/zcmserver/src/zlib-1.2.11 --with-pcre=/usr/local/zcmserver/src/pcre-8.41
make
make install
/usr/local/zcmserver/nginx/sbin/nginx #启动Nginx
编译nginx的时候注意:–with-openssl=/usr/local/zcmserver/src/openssl-1.0.2e –with-zlib=/usr/local/zcmserver/src/zlib-1.2.8 –with-pcre=/usr/local/zcmserver/src/pcre-8.37指向的是源码包解压的路径,而不是安装的路径,否则会报错
连接配置文件
ln -s /usr/local/zcmserver/nginx/conf/nginx.conf /etc/nginx.conf
4.5 设置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/zcmserver/nginx/conf/nginx.conf
# pidfile: /usr/local/zcmserver/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/zcmserver/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/zcmserver/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/zcmserver/python
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.14.tar.xz
xz -d Python-2.7.14.tar.xz
tar Python-2.7.14.tar
cd Python-2.7.14
./configure --prefix=/usr/local/zcmserver/python
make && make install
5.2 安装 setuptools + pip
这里需要注意,一定要使用 python2.7 来执行相关命令。
cd /usr/local/zcmserver/python/bin
# First get the setup script for Setuptools:
wget --no-check-certificate https://bootstrap.pypa.io/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.7 install virtualenv
./virtualenv smartsales
# 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 smartsales/bin/activate
python --version
# This will show Python 2.7.14
deactivate
使用这种安装方法来安装python2.7,可以不影响centos6.9原有的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
tar xvzf MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
vi site.cfg
把 mysql_config = /usr/local/mysql/bin/mysql_config 这一行前的#去掉,并且把mysql_config的路径设置正确。
source cloudphone/bin/activate
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/zcmserver/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 安装git
yum install git-core
7 安装redis
7.1 安装Redis
cd /usr/local/zcmserver/src
tar -zxvf redis-stable.tar.gz #解压
mv redis-stable /usr/local/zcmserver/redis #移动文件到安装目录
cd /usr/local/zcmserver/redis #进入安装目录
make #编译
make install #安装
cd /usr/local/bin #查看是否有下面文件,如果没有,拷贝下面文件到/usr/local/bin目录
cd /usr/local/zcmserver/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/zcmserver/redis/redis.conf /etc/redis.conf #添加配置文件软连接
redis 配置
vi /etc/redis.conf #编辑
daemonize yes #设置后台启动redis
bind 0.0.0.0
port 6542
pidfile /var/run/redis.pid
loglevel verbose
logfile "/usr/local/zcmserver/redis/var/redis.log"
dir /usr/local/zcmserver/redis/var
requirepass greatsmart
:wq! #保存退出
redis-server /etc/redis.conf #启动redis服务
redis-cli shutdown #关闭redis
vi /etc/sysctl.conf #编辑,在最后一行添加下面代码
vm.overcommit_memory = 1
:wq! #保存退出
sysctl -p #使设置立即生效
7.2 设置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 #添加开启启动
7.3 设置redis配置文件参数
mkdir -p /usr/local/zcmserver/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/zcmserver/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/zcmserver/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! #保存退出
8.配置jdk环境及tomcat
配置JDK环境
scp java 安装包 到 /usr/java
scp jdk-7u80-linux-x64.tar.gz root@xxxxx:/usr/local/java
tar zxvf jdk-7u80-linux-x64.tar.gz
修改配置文件
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
export JAVA_BIN=/usr/local/java/jdk1.7.0_80/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
:wq
source /etc/profile
配置tomcat
scp tomcat 压缩包到 /usr/local/zcmserver/src
scp apache-tomcat-7.0.79.tar.gz root@xxxxx:/usr/local/zcmserver/src
tar zxvf apache-tomcat-7.0.79.tar.gz
mv apache-tomcat-7.0.79 /usr/local/zcmserver/tomcat
修改server xml
按需求配置
修改iptables
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8100 -j ACCEPT
9 安装screen
yum install screen