Hostim Docs

Связь сервисов и подключение к базе данных

Все сервисы и базы данных одного проекта находятся в общей частной сети. Внутри неё они обращаются друг к другу по внутренним адресам — быстро и без выхода в интернет. Снаружи и из других проектов эти адреса недоступны.

Сервис → сервис

Сервис доступен другим сервисам того же проекта по адресу:

http://<имя-сервиса>:<порт>
  • <имя-сервиса> — имя сервиса, приведённое к нижнему регистру, где пробелы и спецсимволы заменены на дефис. Например, сервис Orders API доступен как orders-api.
  • <порт> — порт, который этот сервис слушает (тот, что задан при его создании).

Пример: сервис-фронтенд обращается к сервису-API, созданному с портом 3000 и именем api:

http://api:3000

Внутри сети используется http, а не https, и порт сервиса напрямую. Шифрование TLS применяется только на внешней границе (публичный домен) — внутри частной сети оно не нужно.

Сервис → база данных

Когда вы создаёте базу данных, платформа выдаёт готовую строку подключения (её видно на странице базы данных). Она уже содержит внутренний адрес, порт, имя пользователя, пароль и имя базы — например:

postgres://user:password@<внутренний-хост>:5432/dbname

Ничего собирать вручную не нужно — скопируйте строку целиком. Использовать её так:

  1. Добавьте строку в переменную окружения сервиса — например, DATABASE_URL — и пометьте как секрет.
  2. В коде читайте эту переменную и передавайте её стандартному клиенту базы данных.
# Python
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])
// Node.js
const { Pool } = require("pg");
const pool = new Pool({ connectionString: process.env.DATABASE_URL });

Так параметры подключения не попадают в код и репозиторий, а при пересоздании базы достаточно обновить одну переменную.

Изоляция между проектами

Внутренние адреса работают только внутри своего проекта. Сервис одного проекта не может обратиться к сервису или базе данных другого — между проектами нет сетевого доступа. Практическое следствие:

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

Разные проекты подходят для независимых приложений; связанные между собой сервисы и их базы данных держите вместе.

Частые ошибки

СимптомПричинаРешение
Сервис не находит другой сервисИспользован публичный домен или неверный портОбращайтесь по http://<имя-сервиса>:<порт> с портом целевого сервиса
Не удаётся подключиться к базе из другого проектаМежду проектами нет сетиПеренесите сервис в тот же проект, где база данных
Параметры подключения «протухли» после пересоздания базыСтрока захардкожена в кодеХраните строку в переменной окружения и обновляйте её там

Дальше