Implantando um aplicativo da Web Spring Boot como um serviço para o Ubuntu

0

Eu tenho um aplicativo Spring Boot que quero começar a usar System V Init . Meu arquivo jar está em /var/my-app/my-app-0.0.1-SNAPSHOT.jar . Então criei um link simbólico usando o comando abaixo

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

sem qualquer problema. No entanto, quando tento

sudo service my-app-0.0.1-SNAPSHOT start

Eu recebo o erro:

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

Alguém tem uma ideia do que estou fazendo de errado? Obrigado.

    
por swdon 23.01.2018 / 13:38

2 respostas

0

Caso isso possa ajudar alguém no futuro, consegui fazer isso funcionar usando upstart . A resposta original pode ser encontrada aqui .

Vou copiar e colar a resposta do Patrk Bego aqui por conveniência:

Você primeiro terá que definir o script Upstart (no caso do Ubuntu 14.04), ele estará em / etc / init / e terminará em .conf. ( link )

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

no caso do Ubuntu 16.06+ (você pode encontrar um bom artigo aqui )

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

Então você pode executá-lo como:

sudo service <your service name> start

Espero que ajude.

    
por swdon 28.01.2018 / 11:40
3

O Ubuntu usa o systemd. Você pode encontrar uma postagem de alguém fazendo uma pergunta semelhante nesta postagem

Outra abordagem seria usar algumas ferramentas de orquestração, como kubernetes ou docker swarm, para criar serviços que possam executar novamente o serviço, mesmo se ele falhar em algum momento.

Um exemplo com o docker:

No seu 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"] 

Crie sua imagem do docker

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

Para testar

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

Teste com carteiro ou navegador para seu host local. Você pode tentar reiniciar o computador e o aplicativo ainda deve ser executado. Na produção, você usaria swarm ou kubernetes.

Para usar o swarm, você cria um arquivo docker-compose.yml e deve armazenar suas imagens em um registro - uma imagem incorporada deve existir no nó de gerenciamento, se não for enviada para um registro.

No seu docker-compose.yml

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

No terminal:

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

Você deve verificar a documentação para outros assuntos, como persistência e segurança.

    
por ToninGuy3n 23.01.2018 / 15:44