前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用NGINX反向代理部署Spring Boot应用

使用NGINX反向代理部署Spring Boot应用

作者头像
DMC
发布2018-09-10 12:20:16
9.1K0
发布2018-09-10 12:20:16
使用NGINX反向代理部署Spring Boot应用
使用NGINX反向代理部署Spring Boot应用

什么是Spring Boot

Spring Boot通过大量的默认配置,让使用Spring框架进行开发变得方便快捷,从而使得Java开发人员专注于程序原型设计。本文介绍如何创建一个简单的Spring Boot应用,然后通过NGINX反向代理进行发布。

开始之前

你需要一个同时装有Java 8和NGINX的Linode虚拟主机。如果这些已经安装好了,请跳过此步。

安装Java JDK 8

1. 安装software-properties-common

代码语言:javascript
复制
sudo apt install software-properties-common

2. 添加Oracle PPA仓库:

代码语言:javascript
复制
sudo apt-add-repository ppa:webupd8team/java

3. 更新所有已安装的软件包:

代码语言:javascript
复制
sudo apt update

4. 安装Oracle JDK。若需要安装Java 9 JDK,将java8改为java9的命令为:

代码语言:javascript
复制
sudo apt install oracle-java8-installer

5. 检查Java版本:

代码语言:javascript
复制
java -version

安装NGINX

以下步骤介绍在Ubuntu上安装从NGINX官方库下载的NGINX开发版。需要了解NGINX其他发行版,请参阅NGINX管理指南。若需要了解如何为生产环境配置NGINX,请参阅NGINX入门指南

在文本编辑器中打开/etc/apt/sources.list,并在文件最后追加以下内容。再将CODENAME替换为Ubuntu版本的代号。例如,为Ubuntu 18.04,代号为Bionic Beaver(仿生海狸),以下使用bionic替代CODENAME

代码语言:javascript
复制
/etc/apt/sources.list1

deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx

2. 导入仓库的包签名密钥并将其添加到apt

代码语言:javascript
复制
sudo wget http://nginx.org/keys/nginx_signing.key 
sudo apt-key add nginx_signing.key

3. 安装NGINX:

代码语言:javascript
复制
sudo apt update 
sudo apt install nginx

4. 确保NGINX正在运行并设置开机自启动:

代码语言:javascript
复制
sudo systemctl start nginx 
sudo systemctl enable nginx

安装Spring Boot CLI

Spring Boot CLI使得搭建项目框架变得更加容易。SDKMAN!是一个简化Spring CLI安装和构建的工具(如同Gradle或Maven)。使用Spring Boot CLI,可以直接在命令行中创建新项目。

1. 安装SDKMAN!的依赖项:

代码语言:html
复制
sudo apt install unzip zip

2. 安装SDKMAN!:

代码语言:html
复制
curl -s https://get.sdkman.io | bash

3. 按照控制台中打印的说明操作:

代码语言:html
复制
source "/home/username/.sdkman/bin/sdkman-init.sh"

验证SDKMAN!是否已安装:

代码语言:javascript
复制
sdk help

4. 安装Spring CLI:

代码语言:javascript
复制
sdk install springboot

验证安装:

代码语言:javascript
复制
spring version

5. 安装Gradle:

代码语言:html
复制
sdk install gradle 4.5.1
代码语言:html
复制
Downloading: gradle 4.5.1
  
In progress...
  
######################################################################## 100.0%
  
Installing: gradle 4.5.1 
Done installing!

构建一个jar文件

有许多可用的构建工具。Spring Boot CLI默认使用Maven,但本文中将使用Gradle。想了解有关Maven和Gradle之间差异的讨论,请参阅Maven和Gradle比较

1. 使用Spring Boot CLI创建一个新项目。使用项目框架创建一个名为hello-world的新目录。

代码语言:javascript
复制
spring init --build=gradle --dependencies=web --name=hello hello-world

注意要查看Spring Boot CLI的可能参数的完整列表,请运行:

代码语言:javascript
复制
spring init --list

2. 进入项目目录。此示例创建一个Endpoint以在Spring应用中返回"Hello world"。需添加两个额外的引用和一个新类。

代码语言:java
复制
~/hello-world/src/main/java/com/example/helloworld/HelloApplication.java
 
package com.example.helloworld;  
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.bind.annotation.RequestMapping;  

@SpringBootApplication 
public class HelloApplication {         
       public static void main(String[] args) {                 
         SpringApplication.run(HelloApplication.class, args);         
       } 
}

@RestController 
class Hello {     
   @RequestMapping("/")     
   String index() {         
      return "Hello world";     
   } 
}

3. 构建应用程序。这将在在项目中创建一个名为build的新目录。

代码语言:javascript
复制
./gradlew build

4. 运行嵌入了Tomcat服务器的应用。该应用将在localhost:8080上运行。可以按Ctrl+C停止。

代码语言:html
复制
java -jar build/libs/hello-world-0.0.1-SNAPSHOT.jar

5. 应用可以在不链接jar文件的情况下运行。

代码语言:javascript
复制
gradle bootRun

6. 测试应用是否正确地在localhost中运行:

代码语言:html
复制
curl localhost:8080
代码语言:javascript
复制
Hello world

7. 按CTRL+C停止Tomcat服务器。

创建一个初始化脚本

将Spring Boot应用设置为服务以在服务器重启时自启动:

代码语言:html
复制
/etc/systemd/system/helloworld.service

[Unit] 
Description=Spring Boot HelloWorld 
After=syslog.target 
After=network.target[Service] 
User=username 
Type=simple  

[Service] 
ExecStart=/usr/bin/java -jar /home/linode/hello-world/build/libs/hello-world-0.0.1-SNAPSHOT.jar 
Restart=always 
StandardOutput=syslog 
StandardError=syslog 
SyslogIdentifier=helloworld  

[Install] 
WantedBy=multi-user.target

启动服务:

代码语言:javascript
复制
sudo systemctl start helloworld

检查状态是否生效:

代码语言:javascript
复制
sudo systemctl status helloworld

反向代理

现在Spring应用已作为服务运行,NGINX代理允许将应用部署到非特权端口并设置SSL。

1. 为反向代理创建NGINX配置文件:

代码语言:html
复制
/etc/nginx/conf.d/helloworld.conf 

server {        
   listen 80;        
   listen [::]:80;  
           
   server_name example.com;    
         
   location / {             
           proxy_pass http://localhost:8080/;              
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;              
           proxy_set_header X-Forwarded-Proto $scheme;              
           proxy_set_header X-Forwarded-Port $server_port;         
   } 
}

2. 测试配置以确保无误:

代码语言:javascript
复制
sudo nginx -t

3. 如果没有错误,请重新启动NGINX以使更改生效:

代码语言:javascript
复制
sudo systemctl restart nginx

4. 现在可以通过浏览器访问该应用。访问Linode的公共IP地址,应显示"Hello world"消息。

更多信息

想进一步了解本文提及的技术细节,你可以参考以下资源。虽然提供这些资料的初衷是希望它们对你有切实的帮助,但请注意,Linode社区无法保证外部托管材料的准确性或及时性。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Spring Boot
  • 开始之前
    • 安装Java JDK 8
      • 安装NGINX
      • 安装Spring Boot CLI
      • 构建一个jar文件
      • 创建一个初始化脚本
      • 反向代理
      • 更多信息
      相关产品与服务
      轻量应用服务器
      轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档