java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动

java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动

    • 准备
    • 一, bat脚本批处理 打包服务器代码 jar
    • 二,云服务器运行java程序环境搭建
    • 三,上传本地文件到云服务器
    • 四,启动服务器程序

准备

前面一章分享了一个轻量级http服务器框架源码,本章会将上一章介绍的http服务器代码打包上传到云服务器启动.

一, bat脚本批处理 打包服务器代码 jar

  • 在项目中新建一个tools目录,然后新建一个打包脚本pakege.java.bat,如下:
  • pakege.java.bat 脚本内容如下
@echo off

cd %~dp0
echo pakege http
jar -cfen  %~dp0\..\out\http.jar    main.Http    -C %~dp0\..\out\production\server-demo1 .
@pause
  • 关于bat的写法大家可以网上找找,这里由于仅仅介绍一下上面脚本中需要提醒的内容:
    %cd%代表的是当前工作目录(current working directory,variable);
    %~dp0代表的是当前批处理文件所在完整目录(the batch file’s directory,fixed)。
    cd %~dp0 跳转到此bat文件所在目录

  • jar 的参数:
    -c 创建新的 JAR 文件包
    -e 为捆绑到可执行 jar 文件的独立应用程序
    指定应用程序入口点
    -t 列出 JAR 文件包的内容列表
    -x 展开 JAR 文件包的指定文件或者所有文件
    -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
    [vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
    -v 生成详细报告并打印到标准输出
    -f 指定 JAR 文件名,通常这个参数是必须的
    -m 指定需要包含的 MANIFEST 清单文件
    -n 创建新档案后 执行 Pack200 规范化
    -0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
    -M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
    [jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
    [manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
    [-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
    注:清单文件名,档案文件名 和 入口点名称的指定顺序 与 ‘m’,‘f’,‘e’ 标记的顺序相同.
    上述bat 源码中 : %~dp0…\out\http.jar 是指定生成的jar 名 , main.Http 是指定程序的入口 , -C %~dp0…\out\production\server-demo1 是指跳到 %~dp0…\out\production\server-demo1 , 而最后的一个 ‘.’ 表示-C 跳转到指定目录后 在当前路径操作

  • 注意: 上面的 \out 和 \out\production 是因为我这个项目中生成的class文件放在这里 才这么写的,如果你们的项目设置过比如/bin 下面的话, 上面的bat脚本 对号入座修改. 设置地方如下:

  • 运行bat脚本 两种方法:

    • 第一种方法 idea 中添加script 工具后(idea在线安装cmd插件:https://blog.csdn.net/a704397849/article/details/88399636),右键 run cmd script
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第1张图片
    • 第二种方法 找到文件所在位置 用系统工具打开,如下:
  • 打包成功 如下:
    java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第2张图片

二,云服务器运行java程序环境搭建

  • 1 云服务器选择
    部署的服务器选择不推荐买实体机作为服务器,原因:前期成本高,扩展不易,维护麻烦等等。个人或中小型企业推荐云服务器,可以按需付费,有效降低综合成本,快速的业务部署与配置、弹性扩展能力等等。
    云服务器购买可以选择 阿里云(我所在公司有十几台的阿里云服务器), 腾讯云, 百度云 等

  • 2 选择系统centos7.5(有些软件对版本有要求,如docker需要centos7以上)

  • 3 远程登录云服务器工具
    我所使用的工具 Xmanager Enterprise 5
    分享资源链接(忘了是不是有一个月试用期的,如果是的也可以先用着网上搜搜解决办法)
    链接:https://pan.baidu.com/s/1iXkB0GW2ICZpewVvNHkZUA
    提取码:ky8y

    • 下载安装了 Xmanager Enterprise 5 后, 打开
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第3张图片
    • 添加一个远程登录连接, 连接名 server_test
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第4张图片
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第5张图片
    • 第一次连接需要输入账号密码
  • 4 jdk安装

    • yum 快速安装 openjdk 1.8 (其他安装方式或重新安装,网上很多介绍,这里不提):
      yum install java-1.8.0-openjdk -y

    • 安装完后 java -version 查看安装的jdk版本
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第6张图片

三,上传本地文件到云服务器

在家目录下 创建一个目录 server-demo 作为服务器程序的目录 , 进入 server-demo 目录
java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第7张图片
将打包好了的本地的服务器执行程序http.jar 上传到云服务器server-demo里bin目录下, 将本地所有依赖jar包上传到serber-demo 目录libs下
下面仅仅只介绍了使用xshell自带的工具xftp来上传文件(也可以下载), 后面有时间写一篇关于自动化部署的文章里面再介绍用ssh上传的脚本.

  • 上面用到的工具shell 里面的xftp工具

  • 设置上传工具编码

  • 上传完后 云服务器上可以看看 上传的文件
    java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第8张图片

四,启动服务器程序

  • 1 服务器程序启动脚本 , 在server-demo目录下,创建一个启动脚本server-http 源码如下 ,
    这个脚本分析参考我的另一篇博文:https://blog.csdn.net/a704397849/article/details/88369846
#!/bin/bash

CMD=$(basename $0)
OK="[ \e[32mOK\e[0m ]";
FAIL="[\e[31mfail\e[0m]";

help(){
  echo -e "[\e[32m-? | -h | -help\e[0m]"
  echo -e "    帮助"
  echo -e "[\e[32mstart\e[0m]"
  echo -e "    启动"
  echo -e "[\e[32mstop\e[0m]"
  echo -e "    停止"
  echo -e "[\e[32mrestart\e[0m]"
  echo -e "    重启"
}

kill_cmd(){
  timeout=60
  i=0
  if [ -f .$CMD.pid ] ;then
    PID=`cat .$CMD.pid`
    if [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ;then
      kill -15 $PID &>/dev/null
      echo -n "stop  $CMD"
      while [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ; do
        if [ $i -ge $timeout ] ;then
          echo -e $FAIL
          return 1
        else
          echo -n "."
          sleep 1
          i=`expr $i + 1`
        fi
      done
      echo -e $OK
    fi
    rm .$CMD.pid
  fi
  return 0
}

start_cmd(){
  java="java -server -Xms128m -Xmx128m -Xss256k -XX:MaxPermSize=128m -XX:MaxDirectMemorySize=64m"
  java="$java -jar bin/http.jar"
  nohup $java >>logs/nohup.$CMD 2>&1 &
  echo "start $CMD"
  echo $! >> .$CMD.pid
  return 0
}

##################################################

case "$1" in
  'start')
    start_cmd
  ;;
  'stop')
    kill_cmd
  ;;
  'restart' | '')
    kill_cmd && start_cmd
  ;;
  '-?' | '-h' | '-help' | *)
    help
  ;;
esac
  • 2 启动程序

    • 给启动脚本设置权限: chmod 755 server-http
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第9张图片
    • 创建用于存放日志的目录logs (如果存在了就不用创建了)
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第10张图片
    • 确认server-demo目录下 有logs目录, 如果没有,则创建logs 目录: mkdir logs 。 在没有logs 目录时运行启动脚本结果会如下:
      在这里插入图片描述
    • 启动脚本,如下:
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第11张图片
  • 3 检查启动信息

    • 进入到logs目录下 ls 查看文件 , 可以看到"nohub.启动脚本名"的文件: nohub.server-http
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第12张图片

    • 打开这个文件: vi nohub.server-http ,可以看到server-http程序启动信息:
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第13张图片

  • 4 接口访问
    浏览器访问 http://106.13.92.221:81/test/query
    java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第14张图片

  • 5 关于脚本命令的简单介绍

    • 重启命令: ./server-http 或 ./server-http restart
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第15张图片

    • 结束命令: ./server-http stop

    • 脚本中的启动重启结束源码:
      java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动_第16张图片

下一章会在此项目代码基础上增加数据库框架功能模块源码,数据库选择的是mysql

才开的博客,之前工作中笔记都只是在自己的私人空间随意记录没法分享。
趁着最近不太忙,打算将自己的积累的一些知识分享出来,希望能帮助到在学习工作中遇到类似问题或有类似需求的朋友们。
最后,
如果哪里写的有问题或不清楚 请大家在评论中指出来,我有时间会来处理。
当然如果我的文章对你有所帮助,也希望你能够点赞、收藏。这是对我的最直接的肯定和支持,会给我更多的动力分享出更多高质量的文章 (〃‘▽’〃)。

你可能感兴趣的:(java)