При настройке 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 здесь. Как упомянул @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 с моим личным доменом?
Из «Использование 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.
Попробуйте
ngrok/ngrokдля изображения вdocker-compose.yml. Кроме того, сосредоточьтесь на одной проблеме в посте.