Compare commits
52
Commits
92f86d0d97
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b0783581f | ||
|
|
36763e28fa | ||
|
|
a48841be07 | ||
|
|
48790e1071 | ||
|
|
15c6a21c7b | ||
|
|
4b3413d403 | ||
|
|
7393fdeee0 | ||
|
|
187c2bcc1b | ||
|
|
aff2838a95 | ||
|
|
0d60bb1b67 | ||
|
|
b178c4004b | ||
|
|
4529b53aa7 | ||
|
|
6ec501608e | ||
|
|
ba70770212 | ||
|
|
66063be925 | ||
|
|
be3ad20d80 | ||
|
|
f20be312d7 | ||
|
|
20f5940385 | ||
|
|
cce65604ef | ||
|
|
edd6acc153 | ||
|
|
17069f19f3 | ||
|
|
5183d483cf | ||
|
|
5b9539ffa0 | ||
|
|
f86e269d24 | ||
|
|
3df249fd84 | ||
|
|
e4806e1e07 | ||
|
|
adf6936c1c | ||
|
|
cdde9fd375 | ||
|
|
fd5dfc4d7f | ||
|
|
d9b6fa9739 | ||
|
|
deb3acdec0 | ||
|
|
70f62d15dd | ||
|
|
6be7c6424a | ||
|
|
3f6c0a5f92 | ||
|
|
7420b51297 | ||
|
|
15abd2e533 | ||
|
|
acf01486ff | ||
|
|
166b35bbb9 | ||
|
|
d7447807e1 | ||
|
|
f5ecb29962 | ||
|
|
f2f6289a7c | ||
|
|
92ce72e895 | ||
|
|
3fb7ca862b | ||
|
|
78db08e953 | ||
|
|
ee325adc5e | ||
|
|
1b8d109a92 | ||
|
|
1e2a2d8ccc | ||
|
|
8054180fdf | ||
|
|
bbc8431cc3 | ||
|
|
98853e31fa | ||
|
|
5d12514bf0 | ||
|
|
44410c3e56 |
+7
-12
@@ -1,3 +1,4 @@
|
|||||||
|
# Универсальная группа раннеров
|
||||||
default:
|
default:
|
||||||
tags:
|
tags:
|
||||||
- universal
|
- universal
|
||||||
@@ -48,10 +49,10 @@ deploy_to_server:
|
|||||||
- chmod 600 ~/.ssh/id_ed25519
|
- chmod 600 ~/.ssh/id_ed25519
|
||||||
- ansible-galaxy collection install community.docker
|
- ansible-galaxy collection install community.docker
|
||||||
script:
|
script:
|
||||||
|
- echo "TOKEN=$BOT_TOKEN" > .env
|
||||||
|
- echo "ADMIN_IDS=$ADMIN_ID_TG" >> .env
|
||||||
- cd auto-deployment/
|
- cd auto-deployment/
|
||||||
- ansible-playbook -i inventory.ini A_deploy.yml
|
- ansible-playbook -i inventory.ini A_deploy.yml --extra-vars "image_tag=$CI_COMMIT_SHORT_SHA"
|
||||||
--extra-vars "image_tag=$CI_COMMIT_SHORT_SHA"
|
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
name: production
|
name: production
|
||||||
url: http://$BOT_SERVER_IP
|
url: http://$BOT_SERVER_IP
|
||||||
@@ -113,15 +114,9 @@ mirror_to_gitea:
|
|||||||
entrypoint: [""]
|
entrypoint: [""]
|
||||||
stage: .post
|
stage: .post
|
||||||
variables:
|
variables:
|
||||||
GIT_DEPTH: 1
|
|
||||||
GIT_STRATEGY: clone
|
GIT_STRATEGY: clone
|
||||||
|
GIT_DEPTH: 0
|
||||||
script:
|
script:
|
||||||
- git config user.name "GitLab CI/CD"
|
|
||||||
- git config user.email "ci@leor156.online"
|
|
||||||
- git branch -D showcase || true
|
|
||||||
- git checkout --orphan showcase
|
|
||||||
- git add -A
|
|
||||||
- git commit -m "Showcase update - ${CI_COMMIT_SHORT_SHA}"
|
|
||||||
- git remote add gitea https://leo:$GITEA_TOKEN@gitea.leor156.online/leo/quote_bot_auto-deployment.git
|
- git remote add gitea https://leo:$GITEA_TOKEN@gitea.leor156.online/leo/quote_bot_auto-deployment.git
|
||||||
- git push gitea showcase:main --force
|
- git push gitea HEAD:main --force
|
||||||
when: on_success
|
when: on_success
|
||||||
@@ -1,2 +1,56 @@
|
|||||||
### Цитатный бот
|
# Цитатный телеграмм бот с авторазвёртыванием. :robot:
|
||||||
#### ...Скоро...
|
|
||||||
|
## 🛠 Под капотом (Стек технологий)
|
||||||
|
Этот проект создавался в том числе для практики современных DevOps-инструментов. Здесь реализован полноценный автоматизированный пайплайн развертывания:
|
||||||
|
|
||||||
|
* **Terraform + Yandex Cloud:** Используется концепция Infrastructure as Code (IaC) для автоматического создания виртуальных машин, настройки сети и дисков в облаке.
|
||||||
|
* **Docker:** Приложение упаковано в контейнер, что решает проблему с зависимостями и позволяет легко запускать бота на любом сервере.
|
||||||
|
* **Ansible:** Автоматизирует настройку чистого сервера. Плейбук сам устанавливает Docker (если его нет), настраивает окружение и запускает контейнер.
|
||||||
|
* **GitLab CI/CD:** Готовый пайплайн (`.gitlab-ci.yml`), который прогоняет тесты, собирает Docker-образ с помощью Kaniko, пушит его в Docker Hub и автоматически запускает Ansible-плейбук для деплоя на боевой сервер.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Что умеет данный бот?
|
||||||
|
* Отправлять рандомную цитату по запросу ``` /quote ```
|
||||||
|
* По команде ``` /stats ``` показывать, сколько цитат в базе есть на данный момент.
|
||||||
|
|
||||||
|
### Возможности для администратора: :gear:
|
||||||
|
* Добавлять новые цитаты командой ``` /add <текст цитаты> ```
|
||||||
|
|
||||||
|
## Как это развернуть? :rocket:
|
||||||
|
### Вам понадобится:
|
||||||
|
* Зарубежный Linux сервер на Ubuntu или Debian.
|
||||||
|
* Токен вашего телеграмм бота. Можно получить здесь: [BotFather](https://t.me/BotFather)
|
||||||
|
* У вас должен быть установлен ansible и git на wsl. Если не установлены, то установите командами ` sudo apt install ansible && sudo apt install git `
|
||||||
|
|
||||||
|
### Ваши действия для развертывания:
|
||||||
|
* Клонируйте репозиторий командой: ` git clone https://github.com/LeoR156/quote-bot `
|
||||||
|
* Перейдите в папку с ботом командой ` cd quote-bot `
|
||||||
|
* Создайте файл ` .env ` и добавьте в него данные командой ` nano .env `:
|
||||||
|
```
|
||||||
|
TOKEN=your_token_here # Замените на реальный токен
|
||||||
|
ADMIN_IDS=123456789,987654321 # Напишите свой id или id того аккаунта, с которого будет осуществляться добавление цитат. ID может быть несколько, порядок записи в примере.
|
||||||
|
```
|
||||||
|
* Перейдите в папку ` auto-deployment ` командой ` cd auto-deployment `
|
||||||
|
* Отредактируйте файл инвентори командой ` nano inventory.ini `. Удалите оттуда всю информацию и добавьте следующее ( :warning: не забудьте поменять данные на свои):
|
||||||
|
|
||||||
|
```
|
||||||
|
[server_bot]
|
||||||
|
server ansible_host=<ваш_ip> ansible_user=<ваш_пользователь> ansible_ssh_private_key_file=<путь_до_вашего_ssh_ключа_на_хосте>
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
|
||||||
|
```
|
||||||
|
|
||||||
|
* Запустите плейбук командой `ansible-playbook A_deploy.yml -i inventory.ini`
|
||||||
|
|
||||||
|
### Готово, через несколько минут бот заработает. :white_check_mark:
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## Диагностика, если бот не отвечает/падает:
|
||||||
|
...скоро...
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# deploy.yml
|
# deploy.yml
|
||||||
- name: Автоматический деплой Telegram-бота
|
- name: Автоматический деплой Telegram-бота
|
||||||
hosts: all
|
hosts: all
|
||||||
|
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
image_name: "leor156/quote-bot:{{ image_tag | default('latest') }}"
|
image_name: "leor156/quote-bot:{{ image_tag | default('latest') }}"
|
||||||
@@ -8,17 +9,36 @@
|
|||||||
container_state: "started"
|
container_state: "started"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Убеждаемся, что установлена библиотека Docker для Python
|
- name: Устанавливаем Docker и библиотеку для Python
|
||||||
apt:
|
apt:
|
||||||
name: python3-docker
|
name:
|
||||||
|
- docker.io
|
||||||
|
- python3-docker
|
||||||
state: present
|
state: present
|
||||||
update_cache: yes
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: Убеждаемся, что Docker запущен
|
||||||
|
service:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
- name: Скачиваем образ бота с Docker Hub
|
- name: Скачиваем образ бота с Docker Hub
|
||||||
community.docker.docker_image:
|
community.docker.docker_image:
|
||||||
name: "{{ image_name }}"
|
name: "{{ image_name }}"
|
||||||
source: pull
|
source: pull
|
||||||
|
|
||||||
|
- name: Создать папку, если она отсутствует
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /opt/quote-bot
|
||||||
|
state: directory
|
||||||
|
mode: '0700'
|
||||||
|
|
||||||
|
- name: Копируем .env файл на сервер
|
||||||
|
copy:
|
||||||
|
src: ../.env
|
||||||
|
dest: /opt/quote-bot/.env
|
||||||
|
|
||||||
- name: Запускаем контейнер
|
- name: Запускаем контейнер
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: "{{ container_name }}"
|
name: "{{ container_name }}"
|
||||||
@@ -26,9 +46,7 @@
|
|||||||
state: "{{ container_state }}"
|
state: "{{ container_state }}"
|
||||||
restart_policy: unless-stopped
|
restart_policy: unless-stopped
|
||||||
pull: always
|
pull: always
|
||||||
env:
|
env_file: /opt/quote-bot/.env
|
||||||
TOKEN: "{{ lookup('env', 'BOT_TOKEN') }}"
|
|
||||||
ADMIN_IDS: "{{ lookup('env', 'ADMIN_ID_TG') }}"
|
|
||||||
|
|
||||||
- name: Чистка
|
- name: Чистка
|
||||||
community.docker.docker_prune:
|
community.docker.docker_prune:
|
||||||
|
|||||||
Reference in New Issue
Block a user