Хостинг: VPS
Виртуальный частный сервер, чаще всего называемый VPS, представляет собой виртуальную машину, работающую в облаке, где вы, разработчик, имеете полный контроль над системой.
Аренда сервера
Чтобы иметь возможность следовать этому руководству, вам сначала нужно арендовать VPS. В этом разделе мы расскажем, как это сделать. Если у вас уже есть VPS для работы, переходите к следующему разделу.
В этом руководстве мы будем использовать услуги Hostinger.
Вы можете выбрать провайдера по своему усмотрению. Все провайдеры предоставляют одинаковые услуги, поэтому у вас не возникнет проблем с технической частью этой статьи. Вы можете воспринимать эту часть как обзор того, как работает аренда сервера. Если вы новичок, вы можете использовать это руководство для аренды своего первого сервера!
Аналог сервера
Если вы не можете или не хотите арендовать сервер, но при этом хотите поиграть с запуском бота на VPS, вы можете выполнить это руководство на виртуальной машине. Для этого воспользуйтесь таким приложением, как Virtual
Перейдите на страницу VPS
Нажмите кнопку “Add to cart”. Вы будете автоматически перенаправлены на страницу оформления заказа, где также сразу зарегистрируетесь на Hostinger.
Измените срок аренды!
Типичный срок аренды — 1-2 года (маркетинговая уловка), и это стоит больших денег. Скорее всего, вам это не нужно, поэтому для начала можно арендовать сервер на месяц, что гораздо дешевле.
В любом случае, Hostinger предоставляет 30-дневную гарантию возврата денег.
После оплаты вы сможете настроить свой сервер:
- Местоположение. Мы рекомендуем вам выбрать место, ближайшее к Амстердаму. Главный сервер Bot API расположен в Амстердаме. Если вы используете собственный сервер Bot API, выберите вместо Амстердама, ближайшую к нему локацию.
- Тип сервера. Выберите вариант “Clean OS.”
- Операционная система. Мы будем использовать Ubuntu 22.04. Если вы выберете другую систему, некоторые шаги могут отличаться, поэтому будьте внимательны.
- Имя сервера. Выберите любое имя, которое вам нравится.
- Пароль рута. Придумайте надежный пароль и храните его в надежном месте!
- SSH-ключ. Пропустите этот шаг. Мы настроим SSH-ключи позже.
После создания сервера вы можете подключиться к нему с помощью SSH:
SSH (Secure Shell) — это сетевой протокол, который можно использовать для удаленного управления компьютером.
ssh root@<ip-адрес>
Замените <ip
на IP адрес вашего сервера, который вы можете найти на странице управления сервером.
Настройка SSH
Запоминать, какой IP адрес и чье имя необходимо для подключения к серверу, может быть сложно и утомительно. Чтобы избавиться от этих рутинных действий и улучшить работу с сервером, вы можете настроить SSH, создав на своем компьютере файл ~
(https://
Отдельный пользователь для каждого приложения
В этом руководстве все действия с сервером будут выполняться от имени пользователя root. Это сделано специально, чтобы упростить данное руководство. Однако в реальности root пользователь должен отвечать только за общие службы (веб-сервер, база данных и т. д.), а приложения должны запускаться отдельными пользователями, не являющимися root пользователями. Такой подход обеспечивает безопасность конфиденциальных данных и предотвращает взлом всей системы. В то же время он накладывает некоторые неудобства. Описание всех этих моментов излишне увеличивает сложность статьи, чего мы стараемся избегать.
Запуск бота
Теперь в нашем распоряжении есть сервер, на котором мы можем запустить бота, чтобы он работал круглосуточно.
Чтобы упростить начало статьи, мы пропустили шаг автоматической доставки кода на сервер каждый раз после размещения вашего кода, но он описан ниже.
Пока же вы можете скопировать локальные файлы на удаленный сервер с помощью следующей команды. Обратите внимание, что -r
копирует рекурсивно, поэтому вам нужно указать только корневой каталог вашего проекта:
scp -r <путь-до-локальной-директории-с-ботом> root@<ip-адрес>:<путь-до-удалённой-директории>
Замените <путь
на путь к директории проекта на вашем локальном диске, <ip
на IP адрес вашего сервера, а <путь
на путь к директории, где на сервере должен храниться исходный код бота.
Как уже говорилось выше, теперь вы можете открыть удаленный терминал на вашем VPS, запустив сессию SSH.
ssh root@<ip-адрес>
Обратите внимание, как изменилась командная строка. Это означает, что вы теперь подключены к удаленной машине. Каждая введенная вами команда будет выполняться на вашем VPS. Попробуйте запустить ls
, чтобы убедиться, что вы успешно скопировали исходные файлы.
В оставшейся части этой страницы предполагается, что вы можете подключиться к своему VPS. Все следующие команды должны быть запущены в сессии SSH.
Не забудьте установить среду выполнения!
Чтобы запустить бота, вам нужно установить на сервер Node.js или Deno, в зависимости от среды выполнения, в которой будет работать бот. Это выходит за рамки данной статьи, поэтому вам придется сделать это самостоятельно. Вероятно, вы уже делали это при начале работы, поэтому вам должны быть знакомы эти шаги 😉
Ниже приведены два способа поддержания бесперебойной работы бота: использование systemd или PM2.
systemd
systemd — это мощный менеджер служб, который предустановлен во многих дистрибутивах Linux, в основном на базе Debian, таких как Ubuntu.
Создание команды для запуска
Получите абсолютный путь к вашей среде выполнения:
shwhich deno
1shwhich node
1У вас должен быть абсолютный путь к директории вашего бота.
Ваша команда запуска должна выглядеть следующим образом:
sh<путь_к_среде_выполнения> <параметры> <абсолютный_путь_к_фалу_запуска> # Путь к директории бота: /home/user/bot1/ # Deno пример: # /home/user/.deno/bin/deno --allow-all run mod.ts # Node.js пример: # /home/user/.nvm/versions/node/v16.9.1/bin/node index.js
1
2
3
4
5
6
7
8
9
Создание службы
Перейдите в каталог служб:
shcd /etc/systemd/system
1Откройте новый служебный файл в редакторе:
shnano <app-name>.service
1Замените
<app
на любой идентификатор.-name> <app
будет именем вашего сервиса.-name> .service Добавьте следующее содержание:
text[Unit] After=network.target [Service] WorkingDirectory=<путь_до_директории_бота> ExecStart=<команда_для_запуска> Restart=on-failure [Install] WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10Замените
<путь
на абсолютный путь к директории вашего бота, а_до _директории _бота> <команда
на команду, которую вы получили выше._для _запуска> Вот краткое объяснение конфигурации сервиса:
After
— указывает, что приложение должно быть запущено после загрузки модуля Internet.= network .target Working
— задает текущий рабочий каталог процесса. Это позволяет использовать относительные ресурсы, такие как файлDirectory = <путь _до _директории _бота> .env
, который содержит все необходимые переменные окружения.Exec
— задает команду запуска.Start = <команда _для _запуска> Restart
— указывает, что приложение должно перезапускаться после сбоя.= on -failure Wanted
— определяет состояние системы, в котором должна быть запущена служба.By = multi -user .target multi
— типичное значение для серверов.-user .target
Для получения дополнительной информации о файлах системы читайте this.
Перезагружайте systemd при каждом изменении службы:
shsystemctl daemon-reload
1
Управление службой
# Замените `<название-службы>` на имя файла созданной вами службы.
# Чтобы запустить службу
systemctl start <название-службы>
# Чтобы просмотреть служебные логи
journalctl -u <название-службы>
# Чтобы перезапустить службу
systemctl restart <название-службы>
# Чтобы остановить службу
systemctl stop <название-службы>
# Чтобы включить запуск службы при загрузке сервера
systemctl enable <название-службы>
# Чтобы отключить запуск службы при загрузке сервера
systemctl disable <название-службы>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Запуск службы должен запустить вашего бота!
PM2
PM2 — это daemon-менеджер процессов для Node.js, который поможет вам управлять и поддерживать работу вашего приложения в режиме 24/7.
PM2 разработан специально для управления приложениями, написанными на Node.js. Однако его можно использовать и для управления приложениями, написанными на других языках или средах исполнения.
Установка
npm install -g pm2
yarn global add pm2
pnpm add -g pm2
Создание приложения
PM2 предлагает два способа создания приложения:
- Использовать интерфейс командной строки.
- Использовать конфигурационный файл.
Первый способ удобен при знакомстве с PM2. Однако при развертывании следует использовать второй метод, что мы и сделали в нашем случае.
Создайте на сервере в директории, где хранится сборка бота, файл ecosystem
со следующим содержанием:
module.exports = {
apps: [
{
name: "<название-приложения>",
script: "<команда-для-запуска>",
},
],
};
2
3
4
5
6
7
8
Замените <название
на любой идентификатор, а <команда
— на команду для запуска бота.
Управление приложением
Ниже перечислены команды, которые можно использовать для управления приложением.
# Если файл `ecosystem.config.js` находится в текущем каталоге,
# вы можете ничего не указывать для запуска приложения.
# Если приложение уже запущено, эта команда перезапустит его.
pm2 start
# Все следующие команды требуют указания имени приложения
# или файл `ecosystem.config.js`.
# Чтобы применить действие ко всем приложениям, укажите `all`.
# Чтобы перезапустить приложение
pm2 restart <app-name>
# Чтобы перезагрузить приложение
pm2 reload <app-name>
# Чтобы остановить приложение
pm2 stop <app-name>
# Чтобы удалить приложение
pm2 delete <app-name>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сохранение операций приложения
Если сервер перезагрузится, ваш бот не возобновит работу. Чтобы бот возобновил работу, необходимо подготовить PM2 к этому.
На сервере в терминале выполните следующую команду:
pm2 startup
Вам будет предложена команда, которую нужно выполнить, чтобы PM2 автоматически запускался после перезагрузки сервера.
Затем выполните еще одну команду:
pm2 save
Эта команда сохранит список текущих приложений, чтобы их можно было запустить после перезагрузки сервера.
Если вы создали новое приложение и хотите сохранить и его, просто запустите pm2 save
снова.
Запуск бота на вебхуках
Чтобы запустить бота на вебхуках, вам нужно использовать веб-фреймворк и НЕ вызывать bot
.
Вот пример кода для запуска бота по вебхукам, который нужно добавить в основной файл бота:
import { webhookCallback } from "grammy";
import { fastify } from "fastify";
const server = fastify();
server.post(`/${bot.token}`, webhookCallback(bot, "fastify"));
server.listen();
2
3
4
5
6
7
8
import { webhookCallback } from "https://deno.land/x/grammy@v1.33.0/mod.ts";
const handleUpdate = webhookCallback(bot, "std/http");
Deno.serve(async (req) => {
if (req.method === "POST") {
const url = new URL(req.url);
if (url.pathname.slice(1) === bot.token) {
try {
return await handleUpdate(req);
} catch (err) {
console.error(err);
}
}
}
return new Response();
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Аренда домена
Чтобы подключить бота, работающего на вебхуках, к внешнему миру, вам нужно приобрести домен. Мы будем объяснять это на примере Hostinger, но есть и множество других сервисов, и все они работают аналогично.
Перейдите на страницу поиска доменного имени. В поле ввода текста введите доменное имя вида <имя>
. Например, example
.
Если нужный домен свободен, нажмите кнопку Add
рядом с ним. Вы будете автоматически перенаправлены на страницу оформления заказа, где вы также сразу зарегистрируетесь в Hostinger, если вы еще не зарегистрированы. Оплатите домен.
Домен, указывающий на VPS
Прежде чем ваш домен сможет работать с вашим VPS, вам необходимо указать домен на ваш сервер. Для этого в Панели управления Hostinger нажмите кнопку “Manage” рядом с вашим доменом. Затем перейдите на страницу управления DNS-записями, нажав на кнопку “DNS / Name Servers” в меню слева.
Сначала узнайте IP адрес вашего VPS.
В списке записей DNS найдите запись типа A
с именем @
. Отредактируйте эту запись, изменив IP адрес в поле “Points to” на IP адрес вашего VPS, и установите TTL на 3600.
Затем найдите и удалите запись типа CNAME
с именем www
. Вместо нее создайте новую запись типа A
с именем www
, указывающую на IP адрес вашего VPS, и установите TTL на 3600.
Если у вас возникнут проблемы, воспользуйтесь другим методом, описанным в базе знаний.
Настройка веб сервера
Чтобы сайт заработал и бот начал получать обновления от Telegram, необходимо настроить веб-сервер. Мы будем использовать Caddy.
Caddy — это мощный веб-сервер с открытым исходным кодом и автоматическим HTTPS.
Веб сервер
Мы используем Caddy, потому что, в отличие от обычных веб-серверов, таких как Nginx или Apache, он автоматически настраивает SSL-сертификаты. Это значительно упрощает работу над статьей. Однако вы можете выбрать любой веб-сервер.
Установка
Следующие пять команд загрузят и автоматически запустят Caddy как службу systemd под названием caddy
.
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install caddy
2
3
4
5
Другие варианты установки см. в Руководстве по установке Caddy.
Проверьте состояние Caddy:
systemctl status caddy
Устранение неполадок
Некоторые хостинг-провайдеры предоставляют VPS с предустановленным веб-сервером, например Apache. Несколько веб-серверов не могут работать на одной машине одновременно. Для работы Caddy необходимо остановить и выключить другой веб-сервер:
systemctl stop <имя-службы>
systemctl disable <имя-службы>
2
Замените имя
на имя службы веб-сервера, которая мешает работе Caddy.
Теперь, если вы откроете IP адрес вашего сервера в браузере, вы увидите типичную страницу с инструкциями по настройке Caddy.
Настройка
Чтобы Caddy мог обрабатывать запросы, поступающие в наш домен, нам нужно изменить конфигурацию Caddy.
Выполните следующую команду, чтобы открыть файл конфигурации Caddy:
nano /etc/caddy/Caddyfile
Вы увидите следующую конфигурацию по умолчанию:
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Чтобы бот работал, сделайте конфигурацию примерно такой:
<домен> {
reverse_proxy /<токен> localhost:<порт>
}
2
3
Замените <домен>
на ваш домен, <токен>
на токен вашего бота, а <порт>
на порт, на котором вы хотите запустить своего бота.
Перезагружайте Caddy каждый раз, когда вы изменяете конфигурационный файл сайта, используя следующую команду:
systemctl reload caddy
Теперь все запросы по адресу https://
будут перенаправляться на адрес http://
, где запущен вебхук бота.
Подключение вебхука к Telegram
Все, что вам нужно сделать — это указать Telegram, куда отправлять обновления. Для этого откройте браузер и перейдите на страницу по следующей ссылке:
https://api.telegram.org/bot<токен>/setWebhook?url=https://<домен>/<токен>
Замените <токен>
на токен вашего бота, а <домен>
на ваш домен.
CI/CD
CI
Мы сосредоточимся на написании скриптов для GitHub и GitLab. При необходимости вы можете легко адаптировать приведенные ниже примеры к выбранному вами сервису CI/CD, например Jenkins, Buddy и т.д.
SSH Ключи
Для передачи файлов на сервер необходимо настроить беспарольную аутентификацию, которая осуществляется с помощью SSH-ключей.
На вашем персональном компьютере необходимо выполнить следующие команды.
Перейдите в каталог с ключами SSH:
cd ~/.ssh
Сгенерируйте новую пару ключей:
ssh-keygen -t rsa -m PEM
ssh-keygen -t ed25519
Эта команда сгенерирует открытый и закрытый ключ нужного вам типа и формата для GitHub и GitLab. При желании вы можете указать собственное имя ключа.
Затем отправьте публичный ключ на сервер:
ssh-copy-id -i <имя-ключа>.pub root@<ip-адрес>
Замените <имя
на имя сгенерированного ключа, а <ip
на IP-адрес вашего сервера.
Обратите внимание, что публичный ключ может находиться на многих серверах, а приватный ключ должен быть только у вас и GitHub или GitLab.
Теперь вы можете подключиться к серверу без необходимости вводить пароль.
Примеры Workflow
Node.js (GitHub)
Используйте
name: Main
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-node@v3
with:
node-version: "latest"
- run: npm ci
- name: Build
run: npm run build
- uses: actions/upload-artifact@v3
with:
name: source
path: |
dist/*.js
package.json
package-lock.json
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
with:
name: source
path: dist/
- name: Deploy
uses: easingthemes/ssh-deploy@v4
env:
SOURCE: "dist package.json package-lock.json"
ARGS: "--delete -az"
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "<директория-проекта>"
SCRIPT_AFTER: |
cd <директория-проекта>
npm i --omit=dev
<команда-для-запуска>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
где <директория
заменяется именем директории, в которой на сервере хранится сборка бота, а <команда
— командой для запуска бота, которая может быть, например, вызовом pm2
или systemctl
.
Этот скрипт последовательно выполняет две задачи: build
и deploy
. После выполнения build
, директория dist
, содержащая сборку бота, передается задаче deploy
.
Доставка файлов на сервер осуществляется с помощью утилиты rsync
, которая реализована в easingthemes
. После того как файлы доставлены на сервер, выполняется команда, описанная в переменной окружения SCRIPT
. В нашем случае после доставки файлов мы переходим в директорию бота, где устанавливаем все зависимости, кроме dev
, и перезапускаем бота.
Обратите внимание, что вам необходимо добавить три секретные переменные окружения:
SSH
— здесь должен храниться приватный SSH-ключ, который вы создали на предыдущем шаге._PRIVATE _KEY REMOTE
— здесь должен храниться IP адрес вашего сервера._HOST REMOTE
— здесь должно храниться имя пользователя, от имени которого запускается бот._USER
Node.js (GitLab)
Используйте
image: node:latest
stages:
- build
- deploy
Build:
stage: build
before_script: npm ci
script: npm run build
artifacts:
paths:
- dist/
Deploy:
stage: deploy
before_script:
- "command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )"
- "command -v rsync >/dev/null || ( apt-get update -y && apt-get install rsync -y )"
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan "$REMOTE_HOST" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- rsync --delete -az dist package.json package-lock.json $REMOTE_USER@$REMOTE_HOST:<директория-проекта>
- ssh $REMOTE_USER@$REMOTE_HOST "cd <директория-проекта> && npm i --omit=dev && <команда-для-запуска>"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
где <директория
заменяется именем директории, в которой на сервере хранится сборка бота, а <команда
— командой для запуска бота, которая может быть, например, вызовом pm2
или systemctl
.
Этот скрипт последовательно выполняет две задачи: build
и deploy
. После выполнения build
, директория dist
, содержащая сборку бота, передается задаче deploy
.
Файлы доставляются на сервер с помощью утилиты rsync
, которую мы должны установить перед выполнением основного скрипта. После доставки файлов мы подключаемся к серверу по SSH, чтобы выполнить команду установки всех зависимостей, кроме dev
, и перезапустить приложение.
Обратите внимание, что вам необходимо добавить три переменные окружения:
SSH
— здесь должен храниться приватный SSH-ключ, который вы создали на предыдущем шаге._PRIVATE _KEY REMOTE
— здесь должен храниться IP адрес вашего сервера._HOST REMOTE
— здесь должно храниться имя пользователя, от имени которого запускается бот._USER
Deno (GitHub)
Используйте
name: Main
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Deploy
uses: easingthemes/ssh-deploy@v4
env:
SOURCE: "src deno.jsonc deno.lock"
ARGS: "--delete -az"
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "<директория-проекта>"
SCRIPT_AFTER: |
cd <директория-проекта>
<команда-для-запуска>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
где <директория
заменяется именем директории, в которой на сервере хранится сборка бота, а <команда
— командой для запуска бота, которая может быть, например, вызовом pm2
или systemctl
.
Этот скрипт отправляет файлы на сервер с помощью утилиты rsync
, которая реализована в easingthemes
. После того как файлы доставлены на сервер, выполняется команда, описанная в переменной окружения SCRIPT
. В нашем случае после доставки файлов мы переходим в директорию бота и перезапускаем его.
Обратите внимание, что вам необходимо добавить три секретные переменные окружения:
SSH
— здесь должен храниться приватный SSH-ключ, который вы создали на предыдущем шаге._PRIVATE _KEY REMOTE
— здесь должен храниться IP адрес вашего сервера._HOST REMOTE
— здесь должно храниться имя пользователя, от имени которого запускается бот._USER
Deno (GitLab)
Используйте
image: denoland/deno:latest
stages:
- deploy
Deploy:
stage: deploy
before_script:
- "command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )"
- "command -v rsync >/dev/null || ( apt-get update -y && apt-get install rsync -y )"
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan "$REMOTE_HOST" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- rsync --delete -az src deno.jsonc deno.lock $REMOTE_USER@$REMOTE_HOST:<директория-проекта>
- ssh $REMOTE_USER@$REMOTE_HOST "cd <директория-проекта> && npm i --omit=dev && <команда-для-запуска>"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
где <директория
заменяется именем директории, в которой на сервере хранится сборка бота, а <команда
— командой для запуска бота, которая может быть, например, вызовом pm2
или systemctl
.
Этот скрипт отправляет файлы на сервер с помощью rsync
, который должен быть предварительно установлен. После того как файлы скопированы, мы подключаемся к серверу по SSH, чтобы перезапустить бота.
Обратите внимание, что вам необходимо добавить три переменные окружения:
SSH
— здесь должен храниться приватный SSH-ключ, который вы создали на предыдущем шаге._PRIVATE _KEY REMOTE
— здесь должен храниться IP адрес вашего сервера._HOST REMOTE
— здесь должно храниться имя пользователя, от имени которого запускается бот._USER
Теперь вы должны видеть, как каждый код, добавленный в ветку main
, будет автоматически разворачиваться на вашем VPS. Разработка go brrrr 🚀