Статистика telegram каналу - @about_aiogram

Логотип телеграм спільноти - about aiogram 2024-07-14

about aiogram

Кількість підписників:
240
Фото:
Відео:
 
Посилання:
26 
Категорія:
Технології
Опис:
✏️ Про розробку телеграм ботів з використанням aiogram та інших бібліотек і технологій 🔍 Навігатор (inline mode) - @aiotipbot 🙃 Канал ведуть @Shaonis + @wakaree #aiogram #bots #python

Кількість підписників

Історія змін лого

Поки що змін не зафіксовано

Історія змін назви

Поки що змін не зафіксовано

Історія зміни типу аккаунта

Поки що змін не зафіксовано

Історія зміни статуса

Офіційно не підтверджена
2024-07-14

Стіна канала about aiogram - @about_aiogram

🚛 CI/CD з Github Actions
💭 Зараз зробимо CI/CD автоматизацію, яка при кожному оновленні коду в GitHub репозиторії буде переносити зміни на сервер
🛠 Інструменти
🔀 GitHub Actions - CI/CD платформа, що дозволяє автоматизувати твій build-test-deploy pipeline
🐳 Docker - відкрита платформа для розробки, доставки та запуску додатків (розбирали в пості)
📦 Github Container Registry - зберігає image контейнерів в межах організації чи особистого акаунту, а також дозволяє пов'язати image із репозиторієм
Сама концепція CI/CD набагато ширша, але в рамках даного посту все спрощено: CI - це build контейнера, CD - його release і deploy
• GitHub Actions - в ролі вебхуку на push подію для репозиторію, який буде виконувати наші інструкції
• Docker - для побудови образу (але можна і без нього, наприклад запускати бота з systemd)
• Github Container Registry - для збереження образів (для приватної видимості, в DockerHub на це сильніші обмеження)
✏️ Пишемо конфігурацію
Щоб скористатись GitHub Actions пишуть workflow файли, а вони налаштовані для запуску однієї чи декількох задач
• YAML формат файлу
• Мають знаходитись в .github/workflows/
• Основна структура: події, змінні середовища та завдання
• І workflows і actions можна публікувати та перевикористовувати
Давай розберемо готовий приклад
name: Deploy to server
on:
push:
branches: [ "main" ]
env:
REGISTRY: ghcr.io
IMAGE_NAME: <your-nick>/<image-name>:latest
permissions:
contents: read
packages: write
jobs:
publish:
name: Publish image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login
run: |
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build and Push
run: |
docker build . -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
deploy:
needs: publish
name: Deploy app
runs-on: ubuntu-latest
steps:
- name: Setup ssh keys
run: |
install -m 600 -D /dev/null ~/.ssh/id_rsa
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.SSH_HOST }} > ~/.ssh/known_hosts
- name: Connect-pull-up
run: |
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << EOF
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
cd ${{ secrets.WORK_DIR }}
docker compose pull
docker compose up -d
EOF
- name: Cleanup
run: rm -rf ~/.ssh

Вказуємо події, при яких він буде працювати workflow (тут це push)
💡За замовчуванням події будуть застосовані до всіх гілок, тому краще вказати конкретну (наприклад main, тоді dev може бути як чорнетка)
• Блок env, як не дивно, служить для вказання змінних середовища
⚠️ Ім'я Docker образів мають бути в нижньому реєстрі. Також тут очікується, що в docker-compose.yaml ім'я образу: <registry>/<your-nick>/<image-name>
Блок permission встановлює права для GITHUB_TOKEN (також доступний через контекст github.token). Це спеціальний токен для автентифікації, що створюється для кожної job
Блок jobs містить завдання, сприймай їх як етапи. Також вони можуть мати залежності, наприклад тут deploy чекає поки завершиться publish (needs). За замовчуванням завдання виконуються паралельно!
💡 Кожний job працює на окремій віртуальній машині. GitHub-hosted рішення пропонує один із трьох варіантів: Ubuntu, Mac, Windows
checkout - офіційний action, його можна розуміти як git pull, щоб задача мала доступ до твого коду (використовує GITHUB_TOKEN)
🤫 Тепер про secrets. Їх можна додати в settings репозиторію, щоб використати як змінні середовища
💡Якщо не хочеш давати GitHub приватний SSH ключ, є ідея посилати серверу запит, щоб він сам завантажив і запустив оновлений Docker образ з регістру
🐱 GitHub Actions | Billing
🖼 Publish Docker Images
📝 Workflows syntax
74
24-11-04 07:05
🌱 Життєвий цикл апдейту в aiogram
💭 Зазвичай люди, що починають писати ботів намагаються ловити потрібне повідомлення першим робочим способом і не задумуються над тим, які у них є можливості для організації обробки цих повідомлень
• Що таке апдейт
• Які є способи їх отримання
• Поняття реєстрації та обробника
• Ланцюг обробників
• Роутер і диспетчер - опис, порівняння
• Механізм Dependency Injection
• Детальний розбір мідлваря
• Фільтрація апдейтів
• Хендлер
Всі ці пункти я спробував розписати у максимально доступному форматі з поясненням різних моментів та описом елементарних помилок
🇺🇦 Стаття українською
https://botfather.dev/news/zhittyevij-cikl-apdejtu-v-aiogram
🌍 Стаття англійською
https://botfather.dev/news/lifecycle-of-an-update-in-aiogram
💫 Мені здається, що представлення цих понять в одній картині спростить написання ботів. Особливо, бачу в цьому сенс для новачків. Крім того, розуміння окремих моментів може бути корисним не тільки для ботів. Приємного читання!
⚡️ Дякую @Latand за його проект та можливість писати там статті
394
24-09-02 12:52
📡 Офіційний безкоштовний вебхук:
aiohttp, nginx, домен, Let's Encrypt #цікаве
☑️ Це cheatsheet для встановлення бота на вебхук із сертифікатом від Let's Encrypt на свій сервер + його автооновлення + безкоштовний домен
📌 Перед цим варто прочитати
Що таке вебхук і які переваги він дає
Пост про самопідписаний сертифікат
📚 Трохи теорії
🔒 Let's Encrypt - це безкоштовний, автоматизований і відкритий центр сертифікації, створений некомерційною організацією Internet Security Research Group (ISRG)
🤖 Certbot - це безкоштовна утиліта з відкритим вихідним кодом для автоматичного використання сертифікатів Let's Encrypt
🪩 FreeDNS - середовище, де інші програмісти можуть безкоштовно обмінюватися доменними іменами один з одним. З'явився у 2001 році, тому що його засновник, Джошуа Андерсон, хотів розважитися зі своїм хобі, пов'язаним з доменами
💠 aiohttp - асинхронний HTTP клієнт/сервер для asyncio та Python
📌 Переваги офіційного сертифіката над самопідписаним:
• твій сервер визнається всіма (нап. при переході на його адресу в браузері не буде ніяких попереджень про безпеку)
• зручне автооновлення
• при встановленні вебхуку не треба надсилати файл
⬇️ Загалом:
• За допомогою FreeDNS отримуємо безкоштовний домен (для Let's Encrypt необхідно мати домен)
• Сертифікат для вебхуку беремо в Let's Encrypt
• certbot буде автоматично оновлювати наш сертифікат
• nginx буде отримувати POST запити на вебхук і пересилати їх на обробку до бота
• aiohttp буде приймати апдейти бота вже за допомогою Python
📌 Для різноманіття цього разу візьмемо aiohttp замість FastAPI, бо він більш легший. Але якщо тобі треба будувати API, то залишити FastAPI буде гарним рішенням
Отримання безкоштовного домену
💭 Такий безкоштовний домен підійде або для тестів або для не дуже великих проектів. Тому, якщо в тебе серйозний проект, краще придбати домен
• Зареєструйся на сайті
• Перейди в розділ субдоменів і натисни «Add a subdomain»
• Переконайся, що в полі «Type» написано А
• У полі «Domain» обери бажаний домен (якщо натиснути «Many many more available» -> «Share Domain Registry», то з'явиться більше варіантів)
Краще обирати не дуже популярні, пізніше скажу чому. Продовжимо:
• в поле «Subdomain» введи назву субдомену (твоя авторська назва), виглядати буде як subdomain.domain
• в поле «Destination» введи IP адресу свого серверу
• після цього підтверди створення субдомену
🤩 Готово, домен є. Далі йди до свого хостинг провайдера і заяви право на цей домен. Наприклад у MVPS на панелі керування сервером є таблиця, в колонку «rDNS» треба ввести домен (ще стаття є)
📌 Пам'ятай, що необхідно буде почекати декілька хвилин (але іноді годин) поки домен не розійдеться по мережі
📥 Отримання сертифікату
Далі зайди на свій сервер і встанови certbot. На офіційному сайті є генератор інструкцій, все що треба це обрати систему і софт
В інструкції, команда для отримання сертифікату буде подібною
sudo certbot certonly --nginx

Треба буде обрати домен під який робимо сертифікат і почекати декілька секунд. Після отримання сертифікату certbot встановить таймер для його автооновлення
📌 Не популярний домен треба брати через те, що в Let's Encrypt є обмеження на частоту оновлення сертифікату і це розповсюджується на субдомени
Перевірити оновлення сертифікату без його фактичного встановлення (чи все добре)
sudo certbot renew --dry-run

📟 Конфігурація nginx
Може виглядати наступним чином
server {
listen 443 ssl;
server_name YOUR_DOMAIN;
ssl_certificate /etc/letsencrypt/live/YOUR_DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR_DOMAIN/privkey.pem;
location / {
proxy_pass http://SERVER_IP:AIOHHTP_PORT;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

📌 Замість YOUR_DOMAIN, SERVER_IP, AIOHTTP_PORT підставляй свої дані (якщо бот використовує Docker, то не забудь відкрити порти)
👉 На кінець, приклад використання aiohttp для вебхуку можна глянути тут
667
24-07-03 19:52