Абсолютно так же как и остальными Node.JS, Go и другими языками в современном мире пакуется в контейнер и деплоится в прод. Есть несколько готовых вариантов, но все они будут придерживаться docker и docker compose:
-
ручное: Клонируем репозиторий, билдим на этом сервере
docker compose build && docker compose up -d
.
-
ручное: Локально билдим докер образ и пушим в регистр докера, на самой машине так же
docker compose pull && docker compose up -d
но уже только с получением образа из регистра докера в docker compose.
-
полу-автоматически: Пишем .sh скрипт который на git хуки или руками будет делать действия что и в одном из предыдущих вариантов, но без Workflow.
-
автоматически: Используем GitLab/Github Workflow или любой другой, на каждый релиз/коммит/PR запускаем Workflow с билдом, дальше пушит полученный контейнер в регистр, затем последним этапом будет подключение по SSH к серверу и применения условного
cd /path/to && docker compose pull && docker compose up -d
Я привёл самые простые варианты. Ещё есть варианты с k8s, ansible и другими вещами, но это не ваш случай судя по всему.