Ниже в этом разделе приведены подробные инструкции
Для вас, в частности:
503 ошибки обычно указывают, что ваш клиент не может связаться с ботом.
Я предполагаю, что вам нужно обновить Program.cs
, чтобы он содержал следующее:
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.UseKestrel()
.UseUrls("http://0.0.0.0:" + Environment.GetEnvironmentVariable("PORT"))
.Build()
.Run();
}
Heroku предоставляет открытый порт через переменную окружения PORT
. Ваш бот просто должен слушать его.
Если это не сработает для вас, я рекомендую начать с нуля и следовать учебному пособию ниже
Получилэто работает с нуля.
Как докернизировать вашего бота и развернуть его на Heroku
Большая часть заслуг для этого должна достаться Виктору Рейесу для этой статьи , посколькуЯ в основном сделал то же самое, но с ботом.
В следующем уроке будут рассмотрены основы и предполагается, что вы немного знаете о разработке ботов. См. Статью для получения дополнительной информации о стороне докера / Heroku и наших официальных документах о бот-стороне.
1. Загрузка CoreBot .
2. Обновите appsettings.json
информацией о вашем боте и LUIS.
3. Запустите приложение локально и убедитесь, что оно работаетв Эмулятор . Это проверяет, что ваш бот работает вообще.
4. Создайте файл docker в корневой папке с вашим .csproj
. Он должен выглядеть следующим образом:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2.300-alpine3.9 as server
ENV ASPNETCORE_Environment=Production
ENV ASPNETCORE_URLS http://+:3978
WORKDIR /server
VOLUME ./wwwroot/Repository
COPY . ./
RUN dotnet publish -c Release -o publish
EXPOSE 3978/tcp
ENTRYPOINT ["dotnet","publish/CoreBot.dll"]
5. Из корневой папки с файлом .csproj
запустите docker build -t <dockerImageName>:<tag> .
6. Выполнить docker run -p 3978:3978 <dockerImageName>:<tag>
7. Запустить приложение локально и убедиться, что оно работает в Эмулятор . Это проверяет, что ваш бот работает как образ Docker.
8. Обновите ваш файл Docker так, чтобы он теперь выглядел так:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2.300-alpine3.9 as server
ENV ASPNETCORE_Environment=Production
WORKDIR /server
COPY . ./
RUN dotnet publish -c Release -o publish
ENTRYPOINT ["dotnet","publish/CoreBot.dll"]
9. Перезаписать Main()
в Program.cs
, чтобы оно содержало:
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.UseKestrel()
.UseUrls("http://0.0.0.0:" + Environment.GetEnvironmentVariable("PORT"))
.Build()
.Run();
}
10. Выполните следующее:
heroku login
heroku container:login
docker login --username=_ --password=$(heroku auth:token) registry.heroku.com
11. Создайте приложение Heroku и запомните его
12. Выполнить:
docker build -t registry.heroku.com/<appName>/web .
docker push registry.heroku.com/<appName>/web
heroku container:release web --app <appName>
13. Проверьте в эмуляторе, используя https://<appName>.herokuapp.com/api/messages
и ваши MicrosoftAppId
и MicrosoftAppPassword