MAATRIX / Блог / VPS для Go-приложений: от сборки до systemd и nginx

VPS для Go-приложений: от сборки до systemd и nginx

Блог MAATRIX · 2026-07-07

Go компилируется в один статический бинарник без рантайма — это делает деплой на VPS предельно простым. Разберём весь путь: сборка, запуск под systemd, nginx как reverse proxy и TLS.

Почему Go идеально ложится на VPS

['Главное преимущество Go — статическая компиляция. Готовый бинарник не тянет за собой интерпретатор, виртуальную машину или пакеты зависимостей на сервере. Вы собираете один файл и просто копируете его на VPS.', 'Это снимает целый класс проблем: не нужно ставить рантайм нужной версии, конфликтов библиотек не возникает, а потребление памяти обычно измеряется десятками мегабайт. Даже на младшем тарифе Go-сервис чувствует себя свободно.', '
  • Один бинарник — нет зависимостей на хосте.
  • Низкое потребление RAM — хватает 1 ГБ на большинство API.
  • Быстрый старт — процесс поднимается за миллисекунды.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Go

Подготовка сервера

['Обновляем систему и ставим базовый набор. Go на самом сервере нужен, только если вы собираете прямо на VPS; чаще бинарник кросс-компилируют локально.', "
sudo apt update && sudo apt upgrade -y\nsudo apt install -y nginx git ufw\nsudo ufw allow OpenSSH\nsudo ufw allow 'Nginx Full'\nsudo ufw enable
", 'Заведём отдельного пользователя для приложения — не запускайте сервис от root.', '
sudo useradd -r -s /usr/sbin/nologin appuser\nsudo mkdir -p /opt/goapp\nsudo chown appuser:appuser /opt/goapp
']

Сборка бинарника

['Собирать удобно локально с отключённым CGO — так бинарник получается полностью статическим и переносимым на любой Linux-хост.', '
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o goapp ./cmd/server
', 'Флаги -s -w убирают отладочную информацию и уменьшают размер. Копируем результат на сервер:', "
scp goapp appuser@SERVER_IP:/opt/goapp/goapp\nssh appuser@SERVER_IP 'chmod +x /opt/goapp/goapp'
"]

Запуск под systemd

['systemd сам перезапустит упавший процесс и поднимет сервис после ребута. Создаём unit-файл:', '
sudo nano /etc/systemd/system/goapp.service
', '
[Unit]\nDescription=Go application\nAfter=network.target\n\n[Service]\nUser=appuser\nWorkingDirectory=/opt/goapp\nExecStart=/opt/goapp/goapp\nRestart=always\nRestartSec=3\nEnvironment=PORT=8080\n\n[Install]\nWantedBy=multi-user.target
', '
sudo systemctl daemon-reload\nsudo systemctl enable --now goapp\nsudo systemctl status goapp
', 'Логи смотрим через journalctl: journalctl -u goapp -f. Параметр Restart=always гарантирует, что процесс поднимется после падения, а RestartSec=3 задаёт паузу перед перезапуском, чтобы не уйти в бесконечный цикл при системной ошибке.', 'Для передачи секретов в приложение удобно использовать отдельный файл окружения. systemd подхватит его директивой EnvironmentFile, а сам файл держите с правами 600, чтобы переменные не читались посторонними.', "
echo 'DATABASE_URL=postgres://localhost/app' | sudo tee /opt/goapp/goapp.env\nsudo chmod 600 /opt/goapp/goapp.env\nsudo chown appuser:appuser /opt/goapp/goapp.env\n# в unit: EnvironmentFile=/opt/goapp/goapp.env
"]

nginx как reverse proxy и TLS

['Приложение слушает 127.0.0.1:8080, наружу его проксирует nginx. Это даёт TLS, отдачу статики и защиту порта приложения.', '
server {\n    listen 80;\n    server_name example.com;\n    location / {\n        proxy_pass http://127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}
', '
sudo ln -s /etc/nginx/sites-available/goapp /etc/nginx/sites-enabled/\nsudo nginx -t && sudo systemctl reload nginx\nsudo apt install -y certbot python3-certbot-nginx\nsudo certbot --nginx -d example.com
']

Где брать сервер и частые ошибки

['Go отлично раскрывается на процессорах с высокой производительностью на ядро. На тарифах MAATRIX это AMD EPYC + NVMe — компиляция и обработка запросов идут заметно быстрее, а локации UK и США дают низкий пинг для зарубежной аудитории. Оплата картой РФ, СБП, криптой или токеном MAAT — удобно, когда иностранные провайдеры карты не принимают.', '
  • Забыли CGO_ENABLED=0 — бинарник требует glibc нужной версии и падает.
  • Сервис от root — лишний риск; используйте отдельного пользователя.
  • Нет Restart=always — после падения приложение не поднимется.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для Go

Частые вопросы

Нужно ли ставить Go на сам VPS?

Нет, если вы собираете бинарник локально или в CI. На сервер достаточно скопировать готовый статический файл.

Сколько RAM нужно Go-приложению?

Большинству API и веб-сервисов хватает 1 ГБ. Go экономно расходует память, тяжёлые нагрузки требуют больше под кэши и соединения.

Как обновлять приложение без простоя?

Скопируйте новый бинарник, затем выполните systemctl restart goapp. Для zero-downtime используйте сокет-активацию или балансировку двух инстансов.