Scrivi un articolo per creare un bot Telegram all'interno di un container Docker usando un dockerfile e come utilizzarlo su una macchina linux con docker compose. il bot dovrà visualizzare il prezzo di Bitcoin. il sistema deve utilizzare github actions per il CI/CD
Creare un bot Telegram all'interno di un container Docker può essere un modo pratico e flessibile per eseguire il bot in modo sicuro e facilmente riproducibile. In questo articolo, vedremo come creare un bot Telegram che visualizza il prezzo di Bitcoin utilizzando Docker, Docker Compose e GitHub Actions per il Continuous Integration (CI) e il Continuous Deployment (CD).
Per seguire questa guida, è necessario avere installato sul proprio sistema:
- Docker
- Docker Compose
- Un account su Telegram
Per creare un bot Telegram, seguire questi passaggi:
- Aprire Telegram e cercare il bot "BotFather" (
@BotFather
). - Inviare al bot il comando
/newbot
e seguire le istruzioni per creare un nuovo bot. Al termine del processo, verrà fornito un token di accesso univoco per il bot.
Il primo passo per creare il nostro container Docker è quello di creare un file Dockerfile
, che definisce le istruzioni per la costruzione del container.
Il nostro bot Telegram utilizzerà il framework python-telegram-bot per gestire le interazioni con il bot. Inoltre, utilizzeremo l'API di CoinMarketCap per ottenere il prezzo attuale di Bitcoin. Per questo, nel nostro Dockerfile
dovremo installare queste dipendenze.
Inoltre, dovremo anche copiare il codice del nostro bot nella directory del container e impostare il comando da eseguire quando il container viene avviato.
Ecco un esempio di Dockerfile
per il nostro bot:
Copy codeFROM python:3.8-slim
RUN pip install python-telegram-bot requests
COPY . /app WORKDIR /app
CMD ["python", "bot.py"]
In questo esempio, stiamo utilizzando l'immagine python:3.8-slim
come base per il nostro container. Quindi, stiamo installando le dipendenze python-telegram-bot
e requests
utilizzando pip
. Successivamente, stiamo copiando il nostro codice nella directory /app
del container e impostando il comando da eseguire quando il container viene avviato come python bot.py
.
Ora che abbiamo creato il nostro Dockerfile
, dobbiamo scrivere il codice del nostro bot.
Per semplicità,
il nostro bot gestirà solo un comando, /price
, che invierà al nostro bot il prezzo attuale di Bitcoin in dollari americani.
Il codice del nostro bot potrebbe essere simile a questo:
Copy codeimport requests from telegram.ext import Updater, CommandHandler
def get_price(): url = "https://api.coinmarketcap.com/v2/ticker/1/" response = requests.get(url) data = response.json() price = data["data"]["quotes"]["USD"]["price"] return price
def price(update, context): price = get_price() update.message.reply_text(f"Il prezzo attuale di Bitcoin è di ${price:.2f}")
def main(): updater = Updater(token="YOUR_BOT_TOKEN", use_context=True) dp = updater.dispatcher dp.add_handler(CommandHandler("price", price)) updater.start_polling() updater.idle()
if name == "main": main()
In questo esempio, stiamo utilizzando l'API di CoinMarketCap per ottenere il prezzo di Bitcoin e lo stiamo inviando al nostro bot quando viene eseguito il comando /price
.
Ora che abbiamo il nostro Dockerfile
e il codice del nostro bot, possiamo utilizzare Docker Compose per semplificare il processo di esecuzione del nostro container.
Per fare ciò, dobbiamo creare un file docker-compose.yml
che definisce le configurazioni per il nostro container.
Ecco un esempio di docker-compose.yml
per il nostro bot:
Copy codeversion: "3.8"
services: bot: build: . environment: - TOKEN=YOUR_BOT_TOKEN command: python bot.py
In questo esempio, stiamo definendo un servizio chiamato bot
che utilizza il nostro Dockerfile
per costruire il container. Stiamo anche impostando una variabile d'ambiente TOKEN
che contiene il nostro token di accesso del bot e impostando il comando da eseguire quando il container viene avviato come python bot.py
.
Ora che abbiamo il nostro Dockerfile
e il nostro docker-compose.yml
, possiamo utilizzare Docker Compose per eseguire il nostro container.
Per fare ciò, aprire una finestra del terminale nella directory che contiene i nostri file e eseguire il comando:
Copy codedocker-compose up
Questo com
ando costruirà il nostro container e lo avvierà, eseguendo il nostro bot Telegram.
Per verificare che il nostro bot stia funzionando correttamente, aprire Telegram e cercare il nostro bot utilizzando il nome che abbiamo assegnato durante la creazione del bot. Quindi, inviare al bot il comando /price
per ottenere il prezzo attuale di Bitcoin.
Se tutto è stato configurato correttamente, il nostro bot dovrebbe inviare il prezzo attuale di Bitcoin.
Ora che il nostro bot funziona correttamente in locale, possiamo utilizzare GitHub Actions per automatizzare il processo di integrazione e distribuzione del nostro codice.
Per fare ciò, dobbiamo creare un file .github/workflows/ci-cd.yml
che definisce il nostro workflow di CI/CD.
Ecco un esempio di workflow di CI/CD per il nostro bot:
Copy codename: CI/CD
on: push: branches: [ master ]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build and push image run: | docker build -t YOUR_DOCKERHUB_USERNAME/YOUR_BOT_NAME . echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin docker push YOUR_DOCKERHUB_USERNAME/YOUR_BOT_NAME
In questo esempio, stiamo utilizzando GitHub Actions per eseguire il nostro workflow ogni volta che viene effettuato un push sulla branch master
. Il workflow consiste in un unico job che utilizza l'immagine ubuntu-latest
e che esegue i seguenti passaggi:
- Il passaggio
actions/checkout@v2
scarica il nostro codice dal repository. - Il passaggio
Build and push image
costruisce l'immagine del nostro container utilizzando il nostroDockerfile
e la carica su Docker Hub utilizzando le credenziali di accesso Docker fornite come variabili d'ambiente.
In questo articolo, abbiamo visto come creare un bot Telegram all'interno di un container Docker e come utilizzare Docker Compose per eseguirlo in modo semplice e flessibile. Abbiamo anche visto come utilizzare GitHub Actions per automatizzare il processo di integrazione e distribuzione del nostro codice.
Spero che questa guida sia stata utile e che possa aiutare a creare il proprio bot Telegram in modo rapido e affidabile.