IM项目的一些部署记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16845639/article/details/81051038

这两天把IM重新部署了一遍,把一些东西记在这里。

一:JDK安装
1.修改/etc/sysconfig目录下的i18n文件,将其中的UTF-8替换为GBK,方便中文显示,如果ssh支持UTF-8,可以不改

vim /etc/sysconfig/i18n

2.安装jdk,查看当前Linux系统是否已经安装java

rpm -qa | grep java

3.使用rpm -e –nodeps加上软件名卸载该软件

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.i686
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.i686

4.rpm -qa | grep java查看jdk是否卸载干净没有了就继续安装

rpm -qa | grep java

5.解压jdk到/usr/local下tar -xvf jdk-8u171-linux-i586.tar.gz -C /usr/local

tar -xvf jdk-8u171-linux-i586.tar.gz -C /usr/local

6.配置jdk环境变量,打开/etc/profile配置文件,将下面配置拷贝进去

#set java environment
JAVA_HOME=/usr/local/jdk1.8.0_171
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH 

7.重新加载/etc/profile配置文件 source /etc/profile

source /etc/profile

8.输入java -version检查是否安装好了jdk

java -version

二:MYSQL安装

1.rpm -qa | grep mysql,查看当前Linux系统是否已经安装mysql

rpm -qa | grep mysql

2.rpm -e –nodeps mysql-libs-5.1.66-2.el6_3.i686 卸载已经安装的系统自带的mysql

rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.i686

3.rpm -qa | grep mysql,查看是否卸载干净mysql

rpm -qa | grep mysql

4.在/usr/local下创建mysql文件夹

cd /usr/local/
mkdir mysql

5.返回/root,解压mysql安装包到/usr/local/mysql下

cd /root/
tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar -C /usr/local/mysql

6.在/usr/local/mysql下安装mysql

cd /usr/local/mysql/
rpm -ivh MySQL-server-5.6.22-1.el6.i686.rpm
rpm -ivh MySQL-client-5.6.22-1.el6.i686.rpm

7.启动mysql

service mysql start

8.将mysql加到系统服务中并设置开机启动
加入到系统服务:

chkconfig --add mysql

自动启动:

chkconfig mysql on

9.登录mysql,mysql安装好后会生成一个临时随机密码,存储位置在/root/.mysql_secret

cat /root/.mysql_secret
mysql -uroot -p复制的密码

10.修改mysql的密码,开启mysql的远程登录

set password = password('root');
grant all privileges on *.* to 'root' @'%' identified by 'root';
flush privileges;

之后退出mysql:

quit

11.开放Linux的对外访问的端口3306

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

将修改永久保存到防火墙中:

/etc/rc.d/init.d/iptables save

三:tomcat安装

1.来带/root目录下,解压tomcat到/usr/local下

cd /root/
tar -xvf apache-tomcat-7.0.57.tar.gz -C /usr/local

2.开放Linux的对外访问的端口8080

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/etc/rc.d/init.d/iptables save

3.启动关闭Tomcat

cd /usr/local/apache-tomcat-7.0.57/bin/

启动

./startup.sh

关闭

./shutdown.sh 

四:Redis安装

1.安装redis编译的c环境,yum install gcc-c++

yum install gcc-c++

2.解压到/usr/local下 tar -xvf redis-3.0.0.tar.gz -C /usr/local

tar -xvf redis-3.0.0.tar.gz -C /usr/local

3.到/usr/local/redis-3.0.0目录下编译redis

make

4.在redis-3.0.0目录中 使用make PREFIX=/usr/local/redis install命令安装redis到/usr/local/redis中

make PREFIX=/usr/local/redis install

5.拷贝redis-3.0.0中的redis.conf到安装目录redis中

cp /usr/local/redis-3.0.0/redis.conf -r /usr/local/redis/bin/ 

6.如需远程连接redis,需配置redis端口6379在linux防火墙中开放

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save

7.进入redis目录下编辑redis.conf,使redis在后台运行,并且设置密码

cd /usr/local/redis/bin/
vim redis.conf
daemonize no改为daemonize yes
requirepass foobared改为requirepass 123456 后面是密码

8.开放6379端口号

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save

四.设置redis开机启动

1.编写脚本

vi /etc/init.d/redis

2.复制下面代码到脚本中

#!/bin/sh
# chkconfig: 2345 10 90
# description: Start and Stop redis

REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/bin/redis.conf"
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
        echo "Please use start or stop or restart as first argument"
        ;;
esac

3.保存退出,设置权限

chmod 777 /etc/init.d/redis

4.启动redis
打开redis命令

service redis start

关闭redis命令

service redis stop

设为开机启动

chkconfig redis on

设为开机关闭

chkconfig redis off

五.MongoDB安装配置

1.getconf LONG_BIT 查看系统位数

getconf LONG_BIT

2.开始配置自己的yum源

vim /etc/yum.repos.d/mongodb.repo

3.编辑保存

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1

4.开始安装当前最稳定的版本

yum install -y mongodb-org

5.启动mongodb

service mongod start

6.关闭mongodb

service mongod stop

7.随系统启动

chkconfig mongod on

8.查看安装的软件

rpm -qa | grep mongodb

9.查看安装路径

rpm -ql mongodb-org-server-2.6.12-1.i686

10.更改配置文件

vim /etc/mongod.conf
 添加bind_ip服务器的IP

11.连接本地的mongodb

mongo localhost:27017

12.use CHAT_DB

use CHAT_DB

13.添加账号

db.createUser(
...  {
...    user: "admin",
...    pwd: "qwer@1234",
...    roles: [
...       { role: "readWrite", db: "CHAT_DB" }
...    ]
...  }
... )

14.打开配置文件,开启密码认证

vim /etc/mongod.conf
打开auth

15.关闭mongodb

service mongod stop

16.启动mongodb

service mongod start

17.连接本地的mongodb

mongo localhost:27017

18.use CHAT_DB

use CHAT_DB

19.验证密码

db.auth("admin","qwer@1234")

20.导入已有数据

mongorestore -h localhost --port 27017 -u admin -p qwer@1234 -d CHAT_DB --drop /root/CHAT_DB

21.开放MongoDB的对外访问的端口27017

/sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
/etc/rc.d/init.d/iptables save

22.其他

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径   导出数据库
mongodump -h 127.0.0.1 -o /root/mongodbData/                            导出全部数据库
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径   导入指定数据库

六.安装erlang

1.解压

tar -xvf otp_src_20.3.tar.gz

2.进入/root/otp_src_20.3设置

cd /root/otp_src_20.3
./configure --prefix=/home/erlang --without-javac  

3.此时如果提示

configure: error: No curses library functions found
configure: error: /bin/sh '/home/jiayi/otp_src_19.3.0/erts/configure' failed for erts

4.yum -y install ncurses-devel

yum -y install ncurses-devel

5.重新./configure –prefix=/home/erlang –without-javac

./configure --prefix=/home/erlang --without-javac 

如果报错

*********************************************************************
**********************  APPLICATIONS DISABLED  **********************
*********************************************************************
jinterface     : Java compiler disabled by user

不用管继续下一步

6.make

make

7.make install

make install

8.vi /etc/profile

vi /etc/profile

9.添加export PATH=$PATH:/home/erlang/bin

export PATH=$PATH:/home/erlang/bin

10.刷新配置

cd /etc
source profile

11.检测是否安装erlang成功

erl

输出

Erlang/OTP 20 [erts-9.3] [source] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.3  (abort with ^G)

安装成功

七.安装rabbitmq

1.cd /root/

cd /root/

2.rpm -ivh rabbitmq-server-3.1.1-1.noarch.rpm

rpm -ivh rabbitmq-server-3.1.1-1.noarch.rpm 

会报

warning: rabbitmq-server-3.1.1-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID 056e8e56: NOKEY
error: Failed dependencies:
    erlang >= R12B-3 is needed by rabbitmq-server-3.1.1-1.noarch

3.rpm –nodeps -ivh rabbitmq-server-3.1.1-1.noarch.rpm

rpm --nodeps -ivh rabbitmq-server-3.1.1-1.noarch.rpm 

这样会解决报错

4.启动rabbitmq会报错

service rabbitmq-server start

后会报错

Starting rabbitmq-server: FAILED - check /var/log/rabbitmq/startup_{log, _err}
rabbitmq-server.

5.查看报错信息

cd /var/log/rabbitmq/
vim startup_err 

显示

/usr/lib/rabbitmq/bin/rabbitmq-server: line 85: erl: command not found

6.ln -s /home/erlang/bin/erl /usr/bin/erl解决报错问题

chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
ln -s /home/erlang/bin/erl /usr/bin/erl

7.启动rabbitmq

service rabbitmq-server start

8.关闭rabbitmq

service rabbitmq-server stop

9.重启rabbitmq

service rabbitmq-server restart

10.设置rabbitmq开机启动

chkconfig rabbitmq-server on

11.开启web界面管理工具

rabbitmq-plugins enable rabbitmq_management

12.重启rabbitmq

service rabbitmq-server restart

13.开放rabbitmq的对外访问的端口15672

/sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
/etc/rc.d/init.d/iptables save

14.RabbitMQ添加用户
1.登陆服务器的RabbitMQ的控制页面,页面地址是http://+ip+:15672
2.在3.3.1和之后的版本中,出于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 来登录,其他的IP无法直接使用这个账号。 这对于服务器上没有安装桌面的情况是无法管理维护的
3.为了解决2的问题,我们新增一个超级管理员来管理

15.新增用户admin

rabbitmqctl  add_user admin admin

16.查看用户列表

rabbitmqctl  list_users

17.设置管理员

rabbitmqctl set_user_tags admin administrator

18.查看用户列表发现是管理员

rabbitmqctl list_users

19.重启虚拟机

reboot

20.使用admin登陆rabbitmq

http://192.168.1.105:15672/

21.导入以前的配置文件

22.使用rabbitmq登陆rabbitmq发现都配置好了

八.开放websocket的8091端口

/sbin/iptables -I INPUT -p tcp --dport 8091 -j ACCEPT
/etc/rc.d/init.d/iptables save

九.安装nodejs

1.解压node-v8.11.3-linux-x86.tar.xz

tar -xvf node-v8.11.3-linux-x86.tar.xz 

2.改名nodejs

mv node-v8.11.3-linux-x86 nodejs

3.拷贝到/usr/local/下

cp nodejs/ /usr/local/ -r

4.建立软连接,变为全局

ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

5.最后一步检验nodejs是否已变为全局

node -v

6.cd /usr/local/skyrtc/

cd /usr/local/skyrtc/

7.npm install

npm install

8.node server.js

node server.js

9.开放3000端口号

/sbin/iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
/etc/rc.d/init.d/iptables save

十.安装运行forever使nodejs文件后台运行

1.安装forever

npm install forever -g

2.ln -s /usr/local/nodejs/lib/node_modules/forever/bin/forever /usr/local/bin/

ln -s /usr/local/nodejs/lib/node_modules/forever/bin/forever /usr/local/bin/

3.启动服务

forever start

3.使用forever启动js文件

forever  /usr/local/skyrtc/server.js

4.停止js文件

forever stop  /usr/local/skyrtc/server.js

5.启动js文件并输出日志文件

cd /usr/local/skyrtc/
mkdir logs
forever start -l /usr/local/skyrtc/logs/forever.log -o /usr/local/skyrtc/logs/out.log -e /usr/local/skyrtc/logs/err.log /usr/local/skyrtc/server.js

6.重启js文件

forever restart /usr/local/skyrtc/server.js

7.查看正在运行的进程

forever list

8.重新启动

cd /usr/local/skyrtc/logs/
rm -rf ./*
forever start -l /usr/local/skyrtc/logs/forever.log -o /usr/local/skyrtc/logs/out.log -e /usr/local/skyrtc/logs/err.log /usr/local/skyrtc/server.js

其他:

如果遇到mongodb无法启动

cd /var/lib/mongo/
rm -rf mongod.lock 
service mongod start
更改文件权限  chomod 777 文件路径
mongod -dbpath=/usr/local/mongodb/mongodb3.0.6/data/test/db --fork --port 27017 --logpath=/usr/local/mongodb/mongodb3.0.6/data/test/log/log.log --logappend --auth

netstat命令各个参数说明如下:

  -t : 指明显示TCP端口

  -u : 指明显示UDP端口

  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

  -n : 不进行DNS轮询,显示IP(可以加速操作)

即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况··

netstat -ntlp //查看当前所有tcp端口·

netstat -ntulp |grep 80 //查看所有80端口使用情况·

netstat -an | grep 3306 //查看所有3306端口使用情况·

查看一台服务器上面哪些服务及端口

netstat -lanp

查看一个服务有几个端口。比如要查看mysqld

ps -ef |grep mysqld

查看某一端口的连接数量,比如3306端口

netstat -pnt |grep :3306 |wc

查看某一端口的连接客户端IP 比如3306端口

netstat -anp |grep 3306

netstat -an 查看网络端口

lsof -i :port,使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接。

nmap 端口扫描
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)
netstat -anp 显示系统端口使用情况

mongoimport --port 27017  -d CHAT_DB -c attachment  --type=json --file /root/mongodbData/attachment.txt
mongoimport --port 27017  -d CHAT_DB -c friends --type=json --file /root/mongodbData/friends.txt
mongoimport --port 27017  -d CHAT_DB -c groups  --type=json --file /root/mongodbData/groups.txt
mongoimport --port 27017  -d CHAT_DB -c login --type=json --file /root/mongodbData/login.txt
mongoimport --port 27017  -d CHAT_DB -c message --type=json --file /root/mongodbData/message.txt
mongoimport --port 27017  -d CHAT_DB -c pushMessage --type=json --file /root/mongodbData/pushMessage.txt
mongoimport --port 27017  -d CHAT_DB -c unPushCounter  --type=json --file /root/mongodbData/unPushCounter.txt
mongoimport --port 27017  -d CHAT_DB -c unreadCounter --type=json --file /root/mongodbData/unreadCounter.txt
mongoimport --port 27017  -d CHAT_DB -c user --type=json --file /root/mongodbData/user.txt

左边是mongodb查询语句,右边是sql语句。对照着用,挺方便。  
db.users.find() select * from users  
db.users.find({"age" : 27}) select * from users where age = 27  
db.users.find({"username" : "joe", "age" : 27}) select * from users where "username" = "joe" and age = 27  
db.users.find({}, {"username" : 1, "email" : 1}) select username, email from users  
db.users.find({}, {"username" : 1, "_id" : 0}) // no case  // 即时加上了列筛选,_id也会返回;必须显式的阻止_id返回  
db.users.find({"age" : {"$gte" : 18, "$lte" : 30}}) select * from users where age >=18 and age <= 30 // $lt(<) $lte(<=) $gt(>) $gte(>=)  
db.users.find({"username" : {"$ne" : "joe"}}) select * from users where username <> "joe"  
db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}}) select * from users where ticket_no in (725, 542, 390)  
db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}}) select * from users where ticket_no not in (725, 542, 390)  
db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]}) select * form users where ticket_no = 725 or winner = true  
db.users.find({"id_num" : {"$mod" : [5, 1]}}) select * from users where (id_num mod 5) = 1  
db.users.find({"$not": {"age" : 27}}) select * from users where not (age = 27)  
db.users.find({"username" : {"$in" : [null], "$exists" : true}}) select * from users where username is null // 如果直接通过find({"username" : null})进行查询,那么连带"没有username"的纪录一并筛选出来  
db.users.find({"name" : /joey?/i}) // 正则查询,value是符合PCRE的表达式  
db.food.find({fruit : {$all : ["apple", "banana"]}}) // 对数组的查询, 字段fruit中,既包含"apple",又包含"banana"的纪录  
db.food.find({"fruit.2" : "peach"}) // 对数组的查询, 字段fruit中,第3个(从0开始)元素是peach的纪录  
db.food.find({"fruit" : {"$size" : 3}}) // 对数组的查询, 查询数组元素个数是3的记录,$size前面无法和其他的操作符复合使用  
db.users.findOne(criteria, {"comments" : {"$slice" : 10}}) // 对数组的查询,只返回数组comments中的前十条,还可以{"$slice" : -10}, {"$slice" : [23, 10]}; 分别返回最后10条,和中间10条  
db.people.find({"name.first" : "Joe", "name.last" : "Schmoe"})  // 嵌套查询  
db.blog.find({"comments" : {"$elemMatch" : {"author" : "joe", "score" : {"$gte" : 5}}}}) // 嵌套查询,仅当嵌套的元素是数组时使用,  
db.foo.find({"$where" : "this.x + this.y == 10"}) // 复杂的查询,$where当然是非常方便的,但效率低下。对于复杂查询,考虑的顺序应当是 正则 -> MapReduce -> $where  
db.foo.find({"$where" : "function() { return this.x + this.y == 10; }"}) // $where可以支持javascript函数作为查询条件  
db.foo.find().sort({"x" : 1}).limit(1).skip(10); // 返回第(10, 11]条,按"x"进行排序; 三个limit的顺序是任意的,应该尽量避免skip中使用large-number  

猜你喜欢

转载自blog.csdn.net/qq_16845639/article/details/81051038