Proč GCP?
Při psaní telegramových botů jsem se setkal s otázkou, jak rychle a zdarma zajistit, aby bot běžel nepřetržitě. Možnosti s Heroku a Pythonanywhere mají příliš malé limity, pokud máte více než jednoho bota. Proto jsem se rozhodl využít GCP. Platforma nabízí zdarma 300 $ na rok + obrovské slevy při využívání těchto prostředků (až 94 %).

Jak hostovat vašeho bota?
Krok 1. Registrace na GCP
Přejdeme na stránku a klikneme na Začít zdarma.

Zadáme své údaje a kartu. Peníze z karty nebudou strženy, pokud si sami neaktivujete placené předplatné.

Krok 2. Vytvoření virtuálního stroje
Po registraci se ocitnete na hlavní stránce služby. Musíte vybrat v sekci Zdroje záložku Compute Engine.

Je nutné vytvořit nový instance.

Pokud nebudete nasazovat DB na virtuálním stroji, můžete vzít g1-small, jinak doporučuji n1-standard.

Také bude nutné vybrat OS. Zvolil jsem Debian GNU/Linux 9 (stretch).

A je to, VM byla vytvořena. Její standardní nasazení trvá od 1 do 5 minut.
Krok 3. Nastavení virtuálního stroje
Můžete se připojit přes SSH ze svého PC nebo interagovat prostřednictvím platformy.
Pro to klikněte na SSH.
![]()
Otevře se vám terminál Linuxu v novém okně.

Nyní přejdeme k nastavení. Nejprve zadejte příkaz:
sudo apt-get updatepro aktualizaci informací o nejnovějších verzích balíčků.
Poté zadejte:
sudo apt-get install python3-setuptools
sudo apt-get install python3-pipPython instalovat nemusíte, již je přítomen.
Nyní je nutné nainstalovat všechny potřebné knihovny. Je zde menší nuance, všechny knihovny je potřeba instalovat dvakrát:
pip3 install ‘name_of_package’pro použití přes příkaz python3, a
sudo pip3 install ‘name_of_package’ pro systemd. Tato utilita vám pomůže spustit bota a restartovat ho, pokud spadne.
Nejjednodušší způsob, jak spustit bota přes python3, ale vypne se, pokud se odpojíte. Můžete použít screen, ale bot se nebude sám restartovat. Také můžete použít crontab s kontrolou portu, ale tento způsob se mi zdá složitější než systemd.
Krok 4. Nahráváme bota na server
Existují dva způsoby, jak nahrát vašeho bota. Pokud nemáte vztah s Gitem, můžete jednoduše zabalit bota do .tar a nahrát ho na server:

Poté ho rozbalíme příkazem:
tar -xvf yourfile.tarNyní váš bot je uložen ve složce s názvem archivu.
Druhý způsob je přes Git. Myslím, že není třeba vysvětlovat, jak to udělat lidem, kteří ho umí používat.
Po instalaci jeho příkazem:
sudo apt install gitMůžete si ho naklonovat na VM.
Poté přejdeme k nastavení systemd. Za tímto účelem přejdeme do jeho adresáře:
cd /etc/systemd/systemA vytvoříme soubor bot.service:
sudo nano bot.serviceDo otevřeného okna napište následující:
[Unit]
Description=Telegram bot 'Název bota'
After=syslog.target
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/home/název vašeho uživatele/název složky, ve které leží bot
ExecStart=/usr/bin/python3 /home/název vašeho uživatele/název složky, ve které leží bot/bot.py
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Zavřete a uložte soubor. Zavře se pomocí příkazu Ctrl+X.
Poté zadejte příkazy postupně:
sudo systemctl daemon-reload
sudo systemctl enable bot
sudo systemctl start bot
sudo systemctl status bot
Pokud vše půjde dobře, uvidíte přibližně následující:

Všechno, nyní váš bot pracuje samostatně. Doufám, že vám můj článek pomůže hostit vašeho bota.
P.S.
1. Zkontrolujte vašeho bota na chyby
Spusťte vašeho bota a zkontrolujte jeho funkci, než ho spustíte přes systemd. Za tímto účelem přejděte do složky s botem a spusťte ho přes python.
cd
python3 bot.py2. Přidejte do souborů s py-skripty kódování
#!/usr/bin/env python
# -*- coding: utf-8 -*-
Vložte na začátek souboru.
3. Chyby v systemd
Pokud jste bota zkontrolovali na chyby a normálně fungoval, ale nechce se spustit v systemd, můžete se podívat na logy a pochopit, v čem je chyba, pohledem na soubor:
sudo nano /var/log/syslogMůžete si tento soubor stáhnout a prohlédnout ho na svém počítači přes Notepad++.
4. Aktualizace bota
Pokud chcete doplnit nebo nahrát novou verzi bota, zadejte příkaz:
sudo systemctl stop botProveďte všechny potřebné manipulace. A pak zadejte následující příkazy, aby znovu začal pracovat:
sudo systemctl daemon-reload
sudo systemctl start bot
sudo systemctl status botZdroj: habr.com
