@savva09
Начинающий .NET-ер

Как настроить сервер для отладки вебхуков (webhooks) на локальной машине??

Нужно опубликовать апи для отладки вк callback бота. Но все инструкции как это сделать делают это через iis в localhost. Но мне нужно чтобы vk смог обращаться к моему серверу с коллбеком
  • Вопрос задан
  • 308 просмотров
Решения вопроса 1
@savva09 Автор вопроса
Начинающий .NET-ер
Решение вопроса - использование ngrok. Я запихнул проект в docker, потом запустил ngrok с их статическим ip. Все работает, для разработки вебхука этого предостаточно.

Вся проблема была в NAT , ngork решает её обходом. Вообще при наличии белого ip простого nginx будет предостаточно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
1. Сбилдить .NET приложение в докере.
2. Развернуть докер контейнер на сервере.
3. Развернуть nginx (тоже можно в контейнере) на сервере.
4. Настроить nginx, который будет проксировать трафик в п2:
4.1. Запретить все.
4.2. Разрешить :80 и :443 порты.
4.3. Пробросить с п4.2 на внешний порт контейнера п2.
4.4. Настроить SSL Let's Encrypt (при необходимости).

По сути, можно взять любое руководство настройки докера и nginx, без привязки к .NET.

UPD на основе данных из комментариев, конфиги будут выглядеть примерно так, dockerfile (поправить под свое приложение):
# Образ asp.net.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# Компилируем приложение из /src.
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src

# Копируем файл проекта и восстанавливаем зависимости.
COPY ["Project.csproj", "."]
RUN dotnet restore

# Копируем оставшиеся файлы и компилируем приложение.
COPY . .
RUN dotnet build -c Release -o /app/build

# Публикуем приложение.
FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

# Создание итогового образа.
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.dll"]

nginx (поправить под свое приложение):
# http.
server {
    listen 80;
    listen [::]:80;
    # Домены для обслуживания.
    server_name domain.ru www.domain.ru;

    # 301 редирект http->https.
    return 301 https://$host$request_uri;
}

# https.
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    # Домены для обслуживания.
    server_name domain.ru www.domain.ru;

    # Пути до letsencrypt сертификатов.
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

    location / {
        # Адрес, по которому доступно приложение на локалке сервера (localhost не указывать, а указывать имя контейнера (project в моем случае)).
        proxy_pass http://project:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

P.S. рекомендую освоить Docker Compose, чтобы было меньше возьни с разворачиванием и общением между контейнерами.
Ответ написан
yarosroman
@yarosroman
C# the best
1. У провайдера покупаете статический IP и будете видеть свой сервер в инете.

2. Покупаешь VDS и там поднимаешь сервер
https://code-maze.com/deploy-aspnetcore-linux-nginx/
https://www.f5.com/company/blog/nginx/tutorial-pro...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы