1. на сервер нужно доставить исходники проекта на Go, если без CI/CD - то с помощью git, или, ладно, FTP
2. делаем тот же go build - получаем бинарник, который можно запустить
в своих проектах (ос виндовс, на серверах линукс) делаю примерно так:
есть build.sh - компилирует проект
go build -o my-app ./
есть service.sh - запускает полученный бинарник
ACTION=$1
SERVICE="./my-app"
SERVICE_PID=$(ps -aux | awk '$11=="'$SERVICE'" {print $2}')
if [ -z $ACTION ]
then
echo "Command not found"
exit;
fi
if ! [ -x $SERVICE ]
then
echo "Service execute permission not granted"
exit;
fi
if [ $ACTION = 'start' ]
then
if ! [ -z $SERVICE_PID ]
then
echo "Service PID:{$SERVICE_PID}"
else
nohup $SERVICE > log/$(date +%F-%H-%M-%S).log 2>&1 </dev/null &
fi
elif [ $ACTION = 'restart' ]
then
if ! [ -z $SERVICE_PID ]
then
kill -s KILL $SERVICE_PID
fi
nohup $SERVICE > log/$(date +%F-%H-%M-%S).log 2>&1 </dev/null &
elif [ $ACTION == 'stop' ]
then
if ! [ -z $SERVICE_PID ]
then
kill -s KILL $SERVICE_PID
else
echo "Service PID not found"
fi
fi
build.sh, service.sh, my-app - должны иметь право выполняться: chmod +x *
service.sh запускает фоном, то что выводит в stdout пишу в ./log/ - потому папка ./log должна быть создана с соотв.правами на запись
порядок действий:
./build.sh
./service.sh restart # start - чистый запуск, stop - убивает процесс
как-то так
кстати можно и nginx использовать, но там конфиг.прописывать на соотв.порт или unix-socket .. много разных способов.