Fuente
about aiogram | Офіційний безкоштовний вебхук:aiohttp, nginx, домен, Let's Encrypt #ці...
921 Vistas/Alcance
2024-07-03 19:52
Mensaje №46
📡 Офіційний безкоштовний вебхук: 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 для вебхуку можна глянути тут
Далі зайди на свій сервер і встанови 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 для вебхуку можна глянути тут