Развернуть Go веб-проект на Windows Server 2008 - PullRequest
0 голосов
/ 06 июня 2019

Мой проект: go - 1.12.5; джин-gonic; вю-кли - 3.8.2.

На Windows Server 2008 зайдите под локальной учетной записью, запустите main.exe - работает хорошо. Но при выходе из моей учетной записи все локальные программы учетной записи закрываются, включая мой go-сервер.

Первым делом я попытался настроить IIS для своего GO. Ничего хорошего из этого не вышло.

Затем я попытался запустить main.exe из учетной записи SYSTEM psexec -s c: \ rafd \ main.exe . При выходе из системы процесс не закрывается. Но интерфейс находится в моей учетной записи, и SYSTEM не видит локальные файлы (js, html, css) моего проекта

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

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Два способа приблизиться к нему.

  1. Перейти на ISS (или другой веб-сервер).

    Если вы выберете эту опцию, у вас есть следующие варианты:

    • Оставьте код своего проекта как есть, но

      • Убедитесь, что ему можно сообщить, на каком сокете прослушивать соединения - так, чтобы вы могли сказать, что он слушаетскажем, на localhost:8080.Например, научите вашу программу принимать параметр командной строки для этого - например, -listen или любой другой.
      • Настройте IIS таким образом, чтобы он обратные прокси-серверы входящие запросы HTTPна определенном виртуальном хосте и / или префиксе пути к работающему экземпляру вашего сервера.Вам нужно будет настроить IIS - сокет, к которому он передает запросы, - и способ, которым IIS запускает вашу программу, согласуется друг с другом.
    • Переработайте код для использованияПротокол FastCGI вместо.Это в основном сводится к использованию net/fastcgi вместо net/http.

      Плюс в том, что IIS (даже его устаревшие версии) поддерживает FastCGI из коробки.Недостатком является то, что FastCGI считается немного медленнее, чем обычный HTTP в Go, и что вы потеряете возможность запускать вашу программу в автономном режиме.

  2. Превратите вашу программу в надлежащий сервис Windows ™ или «оберните» ее каким-нибудь вспомогательным инструментом, чтобы сделать его сервисом Windows ™.

    Первый вариант чище, поскольку он позволяет вашей программе быть в курсе запросов управления, которые подсистема управления службами Windows будет отправлять вам.Вы также можете легко превратить свою программу в упакованный продукт, если / когда это необходимо.Вы можете начать с golang.org/x/sys/windows/svc.

    Последнее может быть немного проще, но YMMV.Если вы хотите изучить этот способ, ищите такие инструменты, как srvany, nssm, winsv и т. Д.

    Обратите внимание, что из них только srvany предоставлены Microsoft® и AFAIK, он отсутствует со времен Win7, W2k8, поэтому ваша лучшая встроенная ставка может быть связана с sc.exe.

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

    Для начала вам нужно убедиться, что к вашим ресурсам пытаются получить доступ не из «текущего каталога процесса», который может бытьв основном случайный, когда он запускается как служба, но либо из того места, о котором процесс был явно указан при запуске (с помощью параметра командной строки или чего-либо еще), либо как-то выяснил, используя обоснованное предположение (и это сложная тема сама по себе).

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

    Обратите внимание, что в любом случае правильная обработка ошибок и их отчетность имеет первостепенное значение: когда ваша программа запускается неинтерактивно, вы хотите знать, когда что-тоидет не так: сокет не удалось открыть или списокВключено, активы не найдены, доступ запрещен при попытке открыть файл ресурса и т. д. - во всех этих случаях вам необходимо: 1) обработать ошибку и 2) сообщить о ней так, как вы можете ее устранить.Для неинтерактивной программы Windows ™ лучшим способом может быть использование журнала событий (скажем, через golang.org/x/sys/windows/svc/eventlog).

0 голосов
/ 10 июня 2019

Простейшими решениями было бы использование windows schedular.

Запустите exe-файл при входе в систему с самой высокой привилегией в фоновом режиме.Поэтому всякий раз, когда ваша система будет входить в систему, она будет запускать ваш exe и делать runnign в фоновом режиме.

Вы можете сослаться на этот ответ, Как настроить запланированное задание Windows для запуска в фоновом режиме?

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