Создаете директорию, например /var/www/my-site. Настраиваете в ней гит, клонируете туда репозиторий. Делаете git pull, npm run build. После этого ваш сайт доступен на 3000 порту по умолчанию, но недоступен "извне".
Теперь ставите nginx. Настраиваете конфиг для вашего домена, например mysite.com, в качестве root указываете /var/www/my-site/statiс, а запросы проксируете на 3000 порт. Примерно так:
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000;
}
Все готово. Теперь при любых изменениях делаете пуш, а на сервере git pull и npm run build.
Это самый простой и банальный вариант. Дальше настраиваете всякие веб-хуки для автоматической сборки, тестирования и тп, если нужно. Или прямо так и работаете.
UPD: Пушить изменения нужно без папки dist, node_modules и тп. Ну оно вроде по умолчанию лежит в .gitignore. То есть пушите только исходники, затем на сервере запускаете
npm ci (если необходимо) и на сервере генерируете папку dist.