Перейти к содержимому

Гайд по деплою · Go

Разверните Go за считанные минуты.

Подключите репозиторий, Railpack соберёт его, сервис получит домен с TLS. Базы данных из шаблонов, потребление списывается поминутно с предоплаченного баланса, всё на нодах в ЕС.

terminal
$ npm i -g skiffly && skiffly login
$ cd my-go-service && skiffly init
$ skiffly up
$ skiffly domain

Что распознаёт Railpack

Railpack изучает репозиторий и подбирает сборку для Go; большинству проектов настройка не нужна. Dockerfile в репозитории всегда имеет приоритет.

  • go.mod
  • main package (cmd/… or the root)
  • go.sum
Сборщик
Railpack (по умолчанию)
Команда запуска
./main # the compiled binary

Определяется Railpack; переопределите её в Настройки → Деплой → Команда запуска.

Порт и $PORT

Skiffly прокидывает PORT в каждый сервис и направляет на него публичный домен. Укажите порт в настройках сервиса, если приложение слушает фиксированный; по умолчанию для Go это 8080, а если ничего не задано — 8080.

Слушать $PORT
http.ListenAndServe(":" + os.Getenv("PORT"), nil)
PORT
8080
SKIFFLY_PUBLIC_DOMAIN
<service>.skiffly.cloud

Из терминала

Установите CLI, привяжите директорию, разверните. skiffly up собирает запушенный HEAD текущей ветки и стримит логи сборки; skiffly domain выдаёт сервису адрес *.skiffly.cloud.

Или опишите один раз

.skiffly/skiffly.ts объявляет сервис, его базы данных и ссылки между ними. skiffly config plan показывает diff, skiffly config apply применяет его. API повторяет railway/iac.

Config as code
.skiffly/skiffly.ts
// .skiffly/skiffly.ts
import { defineSkiffly, github, postgres, project, service } from "@skiffly/config";

export default defineSkiffly(() => {
  const db = postgres("db");

  const web = service("api", {
    source: github("acme/api"),
    port: 8080,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
    },
  });

  return project("api", { resources: [web, db] });
});

Go на Skiffly: частые вопросы

Как задать переменные окружения для Go?
На вкладке «Переменные» сервиса, командой skiffly variables set KEY=value или в .skiffly/skiffly.ts. Ссылайтесь на другие сервисы через ${{Postgres.DATABASE_URL}}, а на общие значения окружения — через ${{shared.NAME}}. Секреты шифруются при хранении.
Можно ли изменить команду сборки или запуска?
Да. Настройки → Сборка → Команда сборки переопределяет шаг сборки Railpack; Настройки → Деплой → Команда запуска заменяет команду запуска. Для монорепозитория задаётся корневая директория, чтобы сборка шла внутри неё.
Как добавить Postgres или Redis?
Разверните шаблон в то же окружение. Он появится с томом, сгенерированными учётными данными и URL подключения, на который вы ссылаетесь из сервиса Go. Подключайтесь с ноутбука через skiffly connect postgres.
Будут ли preview-окружения для каждого pull request?
Включите PR-превью в проекте: каждый pull request получит собственную копию окружения на своём домене, которая удаляется, когда PR слит или закрыт. Форки игнорируются.
Сколько стоит небольшое приложение на Go?
Сервис 512 МБ / 0.25 vCPU обходится примерно в $7.75 в месяц, списание поминутно с баланса. Добавьте Postgres с 512 МБ / 0.25 vCPU и томом 10 ГБ примерно за $9 сверху. Бесплатный тариф запускает один сервис 512 МБ с App Sleeping без оплаты.
Может ли сервис Go засыпать при простое?
Включите App Sleeping: примерно через 10 минут без запросов сервис масштабируется до нуля и просыпается на следующем запросе (2–10 с). CPU и память во сне не тарифицируются; том — тарифицируется.

Разверните своё приложение на Go сегодня

Бесплатный тариф без карты. Hobby от $5, из них $5 потребления включено.