新版TeamTalk部署教程
原文转自蓝狐(bluefox)的博客:https://blog.csdn.net/simongyley/article/details/45535429。对文中部分问题做了修改。
0、简介
新版TeamTalk已经在2015年03月28日发布了,目前版本定为1.0.0版本,后续版本号会按照如下规则进行:
1、版本规则按照x.y.z的形式进行。
2、各端小bug修复则版本号中z增加。
3、有新的feature增加,则版本号中y增加。
4、有重大更新及不兼容更新,则版本号x增加。
本教程会在VirtualBox 虚拟机中进行安装部署一整套服务端,并做记录,给大家做个参考,后面会将整个虚拟机打包上传到网盘中,为那些不想自己亲自部署的人一个可用环境。
这篇博客中,不会使用一键部署脚本,我会一步一步手动去部署。另外我会尽量选择源码安装mysql,php,nginx等,后面所有的安装在/usr/local/目录下。(源码安装很多参考了军哥(http://www.lnmp.org)的脚本,在此表示感谢)。
真个部署过程从晚上8:00开始到半夜将近2:00(由于时间太晚了,明天还要上班,所以配置那块后面再写),耗时近6个小时,所以本文也耗时5个多小时才完成,希望可以帮助到大家。
更新:
-
2015年04月02日更新
-
更新了配置文件说明
-
2015年04月07日更新
-
更新了数据库导入,及问题修复。
-
2015年05月05日
-
修复mysql下载不了问题,感谢反馈。
我的环境如下:
-
虚拟机:VirtualBox 4.3.18
-
CPU:2核
-
内存:2GB
-
硬盘:10GB
-
操作系统:CentOS 6.5 x64
-
IP:192.168.1.150
下面我们正式开始:
1、更新操作系统
更新操作系统:
CentOS 使用如下命令:
yum update
Ubuntu 使用如下命令:
apt-get update
该命令会执行更新,会消耗一段时间,国内用户,建议使用科大源或者163,搜狐等都可以,这会为大家节省很多时间,具体使用方法,可以见相关的页面:
-
163源帮助:http://mirrors.163.com/.help/centos.html
-
:http://mirrors.163.com/.help/ubuntu.html
-
搜狐源帮助:http://mirrors.sohu.com/help/centos.html
-
:http://mirrors.sohu.com/help/ubuntu.html
-
科大源帮助:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
-
:https://lug.ustc.edu.cn/wiki/mirrors/help/ubuntu
执行上面命令后,会检查一些更新,会出现如下图:
后面会询问是否安装更新,有可能会询问你是否需要导入密钥之类的,输入y即可,如下图所示:
2、删除已经安装的软件
为了减少一些不必要的麻烦,我们需要先卸载系统自带的一些软件,譬如mysql,nginx,php,执行以下命令:
CentOS 执行如下命令:
yum -y remove httpd* php* mysql-server mysql mysql-libs php-mysql
Ubuntu 使用如下命令:
-
apt-get remove -y apache2 apache2-doc apache2-utils apache2.2-common apache2.2-bin apache2-mpm-prefork apache2-doc apache2-mpm-worker mysql-client mysql-server mysql-common php5 php5-common php5-cgi php5-mysql php5-curl php5-gd
-
killall apache2
-
dpkg -l |grep mysql
-
dpkg -P libmysqlclient15off libmysqlclient15-dev mysql-common
-
dpkg -l |grep apache
-
dpkg -P apache2 apache2-doc apache2-mpm-prefork apache2-utils apache2.2-common
-
dpkg -l |grep php
-
dpkg -P php5 php5-common php5-cgi php5-mysql php5-curl php5-gd
-
apt-get purge `dpkg -l | grep php| awk '{print $2}'`
如下图所示:
3、安装必要的依赖软件
由于我选择的是CentOS 最小化安装,所以系统中很多软件是没有安装的,需要我手动安装。
执行如下命令安装一些依赖软件:
CentOS 使用如下命令:
yum -y install wget vim git texinfo patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils
ubuntu 使用如下命令:
-
apt-get autoremove -y
-
apt-get -fy install
-
apt-get install -y build-essential gcc g++ make
-
apt-get install -y --force-yes wget vim git texinfo patch build-essential gcc g++ make cmake automake autoconf re2c wget cron bzip2 libzip-dev libc6-dev file rcconf flex vim nano bison m4 gawk less make cpp binutils diffutils unzip tar bzip2 libbz2-dev unrar p7zip libncurses5-dev libncurses5 libncurses5-dev libncurses5-dev libtool libevent-dev libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlibc openssl libsasl2-dev libltdl3-dev libltdl-dev libmcrypt-dev zlib1g zlib1g-dev libbz2-1.0 libbz2-dev libglib2.0-0 libglib2.0-dev libpng3 libjpeg62 libjpeg62-dev libjpeg-dev libpng-dev libpng12-0 libpng12-dev curl libcurl3 libmhash2 libmhash-dev libpq-dev libpq5 gettext libncurses5-dev libcurl4-gnutls-dev libjpeg-dev libpng12-dev libxml2-dev zlib1g-dev libfreetype6 libfreetype6-dev libssl-dev libcurl3 libcurl4-openssl-dev libcurl4-gnutls-dev mcrypt libcap-dev diffutils ca-certificates debian-keyring debian-archive-keyring;
-
apt-get -fy install
-
apt-get -y autoremove
过程如下图所示:
如下图安装结束:
4、安装mysql
本次安装的mysql版本是5.6.选择从搜狐源下载,编译过程漫长。
4.1 下载
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.23.tar.gz
4.2 解压编译
执行如下命令:
-
tar -zxvf mysql-5.6.23.tar.gz
-
cd mysql-5.6.23
-
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1
-
make -j 2 && make install
编译将是一个漫长得过程。。。不同的机器性能等待时间不同。
make的-j参数可以使make进行并行编译编译。我cpu的个数是2,所以指定为2.
4.3 添加mysql用户
-
groupadd mysql
-
useradd -s /sbin/nologin -M -g mysql mysql
4.4 修改配置文件
vim /etc/my.cnf
下面给出一份参考配置(只是测试用,如果要用于生产环境,请自行调配):
-
# Example MySQL config file for medium systems.
-
# The following options will be passed to all MySQL clients
-
[client]
-
#password = your_password
-
port = 3306
-
socket = /tmp/mysql.sock
-
default-character-set=utf8mb4
-
# Here follows entries for some specific programs
-
# The MySQL server
-
[mysqld]
-
bind-address=127.0.0.1
-
port = 3306
-
socket = /tmp/mysql.sock
-
datadir = /usr/local/mysql/var
-
collation-server = utf8mb4_general_ci
-
character-set-server = utf8mb4
-
skip-external-locking
-
key_buffer_size = 16M
-
max_allowed_packet = 1M
-
table_open_cache = 64
-
sort_buffer_size = 512K
-
net_buffer_length = 8K
-
read_buffer_size = 256K
-
read_rnd_buffer_size = 512K
-
myisam_sort_buffer_size = 8M
-
# Replication Master Server (default)
-
# binary logging is required for replication
-
log-bin=mysql-bin
-
# binary logging format - mixed recommended
-
binlog_format=mixed
-
# required unique id between 1 and 2^32 - 1
-
# defaults to 1 if master-host is not set
-
# but will not function as a master if omitted
-
server-id = 1
-
# Uncomment the following if you are using InnoDB tables
-
innodb_data_home_dir = /usr/local/mysql/var
-
innodb_data_file_path = ibdata1:10M:autoextend
-
innodb_log_group_home_dir = /usr/local/mysql/var
-
# You can set .._buffer_pool_size up to 50 - 80 %
-
# of RAM but beware of setting memory usage too high
-
innodb_buffer_pool_size = 16M
-
innodb_additional_mem_pool_size = 2M
-
# Set .._log_file_size to 25 % of buffer pool size
-
innodb_log_file_size = 5M
-
innodb_log_buffer_size = 8M
-
innodb_flush_log_at_trx_commit = 1
-
innodb_lock_wait_timeout = 50
-
[mysqldump]
-
quick
-
max_allowed_packet = 16M
-
[mysql]
-
no-auto-rehash
-
# Remove the next comment character if you are not familiar with SQL
-
#safe-updates
-
default-character-set=utf8mb4
-
[myisamchk]
-
key_buffer_size = 20M
-
sort_buffer_size = 20M
-
read_buffer = 2M
-
write_buffer = 2M
-
[mysqlhotcopy]
-
interactive-timeout
4.5 初始化mysql
-
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql
-
chown -R mysql /usr/local/mysql/var
-
chgrp -R mysql /usr/local/mysql/.
-
cp support-files/mysql.server /etc/init.d/mysql
-
chmod 755 /etc/init.d/mysql
-
cat > /etc/ld.so.conf.d/mysql.conf<<EOF
-
/usr/local/mysql/lib
-
/usr/local/lib
-
EOF
-
ldconfig
4.6 启动mysql
/etc/init.d/mysql start
4.7 查看mysql进程
ps -ef|grep mysql
如果看到下图,恭喜你,mysql安装成功:
4.8 后期配置
-
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
-
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
-
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
-
ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump
-
ln -s /usr/local/mysql/bin/myisamchk /usr/bin/myisamchk
-
ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe
登陆mysql:
mysql -uroot -p
修改密码(假定密码为:test123):
-
use mysql;
-
update user set password=password('$mysqlrootpwd') where user='root';
-
flush privileges;
退出,重新登陆:
mysql -uroot -p
整个过程如下图:
4.9 结束
至此,mysql 已经安装结束。退出到上一层目录
cd ../
5、安装PHP
本次安装的PHP是php 5.3.28,选择从搜狐源下载。
5.1 下载PHP
wget http://mirrors.sohu.com/php/php-5.3.28.tar.gz
5.2 安装依赖
安装依赖的库,我选择从chinaunix.net下载的,速度也还可以。
5.2.1 libiconv
-
wget http://down1.chinaunix.net/distfiles/libiconv-1.14.tar.gz
-
tar -zxvf libiconv-1.14.tar.gz
-
cd libiconv-1.14
-
./configure
-
make -j 2&& make install
-
cd ..
5.2.2 libmcrypt
-
wget http://down1.chinaunix.net/distfiles/libmcrypt-2.5.7.tar.gz
-
tar -zxvf libmcrypt-2.5.7.tar.gz
-
cd libmcrypt-2.5.7
-
./configure
-
make -j 2&& make install
-
ldconfig
-
cd libltdl/
-
./configure --enable-ltdl-install
-
make && make install
-
cd ../../
5.2.3 mhash
-
wget http://down1.chinaunix.net/distfiles/mhash-0.9.3.tar.gz
-
tar -zxvf mhash-0.9.3.tar.gz
-
cd mhash-0.9.3
-
./configure
-
make -j 2 && make install
-
cd ../
5.3 解压编译
-
tar -zxvf php-5.3.28.tar.gz
-
cd php-5.3.28
-
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo
-
make -j 2 ZEND_EXTRA_LIBS='-liconv' && make install
5.4 配置php
-
cp php.ini-production /usr/local/php/etc/php.ini
-
sed -i 's/post_max_size = 8M/post_max_size = 50M/g' /usr/local/php/etc/php.ini
-
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /usr/local/php/etc/php.ini
-
sed -i 's/;date.timezone =/date.timezone = PRC/g' /usr/local/php/etc/php.ini
-
sed -i 's/short_open_tag = Off/short_open_tag = On/g' /usr/local/php/etc/php.ini
-
sed -i 's/; cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /usr/local/php/etc/php.ini
-
sed -i 's/; cgi.fix_pathinfo=0/cgi.fix_pathinfo=0/g' /usr/local/php/etc/php.ini
-
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /usr/local/php/etc/php.ini
-
sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /usr/local/php/etc/php.ini
-
sed -i 's/register_long_arrays = On/;register_long_arrays = On/g' /usr/local/php/etc/php.ini
-
sed -i 's/magic_quotes_gpc = On/;magic_quotes_gpc = On/g' /usr/local/php/etc/php.ini
-
sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' /usr/local/php/etc/php.ini
5.5 后期配置
-
ln -s /usr/local/php/bin/php /usr/bin/php
-
ln -s /usr/local/php/bin/phpize /usr/bin/phpize
-
ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm
-
cd ..
5.6 安装ZendGuardLoader
-
mkdir -p /usr/local/zend/
-
wget http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
-
tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
-
cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so /usr/local/zend/
-
cat >>/usr/local/php/etc/php.ini<<EOF
-
;eaccelerator
-
;ionCube
-
[Zend Optimizer]
-
zend_extension=/usr/local/zend/ZendGuardLoader.so
-
zend_loader.enable=1
-
zend_loader.disable_licensing=0
-
zend_loader.obfuscation_level_support=3
-
zend_loader.license_path=
-
EOF
-
cd ..
5.7 修改php-fpm配置文件
-
cat >/usr/local/php/etc/php-fpm.conf<<EOF
-
[global]
-
pid = /usr/local/php/var/run/php-fpm.pid
-
error_log = /usr/local/php/var/log/php-fpm.log
-
log_level = notice
-
[www]
-
listen = /tmp/php-cgi.sock
-
listen.backlog = -1
-
listen.allowed_clients = 127.0.0.1 #这里之后配置完如果发现php页面打不开,请把127.0.0.1改成自己服务器的地址。
-
listen.owner = www
-
listen.group = www
-
listen.mode = 0666
-
user = www
-
group = www
-
pm = dynamic
-
pm.max_children = 10
-
pm.start_servers = 2
-
pm.min_spare_servers = 1
-
pm.max_spare_servers = 6
-
request_terminate_timeout = 100
-
request_slowlog_timeout = 0
-
slowlog = var/log/slow.log
-
EOF
5.8 创建php-fpm启动脚本
-
vim /etc/init.d/php-fpm
-
chmod +x /etc/init.d/php-fpm
以下是一份参考:
-
#! /bin/sh #如果在centos下请使用#!/bin/bash代替
-
### BEGIN INIT INFO
-
# Provides: php-fpm
-
# Required-Start: $remote_fs $network
-
# Required-Stop: $remote_fs $network
-
# Default-Start: 2 3 4 5
-
# Default-Stop: 0 1 6
-
# Short-Description: starts php-fpm
-
# Description: starts the PHP FastCGI Process Manager daemon
-
### END INIT INFO
-
prefix=/usr/local/php
-
exec_prefix=${prefix}</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">php_fpm_BIN=<span class="hljs-variable">${exec_prefix}/sbin/php-fpm
-
php_fpm_CONF=${prefix}</span>/etc/php-fpm.conf</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">php_fpm_PID=<span class="hljs-variable">${prefix}/var/run/php-fpm.pid
-
php_opts="--fpm-config $php_fpm_CONF</span> --pid <span class="hljs-variable">$php_fpm_PID"
-
wait_for_pid () {
-
try=0
-
while test $try</span> -lt 35 ; <span class="hljs-keyword">do</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">case</span> <span class="hljs-string">"<span class="hljs-variable">$1" in
-
'created')
-
if [ -f "$2</span>"</span> ] ; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> try=<span class="hljs-string">''</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">break</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">'removed'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ ! -f <span class="hljs-string">"<span class="hljs-variable">$2" ] ; then
-
try=''
-
break
-
fi
-
;;
-
esac
-
echo -n .
-
try=`expr $try + 1`
-
sleep 1
-
done
-
}
-
case "$1</span>"</span> <span class="hljs-keyword">in</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> start)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Starting php-fpm "</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$php_fpm_BIN --daemonize $php_opts</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ <span class="hljs-string">"$?" != 0 ] ; then
-
echo " failed"
-
exit 1
-
fi
-
wait_for_pid created $php_fpm_PID</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="65"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="66"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ -n <span class="hljs-string">"<span class="hljs-variable">$try" ] ; then
-
echo " failed"
-
exit 1
-
else
-
echo " done"
-
fi
-
;;
-
stop)
-
echo -n "Gracefully shutting down php-fpm "
-
if [ ! -r $php_fpm_PID</span> ] ; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="78"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"warning, no pid file found - php-fpm is not running ?"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="79"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="80"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="81"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="82"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">kill</span> -QUIT `cat <span class="hljs-variable">$php_fpm_PID</span>`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="83"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="84"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> wait_for_pid removed <span class="hljs-variable">$php_fpm_PID
-
if [ -n "$try</span>"</span> ] ; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="87"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">" failed. Use force-quit"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="88"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="89"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">else</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="90"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">" done"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="91"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="92"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="93"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="94"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> force-quit)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="95"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Terminating php-fpm "</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="96"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="97"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ ! -r <span class="hljs-variable">$php_fpm_PID ] ; then
-
echo "warning, no pid file found - php-fpm is not running ?"
-
exit 1
-
fi
-
kill -TERM `cat $php_fpm_PID`
-
wait_for_pid removed $php_fpm_PID</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="105"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="106"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ -n <span class="hljs-string">"<span class="hljs-variable">$try" ] ; then
-
echo " failed"
-
exit 1
-
else
-
echo " done"
-
fi
-
;;
-
restart)
-
$0</span> stop</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="116"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$0 start
-
;;
-
reload)
-
echo -n "Reload service php-fpm "
-
if [ ! -r $php_fpm_PID</span> ] ; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="124"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"warning, no pid file found - php-fpm is not running ?"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="125"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="126"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="127"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="128"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">kill</span> -USR2 `cat <span class="hljs-variable">$php_fpm_PID</span>`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="129"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="130"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">" done"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="131"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="132"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="133"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> *)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="134"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"Usage: <span class="hljs-variable">$0 {start|stop|force-quit|restart|reload}"
-
exit 1
-
;;
-
esac
5.9 启动php-fpm
-
groupadd www
-
useradd -s /sbin/nologin -g www www
-
/etc/init.d/php-fpm start
见到如下图代表启动成功:
6 安装nginx
6.1 下载nginx
wget http://mirrors.sohu.com/nginx/nginx-1.6.0.tar.gz
6.2 安装依赖
6.2.1 pcre
-
wget http://down1.chinaunix.net/distfiles/pcre-8.12.tar.bz2
-
tar -jxvf pcre-8.12.tar.bz2
-
cd pcre-8.12
-
./configure
-
make -j 2 && make install
-
cd ..
6.3 解压编译nginx
-
tar -zxvf nginx-1.6.0.tar.gz
-
cd nginx-1.6.0
-
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
-
make -j 2 && make install
-
cd ..
-
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
6.4 配置nginx
/usr/local/nginx/conf/nginx.conf
下面是一份参考配置:
-
user www www;
-
worker_processes auto;
-
error_log /home/wwwlogs/nginx_error.log crit;
-
pid /usr/local/nginx/logs/nginx.pid;
-
#Specifies the value for maximum file descriptors that can be opened by this process.
-
worker_rlimit_nofile 51200;
-
events
-
{
-
use epoll;
-
worker_connections 51200;
-
multi_accept on;
-
}
-
http
-
{
-
include mime.types;
-
default_type application/octet-stream;
-
server_names_hash_bucket_size 128;
-
client_header_buffer_size 32k;
-
large_client_header_buffers 4 32k;
-
client_max_body_size 50m;
-
sendfile on;
-
tcp_nopush on;
-
keepalive_timeout 60;
-
tcp_nodelay on;
-
fastcgi_connect_timeout 300;
-
fastcgi_send_timeout 300;
-
fastcgi_read_timeout 300;
-
fastcgi_buffer_size 64k;
-
fastcgi_buffers 4 64k;
-
fastcgi_busy_buffers_size 128k;
-
fastcgi_temp_file_write_size 256k;
-
gzip on;
-
gzip_min_length 1k;
-
gzip_buffers 4 16k;
-
gzip_http_version 1.0;
-
gzip_comp_level 2;
-
gzip_types text/plain application/x-javascript text/css application/xml;
-
gzip_vary on;
-
gzip_proxied expired no-cache no-store private auth;
-
gzip_disable "MSIE [1-6]\.";
-
#limit_conn_zone $binary_remote_addr zone=perip:<span class="hljs-number">10</span>m;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ##<span class="hljs-keyword">If</span> enable limit_conn_zone,add <span class="hljs-string">"limit_conn perip 10;"</span> <span class="hljs-keyword">to</span> <span class="hljs-built_in">server</span> section.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> server_tokens off;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> #<span class="hljs-built_in">log</span> format</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> log_format access <span class="hljs-comment">'$remote_addr - $remote_user [$time_local] "$request" ' </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="60"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment">'$status $body_bytes_sent "$http_referer" '
-
'"$http_user_agent" $http_x_forwarded_for';
-
server
-
{
-
listen 80 default;
-
#listen [::]:80 default ipv6only=on;
-
server_name www.lnmp.org;
-
index index.html index.htm index.php;
-
root /home/wwwroot/default;
-
#error_page 404 /404.html;
-
location ~ [^/]\.php(/|$)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="73"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="74"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> # comment try_files $uri =<span class="hljs-number">404</span>; <span class="hljs-keyword">to</span> enable pathinfo</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="75"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> try_files $uri =<span class="hljs-number">404</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="76"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_pass unix:/tmp/php-cgi.sock;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="77"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_index index.php;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="78"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> include fastcgi.conf;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="79"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> #include pathinfo.conf;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="80"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="81"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="82"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> location /nginx_status {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="83"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> stub_status <span class="hljs-keyword">on</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="84"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> access_log off;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="85"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="86"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="87"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
-
{
-
expires 30d;
-
}
-
location ~ .*\.(js|css)?$
-
{
-
expires 12h;
-
}
-
access_log /home/wwwlogs/access.log access;
-
}
-
include vhost/*.conf;
-
}
6.5 后期配置
-
mkdir -p /home/wwwroot/default
-
chmod +w /home/wwwroot/default
-
mkdir -p /home/wwwlogs
-
chmod 777 /home/wwwlogs
-
chown -R www:www /home/wwwroot/default
6.6 编写nginx启动脚本
-
vim /etc/init.d/nginx
-
chmod +x /etc/init.d/nginx
下面是一份参考配置:
-
#! /bin/sh #如果在centos下请使用#!/bin/bash代替
-
# chkconfig: 2345 55 25
-
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
-
# run 'update-rc.d -f nginx defaults', or use the appropriate command on your
-
# distro. For CentOS/Redhat run: 'chkconfig --add nginx'
-
### BEGIN INIT INFO
-
# Provides: nginx
-
# Required-Start: $all</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"># Required-Stop: $all
-
# Default-Start: 2 3 4 5
-
# Default-Stop: 0 1 6
-
# Short-Description: starts the nginx web server
-
# Description: starts nginx using start-stop-daemon
-
### END INIT INFO
-
# Author: licess
-
# website: http://lnmp.org
-
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-
NAME=nginx
-
NGINX_BIN=/usr/local/nginx/sbin/$NAME</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">CONFIGFILE=/usr/<span class="hljs-built_in">local</span>/nginx/conf/<span class="hljs-variable">$NAME.conf
-
PIDFILE=/usr/local/nginx/logs/$NAME</span>.pid</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">SCRIPTNAME=/etc/init.d/<span class="hljs-variable">$NAME
-
case "$1</span>"</span> <span class="hljs-keyword">in</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> start)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Starting <span class="hljs-variable">$NAME... "
-
if netstat -tnpl | grep -q nginx;then
-
echo "$NAME</span> (pid `pidof <span class="hljs-variable">$NAME</span>`) already running."</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$NGINX_BIN -c $CONFIGFILE</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ <span class="hljs-string">"$?" != 0 ] ; then
-
echo " failed"
-
exit 1
-
else
-
echo " done"
-
fi
-
;;
-
stop)
-
echo -n "Stoping $NAME</span>... "</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> ! netstat -tnpl | grep -q nginx; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$NAME is not running."
-
exit 1
-
fi
-
$NGINX_BIN</span> -s stop</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ <span class="hljs-string">"$?" != 0 ] ; then
-
echo " failed. Use force-quit"
-
exit 1
-
else
-
echo " done"
-
fi
-
;;
-
status)
-
if netstat -tnpl | grep -q nginx; then
-
PID=`pidof nginx`
-
echo "$NAME</span> (pid <span class="hljs-variable">$PID) is running..."
-
else
-
echo "$NAME</span> is stopped"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="70"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 0</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="71"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="72"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="73"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="74"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> force-quit)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="75"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Terminating <span class="hljs-variable">$NAME... "
-
if ! netstat -tnpl | grep -q nginx; then
-
echo "$NAME</span> is not running."</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="79"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="80"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="81"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="82"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">kill</span> `pidof <span class="hljs-variable">$NAME</span>`</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="83"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="84"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ <span class="hljs-string">"$?" != 0 ] ; then
-
echo " failed"
-
exit 1
-
else
-
echo " done"
-
fi
-
;;
-
restart)
-
$SCRIPTNAME</span> stop</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="94"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> sleep 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="95"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$SCRIPTNAME start
-
;;
-
reload)
-
echo -n "Reload service $NAME</span>... "</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="101"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="102"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> netstat -tnpl | grep -q nginx; <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="103"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$NGINX_BIN -s reload
-
echo " done"
-
else
-
echo "$NAME</span> is not running, can't reload."</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="107"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">exit</span> 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="108"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="109"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="110"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="111"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> configtest)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="112"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="113"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Test <span class="hljs-variable">$NAME configure files... "
-
$NGINX_BIN</span> -t</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="116"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="117"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="118"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> *)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="119"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"Usage: <span class="hljs-variable">$SCRIPTNAME {start|stop|force-quit|restart|reload|status|configtest}"
-
exit 1
-
;;
-
esac
6.7 测试nginx
6.7.1 写php测试代码
-
cat >/home/wwwroot/default/index.php<<EOF
-
-
phpinfo();
-
-
EOF
6.7.2启动nginx
-
/etc/init.d/nginx start
-
ps -ef|grep nginx
见到下图,代表启动成功:
如果你开启了selinux,请关闭,否则访问不了:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
临时关闭selinux:
setenforce 0
关闭防火墙:
service iptables stop
通过浏览器访问下,如下图:
7 安装redis
7.1 下载redis
wget http://download.redis.io/releases/redis-2.8.19.tar.gz
这里会快很多:
wget http://download.redis.io/releases/redis-2.8.19.tar.gz
7.2 解压编译redis
-
tar -zxvf redis-2.8.19.tar.gz
-
cd redis-2.8.19
-
make PREFIX=/usr/local/redis install
7.3 配置redis
-
mkdir -p /usr/local/redis/etc/
-
cp redis.conf /usr/local/redis/etc/
-
sed -i 's/daemonize no/daemonize yes/g' /usr/local/redis/etc/redis.conf
-
cd ..
7.4 编写redis启动脚本
-
vim /etc/init.d/redis
-
chmod +x /etc/init.d/redis
下面是一份参考配置:
-
#! /bin/bash #如果在centos下请使用#!/bin/bash代替
-
#
-
# redis - this script starts and stops the redis-server daemon
-
#
-
# chkconfig: 2345 80 90
-
# description: Redis is a persistent key-value database
-
#
-
### BEGIN INIT INFO
-
# Provides: redis
-
# Required-Start: $syslog</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"># Required-Stop: $syslog
-
# Should-Start: $local_fs</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment"># Should-Stop: $local_fs
-
# Default-Start: 2 3 4 5
-
# Default-Stop: 0 1 6
-
# Short-Description: redis-server daemon
-
# Description: redis-server daemon
-
### END INIT INFO
-
REDISPORT=6379
-
EXEC=/usr/local/redis/bin/redis-server
-
REDIS_CLI=/usr/local/redis/bin/redis-cli
-
PIDFILE=/var/run/redis.pid
-
CONF="/usr/local/redis/etc/redis.conf"
-
case "$1</span>"</span> <span class="hljs-keyword">in</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> start)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ -f <span class="hljs-variable">$PIDFILE ]
-
then
-
echo "$PIDFILE</span> exists, process is already running or crashed"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">else</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"Starting Redis server..."</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">$EXEC $CONF</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> [ <span class="hljs-string">"$?"="0" ]
-
then
-
echo "Redis is running..."
-
fi
-
;;
-
stop)
-
if [ ! -f $PIDFILE</span> ]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">then</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$PIDFILE does not exist, process is not running"
-
else
-
PID=$(cat <span class="hljs-variable">$PIDFILE)
-
echo "Stopping ..."
-
$REDIS_CLI</span> -p <span class="hljs-variable">$REDISPORT shutdown
-
while [ -x ${PIDFILE}</span> ]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">do</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"Waiting for Redis to shutdown ..."</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> sleep 1</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">done</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-built_in">echo</span> <span class="hljs-string">"Redis stopped"</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">fi</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> ;;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> restart)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-variable">${0} stop
-
${0} start
-
;;
-
*)
-
echo "Usage: /etc/init.d/redis {start|stop|restart}" >&2
-
exit 1
-
esac
7.5 启动redis
/etc/init.d/redis start
查看redis是否启动
ps -ef|grep redis
如果看到如下图,恭喜你,启动成功:
8 设置开机启动
-
chkconfig --level 345 php-fpm on
-
chkconfig --level 345 nginx on
-
chkconfig --level 345 mysql on
-
chkconfig --level 345 redis on
9 升级gcc,gdb等(非常漫长,如果系统中自带的g++支持C++11,可跳过此步骤)
9.1 下载gcc4.9.2
使用日本的源可能会快些:
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.2/gcc-4.9.2.tar.gz
9.2 解压编译gcc4.9.2
-
tar -zxvf gcc-4.9.2.tar.gz
-
cd gcc-4.9.2
-
./contrib/download_prerequisites
-
mkdir gcc-build-4.9.2
-
cd gcc-build-4.9.2
-
../configure --prefix=/usr -enable-checking=release -enable-languages=c,c++ -disable-multilib
-
make -j 2 && make install
-
cd ../../
9.3 下载termcap
wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
9.4 解压编译termcap
-
tar -zxvf termcap-1.3.1.tar.gz
-
cd termcap-1.3.1
-
./configure --prefix=/usr
-
make -j 2 && make install
9.5 下载gdb
wget http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz
9.6 解压编译gdb
-
tar -zxvf gdb-7.9.tar.gz
-
cd gdb-7.9
-
./configure --prefix=/usr
-
make -j 2 && make install
10 重启电脑
shutdown -r now
11 安装PB
11.1 下载pb
wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
11.2 解压编译pb
-
tar -zxvf protobuf-2.6.1
-
cd protobuf-2.6.1
-
./configure --prefix=/usr/local/protobuf
-
make -j 2 && make install
12 下载TeamTalk代码
git clone https://github.com/mogujie/TeamTalk.git
13 生成pb文件
13.1 拷贝pb相关文件
拷贝pb的库、头文件到TeamTalk相关目录中:
-
mkdir -p /root/TeamTalk/server/src/base/pb/lib/linux/
-
cp /usr/local/protobuf/lib/libprotobuf-lite.a /root/TeamTalk/server/src/base/pb/lib/linux/
-
cp -r /usr/local/protobuf/include/* /root/TeamTalk/server/src/base/pb/
13.2 生成pb协议
cd /root/TeamTalk/pb
执行:
-
export PATH=$PATH<span class="hljs-symbol">:/usr/local/protobuf/bin</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib
-
sh create.sh
生成协议相关源码文件。
再执行:
sh sync.sh
将相关文件拷贝到server 目录下。
14 安装依赖
-
cd /root/TeamTalk/server/src
-
sh make_log4cxx.sh #如后运行时仍提示没有找到log4xx的库,请手动安装,安装在/usr下就可以
-
sh make_hiredis.sh
15 编译server
15.1 编译
由于我们是源码安装mysql的,所以对db_proxy_server中的CMakeList做一定的修改.
原来:
-
SET(MYSQL_INCLUDE_DIR /usr/include/mysql)
-
SET(MYSQL_LIB /usr/lib64/mysql)
修改为:
-
SET(MYSQL_INCLUDE_DIR /usr/local/mysql/include)
-
SET(MYSQL_LIB /usr/local/mysql/lib)
进入server目录下,执行:
sh build.sh version 1.0.0
如果一切顺利,你将会看到如下画面:
16 配置server
配置就以本机192.168.1.150 为例。
16.1 配置文件说明:
16.1.1 login_server
-
ClientListenIP=0.0.0.0 # can use multiple ip, seperate by ';'
-
ClientPort=8008
-
HttpListenIP=0.0.0.0
-
HttpPort=8080
-
MsgServerListenIP=0.0.0.0 # can use multiple ip, seperate by ';'
-
MsgServerPort=8100
-
msfs=http://127.0.0.1:8700/
-
discovery=http://127.0.0.1/api/discovery
ClientListenIP:目前已经作废。
ClientPort:与上一个配套,同样作废。
HttpListenIP:供客户端过来获取msg_server及其他参数的接口地址,走http协议。
HttpPort:与上一个配套使用。
MsgServerListenIP:用于监听msg_server上报信息使用。
MsgServerPort:与上一个配套使用。msg_server启动的时候回来连接该ip:port,以上报自己的信息。
在运行过程中,也会实时将自己的信息汇报给login_server。
msfs:小文件存储的地址,该配置是提供给客户端获取参数时使用。
discovery:发现内容获取地址,该配置是提供给客户端获取参数时使用。
参考配置:
-
ClientListenIP=192.168.1.150
-
ClientPort=8008
-
HttpListenIP=192.168.1.150
-
HttpPort=8080
-
MsgServerListenIP=192.168.1.150
-
MsgServerPort=8100
-
msfs=http://192.168.1.150:8700/
-
discovery=http://192.168.1.150/api/discovery
16.1.2 route_server
-
ListenIP=0.0.0.0 # Listening IP
-
ListenMsgPort=8200 # Listening Port for MsgServer
route_server配置比较简单,一个监听ip,一个监听port就OK了,供msg_server连接上来用。
参考配置:
-
ListenIP=192.168.1.150
-
ListenMsgPort=8200
16.1.3 http_msg_server
-
ListenIP=0.0.0.0
-
ListenPort=8400
-
ConcurrentDBConnCnt=4
-
DBServerIP1=127.0.0.1
-
DBServerPort1=10600
-
DBServerIP2=127.0.0.1
-
DBServerPort2=10600
-
RouteServerIP1=localhost
-
RouteServerPort1=8200
-
#RouteServerIP2=localhost
-
#RouteServerPort2=8201
ListenIP:监听IP,供其他人来调用http_msg_server接口,比如,php在创建群组的时候,就会来调用http_msg_server的接口。
ListenPort:监听端口,与上一个配套使用。
ConcurrentDBConnCnt:DB数目,目前必须配置为2的整数倍,是历史遗留问题,后期会修复。
DBServerIP(x):db_proxy_server监听的IP,http_msg_server会主动去连接。
DBServerPort(x):db_proxy_server监听的Port
RouteServerIP(x):route_server监听的IP,http_msg_server会主动去连接。
RouteServer(x):route_server监听的Port
参考配置:
-
ListenIP=192.168.1.150
-
ListenPort=8400
-
ConcurrentDBConnCnt=4
-
DBServerIP1=192.168.1.150
-
DBServerPort1=10600
-
DBServerIP2=192.168.1.150
-
DBServerPort2=10600
-
RouteServerIP1=192.168.1.150
-
RouteServerPort1=8200
16.1.4 msg_server
-
ListenIP=0.0.0.0
-
ListenPort=8000
-
ConcurrentDBConnCnt=2
-
DBServerIP1=127.0.0.1
-
DBServerPort1=10600
-
DBServerIP2=127.0.0.1
-
DBServerPort2=10600
-
LoginServerIP1=127.0.0.1
-
LoginServerPort1=8100
-
#LoginServerIP2=localhost
-
#LoginServerPort2=8101
-
RouteServerIP1=127.0.0.1
-
RouteServerPort1=8200
-
#RouteServerIP2=localhost
-
#RouteServerPort2=8201
-
PushServerIP1=127.0.0.1
-
PushServerPort1=8500
-
FileServerIP1=127.0.0.1
-
FileServerPort1=8600
-
#FileServerIP2=localhost
-
#FileServerPort2=8601
-
IpAddr1=127.0.0.1 #电信IP
-
IpAddr2=127.0.0.1 #网通IP
-
MaxConnCnt=100000
-
#AES 密钥
-
aesKey=12345678901234567890123456789012
ListenIP:监听客户端连接上来的IP。
ListenPort:与上一个配套使用,监听客户端连接的port。
ConcurrentDBConnCnt:db_proxy_server个数,同http_msg_server 一样。
DBServerIP(x):db_proxy_server监听的ip,msg_server主动去连接。
DBServerPort(x):db_proxy_server监听的port。
LoginServerIP(x):login_server监听的ip,msg_server会主动去连接,汇报本机信息。
LoginServerPort(x):login_server监听的port。
RouteServerIP(x):route_server监听的IP,msg_server主动去连接。
RouteServerPort(x):route_server监听的port。
PushServerIP(x):push_server监听的IP,msg_server会主动去连接,给ios系统推送消息。
PushServerPort(x):push_server监听的port。
FileServerIP(x):file_server监听的IP,msg_server会主动去连接,用于文件传输,暂时未用到。
FileServerPort(x):file_server监听的port。
IpAddr1:msg_server监听的ip,用于汇报给login_server,便于login_server在客户端请求的时候返回给客户端。注意,这个ip一定要是客户端能连接的ip,之前发现好多人配置成127.0.0.1,这是不行的。
IpAddr2:同上。
aesKey:消息文本加密密钥.这里配置主要在msg_server向push_server推送的时候需要将加密的消息进行解密。
参考配置:
-
ListenIP=192.168.1.150
-
ListenPort=8000
-
ConcurrentDBConnCnt=2
-
DBServerIP1=192.168.1.150
-
DBServerPort1=10600
-
DBServerIP2=192.168.1.150
-
DBServerPort2=10600
-
LoginServerIP1=192.168.1.150
-
LoginServerPort1=8100
-
RouteServerIP1=192.168.1.150
-
RouteServerPort1=8200
-
PushServerIP1=192.168.1.150
-
PushServerPort1=8500
-
FileServerIP1=192.168.1.150
-
FileServerPort1=8600
-
IpAddr1=192.168.1.150 #电信IP
-
IpAddr2=192.168.1.150 #网通IP
-
MaxConnCnt=100000
-
#AES 密钥
-
aesKey=12345678901234567890123456789012
16.1.5 db_proxy_server
-
ListenIP=127.0.0.1
-
ListenPort=10600
-
ThreadNum=48 # double the number of CPU core
-
MsfsSite=127.0.0.1
-
#configure for mysql
-
DBInstances=teamtalk_master,teamtalk_slave
-
#teamtalk_master
-
teamtalk_master_host=127.0.0.1
-
teamtalk_master_port=3306
-
teamtalk_master_dbname=teamtalk
-
teamtalk_master_username=root
-
teamtalk_master_password=12345
-
teamtalk_master_maxconncnt=16
-
#teamtalk_slave
-
teamtalk_slave_host=127.0.0.1
-
teamtalk_slave_port=3306
-
teamtalk_slave_dbname=teamtalk
-
teamtalk_slave_username=root
-
teamtalk_slave_password=12345
-
teamtalk_slave_maxconncnt=16
-
#configure for unread
-
CacheInstances=unread,group_set,token,group_member
-
#未读消息计数器的redis
-
unread_host=127.0.0.1
-
unread_port=6379
-
unread_db=1
-
unread_maxconncnt=16
-
#群组设置redis
-
group_set_host=127.0.0.1
-
group_set_port=6379
-
group_set_db=2
-
group_set_maxconncnt=16
-
#deviceToken redis
-
token_host=127.0.0.1
-
token_port=6379
-
token_db=4
-
token_maxconncnt=16
-
#GroupMember
-
group_member_host=127.0.0.1
-
group_member_port=6379
-
group_member_db=5
-
group_member_maxconncnt=48
-
#AES 密钥
-
aesKey=12345678901234567890123456789012
ListenIP:db_proxy_server监听的IP。
ListenPort:db_proxy_server监听的port
ThreadNum:工作线程个数。
MsfsSite:配置msfs服务器的地址,用于发送语音的时候上传保存语音文本。
DBInstances:db实例名称。一般配置一主一从即可,其他根据自己的需求修改。
(xxxx)_host:xxxx实例的ip
(xxxx)_port:xxxx实例的port
(xxxx)_dbname:xxxx实例的scheme名称
(xxxx)_username:xxxx实例的用户名
(xxxx)_password:xxxx实例的密码
(xxxx)_maxconncnt:xxxx实例最大连接数
CacheInstances:cache实例名称。
(xxxx)_host:xxxx实例的ip
(xxxx)_port:xxxx实例的port
(xxxx)_db:xxxx实例的db
(xxxx)_maxconncnt:xxxx
aesKey:消息加密密钥。
目前我们db实例配置的一主一从,cache实例配置了5个实例,分别是:
unread:主要用于未读计数。
group_set:群组设置。设置屏蔽群组。
token:主要用于保存ios系统的token。
group_member:保存群成员信息。
参考配置:
-
ListenIP=192.168.1.150
-
ListenPort=10600
-
ThreadNum=48 # double the number of CPU core
-
MsfsSite=http://192.168.1.150:8700/
-
#configure for mysql
-
DBInstances=teamtalk_master,teamtalk_slave
-
#teamtalk_master
-
teamtalk_master_host=192.168.1.150
-
teamtalk_master_port=3306
-
teamtalk_master_dbname=teamtalk
-
teamtalk_master_username=teamtalk
-
teamtalk_master_password=test@123
-
teamtalk_master_maxconncnt=16
-
#teamtalk_slave
-
teamtalk_slave_host=192.168.1.150
-
teamtalk_slave_port=3306
-
teamtalk_slave_dbname=teamtalk
-
teamtalk_slave_username=teamtalk
-
teamtalk_slave_password=test@123
-
teamtalk_slave_maxconncnt=16
-
#configure for unread
-
CacheInstances=unread,group_set,token,group_member
-
#未读消息计数器的redis
-
unread_host=192.168.1.150
-
unread_port=6379
-
unread_db=1
-
unread_maxconncnt=16
-
#群组设置redis
-
group_set_host=192.168.1.150
-
group_set_port=6379
-
group_set_db=2
-
group_set_maxconncnt=16
-
#deviceToken redis
-
token_host=192.168.1.150
-
token_port=6379
-
token_db=4
-
token_maxconncnt=16
-
#GroupMember
-
group_member_host=192.168.1.150
-
group_member_port=6379
-
group_member_db=5
-
group_member_maxconncnt=48
-
#AES 密钥
-
aesKey=12345678901234567890123456789012
17、更新
17.1 导入mysql
登陆mysql:
mysql -uroot -p
输入密码:test123.
创建TeamTalk数据库:
create database teamtalk
见到如下:
-
mysql> create database teamtalk;
-
Query OK, 1 row affected (0.00 sec)
创建成功。
创建teamtalk用户并给teamtalk用户授权teamtalk的操作:
-
grant select,insert,update,delete on teamtalk.* to 'teamtalk'@'%' identified by 'test@123';
-
flush privileges;
导入数据库.
-
use teamtalk;
-
source /root/TeamTalk/auto_setup/mariadb/conf/ttopen.sql;
-
show tables;
如下:
-
mysql> show tables;
-
+--------------------+
-
| Tables_in_teamtalk |
-
+--------------------+
-
| IMAdmin |
-
| IMAudio |
-
| IMDepart |
-
| IMDiscovery |
-
| IMGroup |
-
| IMGroupMember |
-
| IMGroupMessage_0 |
-
| IMGroupMessage_1 |
-
| IMGroupMessage_2 |
-
| IMGroupMessage_3 |
-
| IMGroupMessage_4 |
-
| IMGroupMessage_5 |
-
| IMGroupMessage_6 |
-
| IMGroupMessage_7 |
-
| IMMessage_0 |
-
| IMMessage_1 |
-
| IMMessage_2 |
-
| IMMessage_3 |
-
| IMMessage_4 |
-
| IMMessage_5 |
-
| IMMessage_6 |
-
| IMMessage_7 |
-
| IMRecentSession |
-
| IMRelationShip |
-
| IMUser |
-
+--------------------+
-
25 rows in set (0.00 sec)
-
mysql>
17.2 修改php
执行如下命令:
-
cd /home/wwwroot/default
-
cp -r /root/TeamTalk/php/* /home/wwwroot/default
修改config.php:
vim application/config/config.php
修改第18-19行:
-
$config[<span class="hljs-string">'msfs_url'</span>] = <span class="hljs-string">'http://192.168.1.150:8700/'</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">$config['http_url'] = 'http://192.168.1.150:8400';
修改database.php
vim application/config/database.php
修改52-54行:
-
$db[<span class="hljs-string">'default'</span>][<span class="hljs-string">'hostname'</span>] = <span class="hljs-string">'192.168.1.150'</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">$db['default']['username'] = 'teamtalk';
-
$db[<span class="hljs-string">'default'</span>][<span class="hljs-string">'password'</span>] = <span class="hljs-string">'test@123'</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">$db['default']['database'] = 'teamtalk';
访问后,看到如下图:
17.3 修改nginx.conf
之前给出的配置有点问题,新配置如下:
-
user www www;
-
worker_processes auto;
-
error_log /home/wwwlogs/nginx_error.log crit;
-
pid /usr/local/nginx/logs/nginx.pid;
-
#Specifies the value for maximum file descriptors that can be opened by this process.
-
worker_rlimit_nofile 51200;
-
events
-
{
-
use epoll;
-
worker_connections 51200;
-
multi_accept on;
-
}
-
http
-
{
-
include mime.types;
-
default_type application/octet-stream;
-
server_names_hash_bucket_size 128;
-
client_header_buffer_size 32k;
-
large_client_header_buffers 4 32k;
-
client_max_body_size 50m;
-
sendfile on;
-
tcp_nopush on;
-
keepalive_timeout 60;
-
tcp_nodelay on;
-
fastcgi_connect_timeout 300;
-
fastcgi_send_timeout 300;
-
fastcgi_read_timeout 300;
-
fastcgi_buffer_size 64k;
-
fastcgi_buffers 4 64k;
-
fastcgi_busy_buffers_size 128k;
-
fastcgi_temp_file_write_size 256k;
-
gzip on;
-
gzip_min_length 1k;
-
gzip_buffers 4 16k;
-
gzip_http_version 1.0;
-
gzip_comp_level 2;
-
gzip_types text/plain application/x-javascript text/css application/xml;
-
gzip_vary on;
-
gzip_proxied expired no-cache no-store private auth;
-
gzip_disable "MSIE [1-6]\.";
-
server_tokens off;
-
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
-
'$status $body_bytes_sent "$http_referer" '</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-string">'"$http_user_agent" $http_x_forwarded_for'</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">server</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> listen <span class="hljs-number">80</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> server_name <span class="hljs-number">192.168</span>.<span class="hljs-number">1.150</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> index index.html index.htm index.php default.html default.htm default.php;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> root /home/wwwroot/default;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> location ~ \.php($|/) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_pass <span class="hljs-symbol">unix:</span>/tmp/php-cgi.sock;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_index index.php;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_split_path_info ^(.+\.php)(.*)$;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_param PATH_INFO $fastcgi_path_info;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">include</span> fastcgi_params;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="60"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="61"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="62"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> location ~ .*\.(gif<span class="hljs-params">|jpg|</span>jpeg<span class="hljs-params">|png|</span>bmp<span class="hljs-params"><span class="hljs-params">|swf)$</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="63"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-params"> {</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="64"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-params"> expires 30d;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="65"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-params"> }</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="66"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-params"></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="67"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-params"> location ~ .*\.(js|</span>css)?$</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="68"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="69"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> expires <span class="hljs-number">12</span>h;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="70"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="71"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (!-e $request_filename) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="72"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> rewrite ^<span class="hljs-regexp">/(.*)$ /index</span>.php/$1 last;
-
break;
-
}
-
}
-
}
18、服务端启动
服务端的启动没有严格的先后流程,因为各端在启动后会去主动连接其所依赖的服务端。不过在此,如果是线上环境,还是建议按照如下的启动顺序去启动(也不是唯一的顺序):
1、启动db_proxy。
2、启动route_server,file_server,msfs
3、启动login_server
4、启动msg_server
19、测试
在后台添加test用户,运行ios 模拟器,登陆看到如下图
20、virtualBox 环境
置于怎么加载虚拟机,怎么运行虚拟机请自行百度,谷歌。
20.1 我虚拟机的环境
链接: http://pan.baidu.com/s/1sjx8g49 密码: 4572
20.2 虚拟机硬盘
因网盘大小限制1G,所以将虚拟机硬盘切分成3个文件上传:
链接: http://pan.baidu.com/s/1mgDXvwW 密码: tgzp
请使用如下命令合并解压:
-
cat CentOS-hd.tar.gz.* > CentOS-hd.tar.gz
-
tar -zxvf CentOS-hd.tar.gz
20.3 账号信息
虚拟机账号信息如下:
-
linux账号密码:root/123456
-
mysql root账号密码:root/test123
-
mysql teamtalk账号密码:teamtalk/test@123
-
php 后台账号密码:admin/admin
-
测试用户账号密码:test/test
20.4 运行
启动虚拟机后,运行如下命令:
ps -ef|grep server
如果看到如下:
-
[root@zhyh ~]# ps -ef|grep server
-
root 1653 1 0 22:13 ? 00:00:05 /usr/local/redis/bin/redis-server *:6379
-
root 1658 1 1 22:13 ? 00:00:21 ./db_proxy_server
-
root 1717 1 0 22:13 ? 00:00:02 ./http_msg_server
-
root 1729 1 0 22:13 ? 00:00:02 ./route_server
-
root 1737 1 0 22:14 ? 00:00:02 ./login_server
-
root 1757 1 0 22:15 ? 00:00:02 ./msg_server
-
root 1788 1774 0 22:34 pts/2 00:00:00 grep server
如果没有发现:db_proxy_server, http_msg_server,route_server,login_server,msg_server的进程,请执行如下命令启动:
-
cd /usr/local/teamtalk
-
cd xxxx
-
../daeml xxxx
xxx代表相应的程序名。通过查看:xxxx/log/default.log 查看程序错误。
20.5 redis,php,nginx,mysql的启动,停止与重启
-
/etc/init.d/redis {start|stop|restart}
-
/etc/init.d/php-fpm {start|stop|force-quit|restart|reload}
-
/etc/init.d/nginx {start|stop|force-quit|restart|reload|status|configtest}
-
/etc/init.d/mysql {start|stop|restart|reload|force-reload|status} [ MySQL server options ]
</div>
新版TeamTalk部署教程相关推荐
- 新版teamtalk部署流程
1.更新操作系统 更新操作系统: CentOS 使用如下命令:` yum update Ubuntu 使用如下命令:` apt-get update 2.删除已经安装的软件 为了减少一些不必要的麻烦, ...
- TeamTalk部署问题及解决方案
本人微信公众号:CPP进阶之旅 如果觉得这篇文章对您有帮助,欢迎关注 "CPP进阶之旅" 学习更多技术干货 TeamTalk部署问题及解决方案 1.部分源下载地址 2.编译安装li ...
- 最新版宝塔面板 | Windows安装以及项目部署教程
最新版宝塔面板 | Windows安装以及项目部署教程,最初布署网站环境,是apache.PHP.数据库等必须安装的费事,后来也使用过XAMPP.phpstudy等一键搭建工具,挺方便的但是接触了宝塔 ...
- 七丶青龙nvjdc部署教程+短信验证登录对接傻妞
青龙nvjdc部署教程+短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流:10 ...
- 正版授权WiFi大师4.0.5 专业版流量主小程序源码部署教程
新版WiFi小程序WiFi大师版流量主搭建独立源码WiFi分销源码 独立版 2022年最火的地推项目WiFi大师,扫码直连WiFi,给商家客户代理绝对的便利. WIFI地推,绝对是2022年最火爆的 ...
- 搭建京东客京推推CMS2.0导购网站部署教程,新手教程带视频
京东优惠券网站搭建(京推推CMS优惠券导购网站搭建教程) 高清视频教程地址:https://www.ixigua.com/i6492560653939638797/ 西瓜视频高清播放地址 看完不会搭建 ...
- 全新开源微商城源码带分销 支持多端+搭建部署教程
分享一个全新版开源微商城源码带分销功能,支持10终端合一,功能强大,含完整代码程序包和搭建部署教程. 系统特色功能一览: 1.一个后台管理所有设备端,支持:电脑+H5手机+微信+ipad+微信小程序+ ...
- Linux安装最新版Docker完整教程(建议收藏)
Linux安装最新版Docker完整教程 一.安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release 1.2 查看服务器内核版本 uname -r 这里 ...
- kafka不使用自带zk_kafka 安装部署教程
kafka 安装部署教程 1. 下载 官网链接 http://kafka.apache.org/downloads 浙大源 http://mirrors.tuna.tsinghua.edu.cn/ap ...
- 最新版OpenWrt编译教程,解决依赖问题
最新版OpenWrt编译教程,解决依赖问题 参考文章: (1)最新版OpenWrt编译教程,解决依赖问题 (2)https://www.cnblogs.com/jzssuanfa/p/7400840. ...
最新文章
- 机器学习(11)线性回归(1)理论:损失函数(含最小二乘法)、正规方程、梯度下降、回归性能评估(均方差)
- java pdf转swf_pdf转换成swf的代码
- 2021年春季学期-信号与系统-第十三次作业参考答案-第七小题
- 冲刺周期二--站立会议01
- 润乾报表实现无数据源的规则报表及改进
- p图软件pⅰc_惊爆软件:王者荣耀P图大神,助力少年国服梦
- 2017-03-01 Oracle10g的安装与配置使用
- python form_Python中form的使用
- mysql_real_connect阻塞_mysql_real_connect 参数注意-阿里云开发者社区
- arduino和python对接_Python:与Arduino进行交互-后续
- ZooKeeper 安装与部署
- OA自动化制造自动化
- golang备忘录003: 使用waitgroup进行graceful shutdown
- kettle carte服务配置
- 粒子系统模拟-计算机图形学 豆瓣,粒子系统
- 福建省计算机二级登录入口,福建省教育考试院官网登录入口
- 为什么ios比android快,那些说ios比Android快的,进来看看!
- 微信小程序获得用户头像昵称调整(2022年9月28日修改)
- java中mdc是什么_MDC是什么鬼?用法、源码一锅端
- linux考试不及格反思100字,考试不好的检讨书100字(精选7篇)