Part VI. Deploying Spring Boot Applications
文檔說(shuō)明:
- 文檔對(duì)應(yīng)的版本為 2.1.0.M3
- 這不是文檔的完整中文翻譯召夹,也有可能跟原文文字不一一對(duì)應(yīng)初坠,只是我閱讀文檔時(shí)候做的簡(jiǎn)單筆記
- 如果對(duì)應(yīng)的章節(jié)沒(méi)有任何中文性芬,有可能是文檔內(nèi)容比較少埂蕊,建議直接看原文揪利,或者是我不感興趣的部分
- 目錄標(biāo)題沒(méi)有做翻譯,首先標(biāo)題一般一眼就能看懂什么意思笛坦,不做翻譯還能保證原文意思区转,其次也方便對(duì)應(yīng)到原文位置
62. Deploying to the Cloud
Spring Boot 的可執(zhí)行 jar 文件使用于大部分的 PaaS(Platform-as-a-Service)平臺(tái)苔巨。這些平臺(tái)就是希望你的應(yīng)用自己準(zhǔn)備所有的東西。他們管理的是應(yīng)用進(jìn)程废离,并不是 Java 應(yīng)用侄泽。
62.1 Cloud Foundry
62.1.1. Binding to Services
62.2 Heroku
62.3 OpenShift
62.4 Amazon Web Services (AWS)
62.4.1. AWS Elastic Beanstalk
Using the Tomcat Platform
Using the Java SE Platform
62.4.2. Summary
62.5 Boxfuse and Amazon Web Services
62.6 Google Cloud
63. Installing Spring Boot Applications
除了可以通過(guò) java -jar 來(lái)運(yùn)行 Spring Boot 應(yīng)用,還可以對(duì) Unix 操作系統(tǒng)制作完整可執(zhí)行的應(yīng)用蜻韭。一個(gè)完整可執(zhí)行的 jar 就是類(lèi)似其他可執(zhí)行的二進(jìn)制程序一樣悼尾,或者可以通過(guò) init.d 或者 systemd 注冊(cè)。這樣的話(huà)肖方,安裝和管理在大部分生產(chǎn)環(huán)境都會(huì)變得非常容易诀豁。
注意:Fully executable jars 是在文件的前面嵌入了一段腳步來(lái)實(shí)現(xiàn)的,可以把 jar 或者 war 解壓出來(lái)查看窥妇。目前有些工具并不能識(shí)別這種文件格式,所以你不能在所有場(chǎng)景都使用這個(gè)功能娩践。
制作一個(gè) fully executable jar活翩,需要添加如下依賴(lài):
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
63.1 Supported Operating Systems
默認(rèn)的腳步支持大部分的 Linux 發(fā)行版本,并在 CentOS 和 Ubuntu 上驗(yàn)證通過(guò)翻伺。其他平臺(tái)材泄,例如 OS X 和 FreeBSD,需要自定義嵌入的腳本吨岭。
63.2 Unix/Linux Services
Installation as an init.d Service (System V)
建立 jar 的連接到 init.d 并支持 start拉宗、stop、restart 和 status 命令:
- jar 文件的屬主可以啟動(dòng)服務(wù)
- 可通過(guò) /var/run/<appname>/<appname>.pid 來(lái)查看應(yīng)用的進(jìn)程 PID
- 日志寫(xiě)到 /var/log/<appname>.log 文件
假如你的應(yīng)用在 /var/myapp辣辫,那么安裝到 init.d 的操作如下:
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
$ service myapp start
Securing an init.d Service
不要以 root 用戶(hù)來(lái)啟動(dòng)服務(wù)旦事。
保護(hù) jar 文件:
$ chmod 500 your-app.jar
# This will prevent any user, including root, from modifying the jar
$ sudo chattr +i your-app.jar
保護(hù) conf 配置文件:
$ chmod 400 your-app.conf
$ sudo chown root:root your-app.conf
Installation as a systemd Service
假設(shè)應(yīng)用的位置是 /var/myapp,想要以 systemd 服務(wù)的形式來(lái)安裝 Spring Boot 應(yīng)用急灭,你需要在 /etc/systemd/system 目錄創(chuàng)建一個(gè)名為 myapp.service 的腳本文件姐浮,內(nèi)容樣例如下:
[Unit]
Description=myapp
After=syslog.target
[Service]
User=myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Description, User, 和 ExecStart 需根據(jù)自己應(yīng)用的實(shí)際情況填寫(xiě)。
Note: ExecStart 字段沒(méi)有在腳本里面聲明葬馋,意味著默認(rèn)采用 run 命令來(lái)啟動(dòng)服務(wù)卖鲤。
PID 和 日記記錄都交給 systemd 管理了。
開(kāi)機(jī)后啟動(dòng):
$ systemctl enable myapp.service
Customizing the Startup Script
默認(rèn)嵌入的啟動(dòng)腳本是有 Maven 或者 Gradle 插件提供的畴嘶,有很多方法可以實(shí)現(xiàn)定制化蛋逾,甚至可以使用 embeddedLaunchScript 來(lái)完全使用自己寫(xiě)的腳本。
Customizing the Start Script when It Is Written
配置 Maven 或者 Gradle 插件的 embeddedLaunchScriptProperties 屬性窗悯。
Customizing a Script When It Runs
通過(guò)環(huán)境變量或者一個(gè)配置文件
63.3 Microsoft Windows Services
[winsw][]
[]winsw]: https://github.com/kohsuke/winsw