1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/freeqiao-deployment

Клонировать/Скачать
README.md 8.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 09.06.2025 00:26 631057d

Java версия системы развертывания

Описание проекта

В данный момент проект находится на ранней стадии, а архитектура очень проста: nginx + tomcat/springboot для реализации многопользовательского развертывания. Поскольку используется Jenkins для автоматической сборки, автоматизация системы развертывания кажется сложной. Лично не очень силен в написании shell-скриптов, поэтому решил использовать Java для автоматизации развертывания. #### Основные идеи реализации

  1. Для nginx оставляем первый узел, а остальные узлы отключаем, генерируем конфигурационный файл nginx, перезагружаем конфигурацию.
  2. Обновляем остальные узлы, после успешного тестирования, отключаем первый узел, а остальные узлы включаем, генерируем конфигурацию nginx, перезагружаем конфигурацию.
  3. Обновляем первый узел, после успешного обновления, все узлы подключаются к nginx, генерируем конфигурацию nginx, перезагружаем конфигурацию.
  4. Что касается конфигурации, то стоит отметить следующее: nginx:head рекомендуется изменить server_name на свой домен или IP-адрес, остальное можно оставить по умолчанию, для кастомизации можно обратиться к конфигурации nginx. В данный момент проект разделен на три роли: текущая машина для развертывания (имеет пакет для развертывания), nginx-узел для переключения конфигурации, несколько tomcat/springboot (узлы для обновления). Все операции системы выполняются через команды ssh, поэтому все три роли должны быть настроены для ssh, что также облегчает удаленный запуск на нескольких серверах (хотя можно запускать команды напрямую, но я все равно это сделал). Безопасность ssh оставляю на ваше усмотрение, я использую систему в локальной сети для производства, Jenkins собирает и загружает пакеты на сервер для развертывания, затем запускает скрипт развертывания.

Системные настройки


 {  "backPath":"/root/back", #Директория для резервного копирования
   "mustReload":false, #Обязательная перезагрузка для обновления. Также можно использовать параметр -s при запуске для принудительной перезагрузки
   "type":"tomcat", #Тип развертывания tomcat/springboot, по умолчанию tomcat. Соответствуют tomcatNodes и springBootNodes
   "uploadFile":"/root/ROOT.war", #Файл для развертывания
   "nginx":{
      "sshInfo":{              #Настройки SSH для сервера nginx
           "host":"127.0.0.1",
           "passwd":"root",
           "user":"root"
        },
     "configFile":"/etc/nginx/conf.d/server.conf", #Сгенерированный файл конфигурации nginx, рекомендуется использовать имя "проект.conf"
     "head":"server {\n     listen         80;\n    server_name   www.*;\n    client_max_body_size       20m;\n    access_log  /var/log/nginx/admin_access.log ;\n    error_log  /var/log/nginx/admin_error.log  ;\n    location /{\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass backend;\n   }\n}" 
      # Настройки обратного прокси nginx можно определить для каждого проекта. Конечная строка "proxy_pass backend;" является кастомной настройкой, не изменяйте её произвольно
   },
   "sshInfo":{                #Настройки SSH для локального сервера
     "host":"ip",
     "passwd":"пароль",
     "user":"пользователь"
   },
   "tomcatNodes":[
     {
       "checkUrl":"http://127.0.0.1:9080/checkTime",   #Проверка запуска сервиса
       "homePath":"/usr/local/tomcat9080",   #Директория для развертывания узла tomcat
       "nginxProxyPass":"127.0.0.1:9080", #
       "sshInfo":{        #Настройки SSH для узла tomcat
         "host":"ip",
         "passwd":"пароль",
         "user":"пользователь"
       },
       "name":"ROOT.war"  #Имя файла для развертывания в tomcat/webapps/
     }
   ]
]```markdown
            "user": "пользователь"
           },
           "name": "server.jar",  # развертывается в tomcat/webapps/ с именем файла проекта
           "param": "--server.port=8000" # пользовательские параметры запуска spring boot, по умолчанию отсутствуют
         },
         {   # второй узел
           "checkUrl": "http://127.0.0.1:8080",
           "homePath": "/usr/local/server8080",
           "nginxProxyPass": "http://127.0.0.1:8080/checkTime",
           "sshInfo": {
             "host": "ip",
             "passwd": "пароль",
             "user": "пользователь"
           },
           "name": "ROOT.war",
           "param": "--spring.profiles.active=pro2" # пользовательские параметры запуска spring boot
         }
       ]
  }
  

Одноузловой конфигурационный пример для Tomcat, где все роли размещены локально:

<pre>
<code>
{
  "backPath":"/root/back",
  "mustReload":false,
  "type":"tomcat",
  "nginx":{
     "sshInfo":{
        "host":"127.0.0.1",
        "passwd":"root",
        "user":"root"
     },
    "configFile":"/etc/nginx/conf.d/server.conf",
    "head":"server {\n     listen         80;\n    server_name   _;\n    client_max_body_size       20m;\n    access_log  /var/log/nginx/server_access.log ;\n    error_log  /var/log/nginx/server_error.log  ;\n    location /{\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://backend;\n   }\n}"
  },
  "sshInfo":{
    "host":"127.0.0.1",
    "passwd":"root",
    "user":"root"
  },
  "tomcatNodes":[
    {
      "checkUrl":"http://127.0.0.1:8080/jzxc-rest/checkTime",
      "homePath":"/opt/tomcat-server",
      "nginxProxyPass":"127.0.0.1:8080",
      "sshInfo":{
        "host":"127.0.0.1",
        "passwd":"root",
        "user":"root"
      },
      "name":"jzxc-rest.war"
    }
  ],
  "uploadFile":"/root/jzxc-rest.war"
}
</code>
</pre>

Инструкция по использованию

Системные конфигурационные файлы, такие как config.json, следует размещать в той же директории, что и deployment-0.0.1-jar-with-dependencies.jar.
Запуск приложения: java -jar deployment-0.0.1-jar-with-dependencies.jar
Для принудительного обновления добавьте параметр -s: java -jar deployment-0.0.1-jar-with-dependencies.jar -s
Для использования в Jenkins: добавьте модуль "Publish Over SSH" в построение, а в поле "Exec command" введите:

<pre>
<code>
source /etc/profile
java -jar deployment-0.0.1-jar-with-dependencies.jar
</code>
</pre>

Рекомендации

Имена конфигурационных файлов Nginx рекомендуется называть по имени проекта, например: имя_проекта.conf, чтобы избежать случайного перезаписывания других конфигурационных файлов.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/freeqiao-deployment.git
git@api.gitlife.ru:oschina-mirror/freeqiao-deployment.git
oschina-mirror
freeqiao-deployment
freeqiao-deployment
master