Как я могу настроить ngrok на Vapor для локальной работы с собственным доменом?

При настройке ngrok в моем серверном приложении Vapor с использованием док-контейнера мне не удается создать безопасное веб-соединение с использованием личного домена, которым я владею.

Я хотел бы использовать свой файл docker-compose.yml для чтения файла ngrok.yml с настройкой, но у меня был лучший результат с использованием командной строки.

Допустим, собственный домен: api.personal_domain.com. DNS-запись CNAME от ngrok.com добавлена ​​к моему провайдеру домена.

Я запускаю эту команду, чтобы запустить «безопасное веб-соединение» на локальном хосте.

$ docker run -it -e NGROK_AUTHTOKEN=<NGROK_PERSONAL_TOKEN> ngrok/ngrok http https://127.0.0.1:8080 --domain=api.personal_domain.com

Но все же сбой происходит с 404 Not Found. Я вижу, что сервер не получает запрос.

Это конфигурация базы данных postgres, сделанная в приложении Vapor:

app.databases.use(.postgres(
  hostname: "api.personal_domain.com",
  port: 5433,
  username: "user_stackoverflow",
  password: "password_stackoverflow",
  database: "personal_domain_db_develop"
), as: .psql)

Это настройка в файле docker-compose.yml:

ngrok:
  image: ngrok:latest
  restart: unless-stopped
  command:
    - "start"
    - "--all"
    - "--config"
    - "/etc/ngrok.yml"
  volumes:
    - ./ngrok.yml:/etc/ngrok.yml
  ports:
    - 4040:

И файл ngrok.yml настроен следующим образом:

version: "2"
authtoken: <NGROK_PERSONAL_TOKEN>
tunnels:
 server:
  addr: 5433
  proto: http
  host_header: localhost
  domain: api.personal_domain.com

Оттуда я запускаю $ docker compose up в Терминале, но возникает ошибка.

[+] Running 1/1
 ✘ ngrok Error                                                                            2.1s 
Error response from daemon: pull access denied for ngrok, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Я хотел бы иметь безопасное соединение HTTPS при разработке моего сервера на локальном хосте с использованием докера.

Как правильно настроить туннель ngrok, чтобы приложение Vapor запускалось локально через безопасное веб-соединение?

Попробуйте ngrok/ngrok для изображения в docker-compose.yml. Кроме того, сосредоточьтесь на одной проблеме в посте.

John Hanley 28.04.2023 06:07
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
1
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

ПМ от ngrok здесь. Как упомянул @john-hanley, вы должны использовать image: ngrok/ngrok:latest в файле компоновки докеров. Вот ссылка на страницу документации ngrok для использования ngrok с Docker.

Кроме того, я заметил, что в вашей первой команде docker вы используете порт 4040, который является портом, который ngrok использует по умолчанию для интерфейса локальной проверки и API агента. В зависимости от вашего файла конфигурации вам нужна команда docker:

docker run --net=host -it -e NGROK_AUTHTOKEN=xyz ngrok/ngrok:latest http 5433 --domain api.personal_domain.com

Если вы работаете на компьютере Mac или Windows, команда будет выглядеть так:

docker run -it -e NGROK_AUTHTOKEN=xyz ngrok/ngrok:latest http host.docker.internal:5433 --domain api.personal_domain.com

При настройке правильного ngrok/ngrok:latest изображения работает. Но мне все еще не удается правильно запустить базу данных, и у меня есть ответ 502 Bad Gateway. Как настроить файлы docker-compose.yml и ngrok.yml, чтобы создать соединение https с моим личным доменом?

Roland Lariotte 09.05.2023 10:13
Ответ принят как подходящий

Из «Использование ngrok с Docker Compose» попробуйте использовать docker-compose.yml файл, например:

version: '3'

services:
  vapor:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user_stackoverflow
      POSTGRES_PASSWORD: password_stackoverflow
      POSTGRES_DB: personal_domain_db_develop
    ports:
      - "5432:5432"

  ngrok:
    image: ngrok/ngrok:latest
    restart: unless-stopped
    depends_on:
      - vapor
    command:
      - "start"
      - "--all"
      - "--config"
      - "/etc/ngrok.yml"
    volumes:
      - ./ngrok.yml:/etc/ngrok.yml

Если ngrok.yml настроен на использование HTTPS-соединения:

version: "2"
authtoken: <NGROK_PERSONAL_TOKEN>
tunnels:
  server:
    addr: 8080
    proto: https
    host_header: localhost
    domain: api.personal_domain.com

Обновите приложение Vapor для прослушивания на всех интерфейсах (app.http.server.configuration.hostname = "0.0.0.0"): это должно быть в файле configure.swift в каталоге Sources/App.

import Vapor
import Fluent
import FluentPostgresDriver

public func configure(_ app: Application) throws {
    app.http.server.configuration.hostname = "0.0.0.0"

    // Other configurations, like database, middleware, etc.

}

И обновите конфигурацию подключения к базе данных в приложении Vapor, чтобы использовать правильное имя хоста («db») и порт (5432):

app.databases.use(.postgres(
  hostname: "db",
  port: 5432,
  username: "user_stackoverflow",
  password: "password_stackoverflow",
  database: "personal_domain_db_develop"
), as: .psql)

https://api.personal_domain.com должен быть доступен после docker-compose up.

Другие вопросы по теме