-
Notifications
You must be signed in to change notification settings - Fork 0
deploy
gretmn102 edited this page Dec 30, 2023
·
3 revisions
Эта инструкция предполагает, что:
- запуск происходит на системе Ubuntu (на других просто-напросто не проверялось)
- проект компилируется GitHub'ом через Actions и оставляет за собой единственный артефакт, неважно с каким именем
/
├─ usr/lib/systemd/system
│ └─ $proj_name.service
└─ home/$user_name
├─ .scripts
│ └─ $proj_app.sh
└─ $proj_path
├─ .env
├─ deploy
│ ├─ .env # скопированный .env
│ └─ ...
├─ nohup.err
└─ nohup.out
Программа работает через сервис, состояние которого можно проверить так:
systemctl status $proj_name.service
Лог программы пишется в $proj_path/nohup.out
и /$proj_path/nohup.err
, которые можно глянуть локально:
tail -n 100 ~/$proj_path/nohup.out
tail -n 100 ~/$proj_path/nohup.err
Либо достучаться через scp
:
scp $user_name@example.com:/home/$user_name/$proj_path/deploy/nohup.out program.log
-
Удаленно подключиться к хостингу через
ssh
-
Установить пакеты
jq
иlibarchive
:sudo apt install jq sudo apt install libarchive-tools
-
заполнить и установить переменные окружения для текущей сессии:
user_name=$(whoami) proj_path=agent-discord-bot # путь к папке проекта proj_app=agent-discord-bot # имя исполняемого файла проекта github_proj_name=agent-discord-bot # название проекта на GitHub'е (`https://api.github.com/repos/gretmn102/$github_proj_name/actions/artifacts`) proj_name=agent-discord-bot # название запускающего скрипта (`~/.scripts/$proj_name.sh`) и скрипт для сервиса (`/usr/lib/systemd/system/$proj_name.service`) github_workflow_token=$TODO # токен GitHub'а с правами чтения артефактов
-
создать папку проекта
mkdir $proj_path cd $proj_path
-
Создать папку
deploy
:mkdir deploy cd deploy
-
скачать артефакт и распаковать:
curl \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/gretmn102/$github_proj_name/actions/artifacts | \ jq -r '.artifacts[0].archive_download_url' | \ curl \ -H "Accept: application/vnd.github+json" \ -H "Authorization: token $github_workflow_token" \ -H "X-GitHub-Api-Version: 2022-11-28" \ -L \ --url "$(</dev/stdin)" |\ bsdtar -xf-
-
разрешить запуска исполняемого файла для текущего пользователя:
chmod u+x $proj_app
-
cd ..
-
создать и заполнить
.env
:AHTUNG: заполни
BotToken
иDbConnection
!cat > .env << EOF DiscordCommandBotToken=todo AblyToken=todo DataBaseName=todo DbConnection=todo EOF
-
скопировать
.env
в папкуdeploy
:cp .env deploy/.env
-
создать запускающий скрипт для сервиса:
mkdir -p ~/.scripts cat > ~/.scripts/$proj_name.sh << EOF #!/usr/bin/env bash cd /home/$user_name/$proj_path/deploy ./$proj_app >>../nohup.out 2>>../nohup.err EOF
-
разрешить запуск скрипта для текущего пользователя
chmod u+x ~/.scripts/$proj_name.sh
-
создать конфиг сервиса:
sudo bash -c "cat > /usr/lib/systemd/system/$proj_name.service << EOF [Unit] Description=Run $proj_name After=default.target [Service] ExecStart=/usr/bin/bash /home/$user_name/.scripts/$proj_name.sh Restart=on-failure RestartSec=1s Type=simple [Install] WantedBy=default.target EOF"
-
запустить сервис
systemctl daemon-reload systemctl enable $proj_name.service systemctl start $proj_name.service
mkdir -p ~/$proj_path/temp_deploy
cd ~/$proj_path/temp_deploy
curl \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/gretmn102/$github_proj_name/actions/artifacts | \
jq -r '.artifacts[0].archive_download_url' | \
curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token $github_workflow_token" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-L \
--url "$(</dev/stdin)" |\
bsdtar -xf-
systemctl stop $proj_name.service
# cp -r ~/$proj_path/deploy ~/$proj_path/stable_deploy
rm -r -f ~/$proj_path/deploy
mkdir -p ~/$proj_path/deploy
cp -r ~/$proj_path/temp_deploy/* ~/$proj_path/deploy
rm -r ~/$proj_path/temp_deploy
cp ~/$proj_path/.env ~/$proj_path/deploy/.env
chmod u+x ~/$proj_path/deploy/$proj_name
systemctl start $proj_name.service