LINUX.ORG.RU
решено ФорумAdmin

деплой сервиса с системой инициализации

 ,


2

3

Предположим есть cервис написанный на ноде или ror или еще чем нибудь, не важно на чем, главное что этот сервис включает свой сервер. Есть удаленный сервер с пользователем, отдельной папкой в /home/service и всем необходимым для работы этого сервиса. При деплое сервис загружается в /home/service запускается просто командой (например node service.js) и отлично работает.

Хочу что бы при перезагрузке удаленного сервера этот сервис автоматически запускался, то есть его надо как то добавить в систему инициализации сервера, при этом сам скрипт для системы инициализации должен храниться в репозитории вместе с этим сервисом, и соответственно вся магия должна происходить внутри /home/service от пользователя service.

Как это можно сделать?

★★★★★

Это называется «установкой». Эта задача решена до тебя процентов на 300-400.

Вкратце: если это — наколенное поделие, то нужен хотя бы симлинк на «скрипт для системы инициализации ... в репозитории».

Если же делать правильно — опакеть свой сервис так, как того требуют правила твоего дистрибутива. Там заодно и по другим вопросам просветишься.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 2)
Ответ на: комментарий от t184256

Ну а деплоить как? миграции накатывать? откатываться на прошлую версию софта? распихивать симлинки в директории новой версии софта из shared директории? остальной миллион вещей?

Мне сложно представить что кто то будет делать все это через пакетную систему дистрибутива.

TDrive ★★★★★
() автор топика

Классика: /etc/rc.local Для systemd нужно писать свой конфиг.

gh0stwizard ★★★★★
()
[Unit]
Description=Сервис
After=network.target

[Service]
Type=simple
KillMode=control-group
User=user
Group=group
Restart=always
ExecStart=/usr/bin/node /home/service/service.js
WorkingDirectory=/home/service

[Install]
WantedBy=multi-user.target
cat roles/service/tasks/main.yml
---
- name: Install systemd service
  file: src=service_name.service dest=/lib/systemd/system/service_name.service

- command: systemctl daemon-reload
Difrex ★★★★
()
Ответ на: комментарий от TDrive

Ну а деплоить как?

без баззвордов.

Мне сложно представить что кто то будет делать все это через пакетную систему дистрибутива.

А, ну так это да, так делают только адекваты без /home/service, «shared директории» и костылей. Не уподобляться же им, чесслово.

t184256 ★★★★★
()

Вместо /home есть такое специальное место /opt для поделок.

Пишешь init.d скрипт или скрипт для systemd там ничего сложного нет за день разобраться можно. Далее если лень изучать системы управления конфигурациями, то наколенке пишется некий bootstrap.sh это скрипт который создаст пользователя service, /var/run/service, /var/log/service права на них повесит. В идеале этот скрипт еще скачает ноду с нужным обвесом, поставит нехватающие пакеты, вобщем соберет среду.

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

Yur4eg ★★
()

Пользовательские юниты для systemd можно положить в:

  • $XDG_CONFIG_HOME/systemd/user/*
  • $HOME/.config/systemd/user/*
  • $XDG_DATA_HOME/systemd/user/*
  • $HOME/.local/share/systemd/user/*
AITap ★★★★★
()
Ответ на: комментарий от Yur4eg

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

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

У тебя в системе сервисы есть? Есть. Для них эта задача решена? Решена. Хорошо? Отлично. Готовые средства, гайды, best practices и т.п. есть? Полно.

Так в чем тогда вопрос?

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Для них эта задача решена? Решена.

Задача совершенно другая

Так в чем тогда вопрос?

уже не в чем.)

TDrive ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.