Linux Note / 运维笔记

Spring Boot 微服务最优部署方式

Einic Yeo · 3月19日 · 2019年 · ·

1、首先在项目pom文件中引入插件,然后再 maven install 打包

<build>
   <plugins>
     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <executable>true</executable>
        </configuration>
     </plugin>
   </plugins>
 </build>

2、jar包相同路径下创建一个 springboot .conf文件,名称应该与.jar的名称相同

[root@infvie service]# tree -L 1
.
├── application.yml
├── springboot.conf
├── springboot.jar
└── lib

1 directory, 3 files

application.yml :

spring:
  datasource:
    einic:
      url: jdbc:mysql://127.0.0.1:3306/einic?characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
      username: F50KqUrT
      password: wvTY047rMkIJ1q3F
      driver-class-name: com.mysql.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
  thymeleaf:
    cache: false
  redis:
    host: 127.0.0.1
    port: 6379
    password: wvTY047rMkIJ1q3F
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200
  rabbitmq:
    host: 127.0.0.1
    username: F50KqUrT
    password: wvTY047rMkIJ1q3F
  servlet:
    multipart:
      max-file-size: 20MB
      max-request-size: 20MB
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
mybatis:
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    com.infvie.einic.*: debug
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
server:
  port: 8088
  servlet:
    context-path: /einic
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1600
    max-connections: 20000
    accept-count: 1600
    max-http-header-size: 65536
    min-spare-threads: 200
fdfs:
  so-timeout: 1501
  connect-timeout: 2000
  thumb-image:
    width: 150
    height: 150
  tracker-list:
    - fdfs-devops.infvie.com:22122

springboot .conf :

RUN_AS_USER="www"
USE_START_STOP_DAEMON=false
JAVA_HOME="$JAVA_HOME/bin/java"
JAVA_OPTS="-Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -Xms2048M -Xmx2048M -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -XX:AutoBoxCacheMax=20000 -XX:G1ConcRefinementThreads=4 -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:InitiatingHeapOccupancyPercent=70 -XX:G1ReservePercent=15 -XX:G1HeapRegionSize=32M -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+UnlockDiagnosticVMOptions -XX:HeapDumpPath=/dev/shm/ -XX:+PerfDisableSharedMem -XX:+PrintCompressedOopsMode -XX:-PrintGCApplicationStoppedTime -XX:ParGCCardsPerStrideChunk=8192 -XX:+UseG1GC -XX:+UseStringDeduplication -XX:MaxGCPauseMillis=180 -Dlog4j2.formatMsgNoLookups=true -javaagent:/data/wwwroot/elastic-apm-agent-1.14.0.jar -Delastic.apm.service_name=sc-chengd
u-springboot-api01-181 -Delastic.apm.server_urls=http://apm-server:8200 -Delastic.apm.application_packages=* -Dloader.path=lib/"
RUN_ARGS="--spring.config.location=application.yml"
PID_FOLDER="/var/run"
LOG_FOLDER="/data/wwwlogs"

自定义参数参考:

变量描述
MODE操作的“模式”。默认值取决于jar的构建方式,但通常auto是这样(这意味着它会通过检查目录中是否为符号链接来尝试猜测它是否为初始化脚本init.d)。您可以将其显式设置为service以便stop|start|status|restart命令run可以运行,也可以将其设置为要在前台运行脚本。
RUN_AS_USER将用于运行应用程序的用户。未设置时,将使用拥版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!有jar文件的用户。
USE_START_STOP_DAEMONstart-stop-daemon命令在可用时是否应用于控制过程。默认为true
PID_FOLDERpid文件夹的根名称(/var/run默认情况下)。
LOG_FOLDER放置日志文件的文件夹的名称(/var/log默认情况下)。
CONF_FOLDER从中读取.conf文件的文件夹的名称(默认情况下与jar文件相同的文件夹)。
LOG_FILENAME日志文件的名称LOG_FOLDER<appname>.log默认情况下为)。
APP_NAME应用程序的名称。如果jar是从符号链接运行的,则脚本会猜测应用程序名称。如果它不是符号链接,或者您要显式设置应用程序名称,则这将很有用。
RUN_ARGS版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!递给程序(Spring Boot应用程序)的参数。
JAVA_HOMEjava可执行文件的位置PATH默认情况下使用来发现,但是如果在上有可执行文件,则可以显式设置它$JAVA_HOME/bin/java
JAVA_OPTS启动JVM时传递给JVM的选项。
JARFILEjar文件的显式位置,以防脚本用于启动实际上未嵌入的jar。
DEBUG如果不为空,则-x在shell进程上设置该标志,从而易于查看脚本中的逻辑。
STOP_WAIT_TIME停止应用程序之前要强制关闭版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!的等待时间(以秒为单位60)(版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!默认情况下)。

3、将打包好的springboot jar包放入服务器上,然后执行下面的命令

sudo ln -s /usr/java/jdk1.8.0_181/bin/java /sbin/java

chown www:www springboot.jar && chmod 500 springboot.jar && sudo chattr +i springboot.jar

chmod 400 springboot.conf && sudo chown root:root springboot.conf

sudo ln -s /data/wwwroot/service/springboot.jar /etc/init.d/springboot

4、上述命令执行完全之后,通过下面的命令就可以操作项目了

#启动服务
/etc/init.d/springboot start 
#服务关闭
/etc/init.d/springboot stop
#服务重启
/etc/init.d/springboot restart 
#前台运行
/etc/init.d/springboot run 

5、配置项目开机自启动一

1)检查rc.local 执行权限
# ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Jul 25  2018 /etc/rc.local -> rc.d/rc.local
# ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 401 Mar 19 15:20 /etc/rc.d/rc.local

2)配置运行环境与启动服务
more /etc/rc.local

#Location of JAVA_HOME (bin files)
export JAVA_HOME=/usr/java/jdk1.8.0_181

#Add Java binary files to PATH
export PATH=$JAVA_HOME/bin:$PATH

#Add springboot run start
/bin/su www -c "/etc/init.d/springboot start"

设置开机启动项二 systemd Service

假设您在/var/myapp中安装了Spring Boot应用程序,以将Spring Boot应用程序作为systemd服务安装,请创建一个名为的脚本springboot.service并将其放置在/etc/systemd/system目录中。以下脚本提供了一个示版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!例:

[Unit]
Description=springboot
After=syslog.target

[Service]
User=www
ExecStart=/data/wwwroot/service/springboot.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

日志分割

[root@infvie init.d]# more /etc/logrotate.d/wwwlogs 
/data/wwwlogs/*.log {
  daily
  rotate 5
  dateext
  compress
  copytruncate
  delaycompress
  missingok
  notifempty
}

参考文献

https://www.freedesktop.org/software/systemd/man/systemd.service.html
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment

0 条回应