Linux进阶(Linux部署Spring微服务)

linux部署微服务

环境资源:

操作系统版本:Linux CentOS 7.6

JAVA环境:openjdk version "1.8.0_312"

1、首先查看分发下来的操作系统信息

uname -a

2.安装yum工具

1.2.1 更新yum
	yum update yum
1.2.2 安装yum工具
yum -y install yum-utils

3.安装jdk

	JAVA安装命令: 
yum install java-1.8.0-openjdk.x86_64
	查看JAVA版本: java -version

4.新建存放服务的路径

cd  /home
mkdir  deploy

5.上传jar包

rz命令

可能会用到的命令,

打包 zip  -r  文件名.zip   需要打包的目录

解压打包 unzip  文件名.zip

6.编写发布脚本

#命令使用:./deploy.sh start all;  ./deploy.sh stop all;  ./deploy.sh restart all;   ./deploy.sh ** base-admin

#! /bin/sh
# 端口号
#! /bin/sh
# 端口号
PORTS=(8900 8901 8902)
# 模块
MODULES=(gateway admin business)
# 模块名称
MODULE_NAMES=(网关 管理系统 业务服务)
# jar包数组
JARS=(gateway.jar admin.jar business.jar)
# jar包路径
JAR_PATH='/home/deploy/jar'
# 日志路径
LOG_PATH='/home/deploy/logs'
start() {
  local MODULE=
  local MODULE_NAME=
  local JAR_NAME=
  local command="$1"
  local commandOk=0
  local count=0
  local okCount=0
  local port=0
  for((i=0;i<${#MODULES[@]};i++))
  do
    MODULE=${MODULES[$i]}
    MODULE_NAME=${MODULE_NAMES[$i]}
    JAR_NAME=${JARS[$i]}
    PORT=${PORTS[$i]}
    if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
      commandOk=1
      count=0
      PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        echo "$MODULE---$MODULE_NAME:已经运行,PID=$PID"
      else
        exec nohup java -Xms2048m -Xmx2048m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 &
        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -z "$PID" ]
        do
          if (($count == 30));then
            echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
            break
          fi
          count=$(($count+1))
          echo "$MODULE_NAME启动中.................."
          sleep 10s
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        okCount=$(($okCount+1))
        echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
      fi
    fi
  done
  if(($commandOk == 0));then
    echo "第二个参数输入错误"
  else
    echo "............本次共启动:$okCount个服务..........."
  fi
}
 
stop() {
  local MODULE=
  local MODULE_NAME=
  local JAR_NAME=
  local command="$1"
  local commandOk=0
  local okCount=0
  for((i=0;i<${#MODULES[@]};i++))
  do
    MODULE=${MODULES[$i]}
    MODULE_NAME=${MODULE_NAMES[$i]}
    JAR_NAME=${JARS[$i]}
    if [ "$command" = "all" ] || [ "$command" = "$MODULE" ];then
      commandOk=1
      PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
        kill -9 $PID
        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -n "$PID" ]
        do
          sleep 3s
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        echo "$MODULE---$MODULE_NAME:成功结束"
        okCount=$(($okCount+1))
      else
        echo "$MODULE---$MODULE_NAME:未运行"
      fi
    fi
  done
  if (($commandOk == 0));then
    echo "第二个参数输入错误"
  else
    echo "............本次共停止:$okCount个服务............"
  fi
}
 
 
case "$1" in
  start)
    start "$2"
  ;;
  stop)
    stop "$2"
  ;;
  restart)
    stop "$2"
    sleep 3s
    start "$2"
  ;;
  *)
    echo "第一个参数请输入:start|stop|restart"
    exit 1
  ;;
esac

如果需要安装docker

    设置docker开机自启

    systemctl enable docker

 docker文件映射语法:

docker run -d \
  --name nginx \
  --net=host \
  -v /home/docker/apps/nginx/www:/usr/share/nginx/html \
  -v /home/docker/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
  -v /home/docker/apps/nginx/logs:/var/log/nginx \
  -v /home/docker/apps/nginx/conf.d:/etc/nginx/conf.d \
  -v /home/docker/apps/nginx/cert:/etc/nginx/cert \
  nginx

如制作 docker  mhyr-eureka 镜像

docker run  --net=host -p 8961:8961 --name mhyr-eureka -d mhyr-eureka

Dockerfile 

FROM java:8
VOLUME /tmp
ADD mhyr-eureka.jar mhyr-eureka.jar
EXPOSE 8961
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/mhyr-eureka.jar"]

下面介绍nginx部署:

拉取镜像:

docker pull nginx:latest

在/home/docker/script路径下创建一个脚本文件“nginx.sh”,内容为:

docker run -d \
--name nginx \
--net=host \
-v /home/docker/apps/nginx/www:/usr/share/nginx/html \
-v /home/docker/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/apps/nginx/logs:/var/log/nginx \
-v /home/docker/apps/nginx/conf.d:/etc/nginx/conf.d \
-v /home/docker/apps/nginx/cert:/etc/nginx/cert \
nginx

(注意:以上内容需注意linux中的特殊字符,可用vim编辑文件,去掉特殊字符,否则运行脚本文件时会报错;想要退出vim模式,先按“ESC”进入命令模式,接着输入冒号“:”, 输入“q”:退出cert为安全证书相关,不需要时可以去掉)

接着:

     1.在/home/docker/apps路径下创建“nginx”文件夹

2.在/home/docker/apps/nginx路径下分别创建“www”、 “logs”、 “conf”、 “conf.d”四个文件夹;”www”文件夹用于存放前端代码,“logs”文件夹用于存放日志,“conf”文件夹用于存放nginx总配置文件,“conf.d”用于存放项目配置文件;如需安全证书相关,还要创建“cert”文件夹。

3.nginx总配置文件:

在/home/docker/apps/nginx/conf路径下创建“nginx.conf”文件,作为nginx的总配置文件,内容为:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    client_max_body_size 1024m;
    include /etc/nginx/conf.d/*.conf;
}

 

#server
#{
  ## 80端口是http正常访问的接口
  #listen 80;
  #server_name XXX.com;
  ## 在这里,我做了https全加密处理,在访问http的时候自动跳转到https
  #rewrite ^(.*) https://${server_name}$1 permanent;
#}

server {
	# listen 自定义监听端口
    listen       80;
	#定义使用 访问域名
    server_name  localhost;
	# 如需域名则配置如下
	# 把80换成侦听443端口,这个是ssl访问端口
	# listen 443 ssl; 
	# ssl_certificate /etc/nginx/cert/安全证书文件名;
    # ssl_certificate_key /etc/nginx/cert/安全私钥文件名;

    location / {
        root   /var/nginx/html/xxx;
        index  index.html index.htm;
    }
	
    error_page   500 502 503 504  /50x.html;
    location = /404.html {
            root  error;
    }

}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值