Развертывание веб-приложения Spring Boot как сервиса для 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

Кто-нибудь есть идея, что я делаю неправильно? Спасибо.

0
задан 23 January 2018 в 16:38

6 ответов

Если это может помочь кому-то еще в будущем, мне удалось заставить это работать, используя upstart. Оригинальный ответ можно найти здесь.

Я собираюсь скопировать и вставить ответ Patrk Bego здесь для удобства:

Сначала вам нужно будет определить сценарий Upstart (в случае Ubuntu 14.04), он находится в / etc / init / и заканчивается на .conf. ( здесь )

# <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

Надеюсь, что это поможет.

0
ответ дан 22 May 2018 в 15:21

Если это может помочь кому-то еще в будущем, мне удалось заставить это работать, используя upstart. Оригинальный ответ можно найти здесь.

Я собираюсь скопировать и вставить ответ Patrk Bego здесь для удобства:

Сначала вам нужно будет определить сценарий Upstart (в случае Ubuntu 14.04), он находится в / etc / init / и заканчивается на .conf. ( здесь )

# <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

Надеюсь, что это поможет.

0
ответ дан 17 July 2018 в 22:24

Если это может помочь кому-то еще в будущем, мне удалось заставить это работать, используя upstart. Оригинальный ответ можно найти здесь.

Я собираюсь скопировать и вставить ответ Patrk Bego здесь для удобства:

Сначала вам нужно будет определить сценарий Upstart (в случае Ubuntu 14.04), он находится в / etc / init / и заканчивается на .conf. ( здесь )

# <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

Надеюсь, что это поможет.

0
ответ дан 23 July 2018 в 23:02

Ubuntu использует systemd. Вы можете найти сообщение о том, что кто-то задает аналогичный вопрос в этом сообщении

. Другим подходом было бы использовать какой-либо инструмент оркестровки, например кубернеты или роутер докеров, для создания служб, которые могут перезапускать службу, даже если в какой-то момент она терпит неудачу времени.

Пример с докером:

В вашем 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 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

Протестируйте почтовый агент или браузер на свой локальный хост. Вы можете попробовать перезагрузить компьютер, и приложение все равно должно работать. В производстве вы используете рой или кубернеты.

Чтобы использовать рой, вы создаете файл 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

Вы должны проверить свое сообщение для других вопросов, таких как настойчивость и безопасность.

3
ответ дан 22 May 2018 в 15:21

Ubuntu использует systemd. Вы можете найти сообщение о том, что кто-то задает аналогичный вопрос в этом сообщении

. Другим подходом было бы использовать какой-либо инструмент оркестровки, например кубернеты или роутер докеров, для создания служб, которые могут перезапускать службу, даже если в какой-то момент она терпит неудачу времени.

Пример с докером:

В вашем 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 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

Протестируйте почтовый агент или браузер на свой локальный хост. Вы можете попробовать перезагрузить компьютер, и приложение все равно должно работать. В производстве вы используете рой или кубернеты.

Чтобы использовать рой, вы создаете файл 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

Вы должны проверить свое сообщение для других вопросов, таких как настойчивость и безопасность.

3
ответ дан 17 July 2018 в 22:24

Ubuntu использует systemd. Вы можете найти сообщение о том, что кто-то задает аналогичный вопрос в этом сообщении

. Другим подходом было бы использовать какой-либо инструмент оркестровки, например кубернеты или роутер докеров, для создания служб, которые могут перезапускать службу, даже если в какой-то момент она терпит неудачу времени.

Пример с докером:

В вашем 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 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

Протестируйте почтовый агент или браузер на свой локальный хост. Вы можете попробовать перезагрузить компьютер, и приложение все равно должно работать. В производстве вы используете рой или кубернеты.

Чтобы использовать рой, вы создаете файл 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

Вы должны проверить свое сообщение для других вопросов, таких как настойчивость и безопасность.

3
ответ дан 23 July 2018 в 23:02

Другие вопросы по тегам:

Похожие вопросы: