将 Spring Boot Web 应用程序作为服务部署到 Ubuntu

将 Spring Boot Web 应用程序作为服务部署到 Ubuntu

我有一个 Spring Boot 应用,我想开始使用它System V Init。我的 jar 文件位于/var/my-app/my-app-0.0.1-SNAPSHOT.jar。因此,我使用以下命令创建了一个符号链接

sudo ln -s /var/my-app/my-app-0.0.1-SNAPSHOT.jar /etc/init.d/my-app-0.0.1-SNAPSHOT

没有任何问题。但是当我尝试

sudo service my-app-0.0.1-SNAPSHOT start

我收到错误:

/etc/init.d/my-app-0.0.1-SNAPSHOT: 1: /etc/init.d/myapp-0.0.1-SNAPSHOT: Syntax error: Unterminated quoted string

有人知道我做错了什么吗?谢谢。

答案1

Ubuntu 使用 systemd。你可以在这里找到有人问过类似问题的帖子邮政

另一种方法是使用一些编排工具(例如 kubernetes 或 docker swarm)来创建即使在某个时间点失败也可以重新运行的服务。

使用docker的示例:

在你的Dockerfile

FROM java:8-jre-alpine
COPY /location/of/your/jar/xyz.jar /where/you/want/it/stored/xyz.jar
CMD ["/bin/sh", "-c", "java -jar /where/you/want/it/stored/xyz.jar"] 

构建你的 docker 镜像

docker build \
   -t my-app:0.0.1-snapshot \ #specify a name for your image
   /dockerfile/location/      # the location of your dockerfile

去测试

docker run -it \           # -it represents interactive tty
   -p 80:8080 \            # -p binds 8080 (the container port) to 80 (host port)
   --restart=always \      # --restart=always run the service unless stopped by user
   --name my-app \         # --name the name of your container
   my-app:0.0.1-snapshot   # the image you built with the build command

使用 postman 或浏览器测试您的本地主机。您可以尝试重新启动计算机,应用程序仍应运行。在生产中,您可以使用 swarm 或 kubernetes。

要使用 swarm,您需要创建一个docker-compose.yml文件,并且您应该将您的图像存储在注册表中 - 如果未将构建的图像推送到注册表,则管理节点上必须存在构建的图像。

在你的docker-compose.yml

version: '3.5'
services:
  my-app:
    image: my-app:0.0.1-snapshot
    ports: 
      - "80:8080"
    restart: always

在终端:

docker swarm init
docker stack deploy my-app --compose-file ./docker-compose.yml

你应该看看他们的文档用于持久性和安全性等其他事项。

答案2

为了防止将来对其他人有所帮助,我设法使用 来让它工作upstart。原始答案可以找到这里

为了方便起见,我将在这里复制并粘贴 Patrk Bego 的答案:

您首先必须定义 Upstart 脚本(对于 Ubuntu 14.04),它位于 /etc/init/ 中并以 .conf 结尾。(http://upstart.ubuntu.com/cookbook/

# <service name>.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

对于 Ubuntu 16.06+(你可以找到很好的文章这里

sudo vim /etc/systemd/system/my-webapp.service

然后你可以这样运行它:

sudo service <your service name> start

希望有所帮助。

相关内容