这两天把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
yum install glibc.i686
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-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
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