API部署
安装jdk
下载jdk
mkdir -p /opt
cd /opt
wget http://res.javamall.com.cn/jdk-8u121-linux-x64.tar.gz
解压缩并重命名:
tar -xzvf jdk-8u121-linux-x64.tar.gz
mv jdk1.8.0_121/ jdk8
配置环境变量:
vi /etc/profile
在文件的最后配置如下内容:
JAVA_HOME=/opt/jdk8
JRE_HOME=/opt/jdk8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
注意可能存在已有配置,请修改为正确的路径
使配置文件生效:
source /etc/profile
验证
java -version
如果不正确,可能需要退出重新登录
安装maven
cd /opt
yum install -y vim
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xzvf apache-maven-3.6.3-bin.tar.gz
配置环境变量:
vi /etc/profile
在文件的最后配置如下内容(增加MAEN_HOME并修改path):
#其它略
MAVEN_HOME=/opt/apache-maven-3.6.3
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin
#其它略
注意可能存在已有配置,请修改为正确的路径
使配置文件生效:
source /etc/profile
验证
mvn -v
配置maven私服
vi /opt/apache-maven-3.6.3/conf/settings.xml
在mirrors节点中新增mirror节点:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
在profiles节点中新增一个profile节点:
<profile>
<id>alimaven</id>
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
在activeProfiles节点中新增一个activeProfile 节点:
<activeProfile>alimaven</activeProfile>
注意:以上代码不要写到注释里,请仔细检查!
clone源码
在这之前,请您参考《git部署公钥指南》
作为规范,我们约定源码全部放在 /opt/source目录中,jar放在/opt/server中
mkdir -p /opt/server
mkdir -p /opt/source
cd /opt/source
- b2b2c
- s2b2c
需要clone的源码:
git clone git@gitee.com:enation/middle-end.git --branch 分支名称
或者
git clone https://gitee.com/enation/middle-end.git --branch 分支名称
进行初次编译
cd /opt/source/middle-end
mvn clean install -DskipTests -f pom.xml
需要clone的源码:
git clone git@gitee.com:enation/sbc-microservice.git --branch 分支名称
或者
git clone https://gitee.com/enation/sbc-microservice.git --branch 分支名称
进行初次编译
cd /opt/source/sbc-microservice
mvn clean install -DskipTests -f pom.xml
运行配置中心
要保证Nacos配置中心配置正确,详情参考:Nacos、Seata和Sentinel部署
运行API
建立配置文件
在启动各个服务之前,我们需要指定每个服务的nacos配置中的地址:打开服务中的src/main/resources/bootstrap.yml,修改为nacos所在ip
或者在服务jar包启动的同级目录下新增一个config/bootstrap.yml文件,文件内容如下:
在开发环境中通过源码运行,可以通过修改源码中的config目录中的bootstrap.yml来统一指定nacos地址(因为config/bootstrap.yml优先于各个服务中的/bootstrap.yml)
spring:
cloud:
nacos:
config:
server-addr: 192.168.2.186:8848
file-extension: yaml
shared-configs[0]:
data-id: common.yaml
group: DEFAULT_GROUP
refresh: true
shared-configs[1]:
data-id: seata-client.yaml
group: DEFAULT_GROUP
refresh: true
shared-configs[2]:
data-id: sentinel.yaml
group: DEFAULT_GROUP
refresh: true
shared-configs[3]:
data-id: swagger.yaml
group: DEFAULT_GROUP
refresh: true
建立如下脚本
vi /opt/server/start.sh
###如果为nacos 版本 则粘贴如下内容:
bin/bash
#版本
verson=7.2.3
#要部署的分支
branch=feature_7.2.3_upgrade
#源文件存储目录
source_dir=/opt/source/middle-end
#程序运行时目录
server_dir=/opt/server
mkdir -p $server_dir"/logs/"
#要运行的api
apis=("trade-service" "statistics-service" "payment-service" "member-service" "goods-service" "gateway-service" "distribution-service" "consumer" "promotion-service")
apiPorts=("8005" "8006" "8010" "8003" "8004" "8001" "8008" "8007" "8011")
killone(){
ps -ef |grep java |grep $1 |grep -v 'grep'|awk '{print $2}' | xargs kill -9
echo '停止'$1
}
startone(){
nohup java -Xmx512m -Xms256m -Xss1024k -jar $1"-"$verson.jar > $server_dir"/logs/"$1".out" &
echo '启动'$1
}
startall="yes"
for api_name in ${apis[@]}
do
if [[ "$1" != "" && "$1" = $api_name && "$1" != "dontbuild" ]]
then
startall="no"
break
fi
done
echo "startall is "$startall
if [[ "$startall" = "yes" ]]; then
#杀死进程
for api_name in ${apis[@]}
do
killone "$api_name"
echo "$api_name stop success"
done
else
killone "$1"
fi
killone "system-service"
cd $server_dir
#检测端口状态
checkPort(){
r=`netstat -ntlp | awk '{print $4}' | grep :$1`
if [ "$r" == "" ]
then
return 0
else
return 1
fi
}
if [ "$1" != "dontbuild" ]
then
#更新源码
cd $source_dir
git reset --hard $branch
git pull
mvn clean install -DskipTests -f pom.xml
rm -rf $server_dir"/*.jar"
for api_name in ${apis[@]}
do
mv $source_dir"/"$api_name"/target/"$api_name"-"$verson.jar $server_dir
done
else
echo "不构建,直接重启"
fi
mv $source_dir"/system-service/target/system-service-"$verson.jar $server_dir
#检测系统服务状态
checkPort 8002
#读取状态
res=`echo $?`
cd $server_dir
#判断系统服务 是否启动,如果未启动则启动
if [ "$res" == "0" ]
then
startone "system-service"
echo "等待 系统服务 启动"
while [ "$res" == "0" ]
do
checkPort 8002
res=`echo $?`
echo -n "."
sleep 1s
done
echo "系统服务start success"
else
echo ""
echo "系统服务 已经启动"
fi
sleep 1s
echo "开始api时间:" $(date +"%Y-%m-%d %H:%M:%S")
if [[ "$startall" == "yes" ]]; then
for key in ${!apis[*]}
do
api_name=${apis[$key]}
api_port=${apiPorts[$key]}
startone "$api_name"
echo "端口号:$api_port"
checkPort "$api_port"
res=`echo $?`
while [ "$res" == "0" ]
do
checkPort "$api_port"
res=`echo $?`
echo -n "."
sleep 1s
done
echo "$api_name启动成功"
done
else
startone "$1"
fi
echo "结束api时间:" $(date +"%Y-%m-%d %H:%M:%S")
echo "全部启动完成"
执行脚本:
sh start.sh
以后更新部署时,直接执行此脚本即可
网关配置
tip
各个服务通过网关服务暴漏接口,一般需要通过一层负载(比如nginx)代理,nginx配置如下
#API域名配置
server {
listen 81;
server_name 网关域名;
#允许上传视频最大为10M
client_max_body_size 10M;
location / {
proxy_pass http://gateway service ip:8001;
proxy_set_header Host $host:$server_port;
proxy_pass_header User-Agent;
}
}
验证
访问nacos控制台
http://IP:8848/nacos 验证相关的服务是否注册在了nacos上