1、环境变量配置
Java环境变量
$ vi /etc/profile
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/li/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
# 是配置生效
$ source /etc/profile
2、部署目录规范
目的是为了便于管理,后续的迁移或者改变都很好管理。命名冲突的问题也不会出现
3:部署Dubbo服务的方式有两种
将Dubbo服务的jar包上传到服务器,并且Dubbo所应用的lib下的依赖上传到服务器。
- 在Linux操作系统上手工部署Dubbo服务
手工维护Dubbo服务是最简单的,只需要将Dubbo服务的jar包上传到服务器,使用命令 java -jar xxx.jar 启动jar包就可以。
- 自定义Dubbo服务维护的Shell脚本 (建议使用)
脚本命名规范:
/home/studyDemo/wusc/edu/service/XXX/service-XXX.sh
例如:
/home/studyDemo/wusc/edu/service/user/service-user.sh
编写xshell脚本
#!/bin/sh
## java env
export JAVA_HOME=/opt/jdk/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
## service name 脚本规范通用性,服务后面的一段名称
APP_NAME=user
SERVICE_DIR=/home/studyDemo/wusc/edu/service/$APP_NAME
SERVICE_NAME=edu-service-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
# 启动脚本
start)
# (nohup XXX &)守护进程,启动jar包,相当于java -jar XXX一样效果
#(-Xms256m -Xmx512m)内存调优
# (>/dev/null)因为项目已经有输出日志了,/dev/null相当于linux的黑洞什么都可以往里面放,这里等于把再一次输出的日志放里面,就保证了只有一份日志输出,没有这个的话,就多处一个nohup.out日志输出文件,就变成两份日志输出了
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
# 关闭脚本
stop)
# 删除进程 通过上面生成的pid
kill `cat $SERVICE_DIR/$PID`
# 杀掉进程后,再把这个pid文件删除
rm -rf $SERVICE_DIR/$PID
# 输出=== stop XXX
echo "=== stop $SERVICE_NAME"
# 睡几秒
sleep 5
## -w代表全匹配,不加则代表模糊匹配,这样就不会出现杀错的情况
## edu-service-aa.jar
## edu-service-aa-bb.jar
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
# 如果那个pid为空,杀掉了,则打印成功杀掉的log日志
echo "=== $SERVICE_NAME process not exists or stop success"
else
# 如果还没有杀掉,则输出log日志提示,然后进行强杀kill
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;
# 重启
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
# 什么参数都不带,或者随便带什么,也是重启
*)
## restart
$0 stop
sleep 2
$0 start
;;
esac
exit 0
上面的脚本里面加了一些注释说明,使用的时候有报错的话可能是注释的问题,注释格式错了。
- 启动脚本
# 执行脚本start模块启动jar包
[root@edu-procider-01 user]# ./service-user.sh start
=== start edu-service-user
如果提示权限不够,则解决方法是先使用chmod命令对shell脚本赋予权限,再执行
# 运行脚本提示权限不够
[root@edu-procider-01 user]# ./service-user.sh start
-bash: ./service-user.sh: 权限不够
# 使用chmod命令
[root@edu-procider-01 user]# chmod 777 ./service-user.sh
# 再启动
[root@edu-procider-01 user]# ./service-user.sh start
=== start edu-service-user
再次查看,发现多了一个pid文件,就是进程的id,等stop的时候,就通过这个pid去杀掉这个进程。
[root@edu-procider-01 user]# ls
edu-service-user.jar edu-service-user.pid lib logs service-user.sh
查看控制台,服务已经启动
- 关闭进程
[root@edu-procider-01 user]# ./service-user.sh stop
=== stop edu-service-user
=== edu-service-user process not exists or stop success
查看控制台,发现没有该服务了
服务提供者已经启动,我们把服务消费者,打成war包,放在linux中的tomcat运行起来。
打包的时候要注意:web过程所依赖的其他项目,要先构建成jar在本地,再打包的时候才不能出错。
上传到服务器tomcat下面webapps中。
两个服务器:
centOS1:服务提供者、zookeeper注册中心、dubbo控制台
centOS2:服务消费者
注意:如果只启动了zookeeper注册中心、控制台、服务消费者,那么再控制台是看不到服务消费者的信息的,需要启动服务提供者才能看到。
1:启动所以东西:有些不清楚的东西可以看之前的文章,比如服务提供者jar包脚本启动
centOS1:服务提供者、zookeeper注册中心、dubbo控制台都要启动
centOS2:服务消费者启动
消费者启动
然后查看控制台:
效果: