From 187c2bcc1b45a34b59652ed68103e83c17386e20 Mon Sep 17 00:00:00 2001 From: LeoR156 <277007013+LeoR156@users.noreply.github.com> Date: Tue, 15 Sep 2026 15:29:49 +0500 Subject: [PATCH] Update README.md and update logic CI/CD and ansible playbook --- .gitlab-ci.yml | 7 ++++--- README.md | 38 ++++++++++++++++++++++++++++++++++-- auto-deployment/A_deploy.yml | 28 +++++++++++++++++++++----- 3 files changed, 63 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c9b0ff1..d8fc74a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,4 @@ +# Универсальная группа раннеров default: tags: - universal @@ -48,10 +49,10 @@ deploy_to_server: - chmod 600 ~/.ssh/id_ed25519 - ansible-galaxy collection install community.docker script: + - echo "BOT_TOKEN=$BOT_TOKEN" > .env + - echo "ADMIN_IDS=$ADMIN_ID_TG" >> .env - cd auto-deployment/ - - ansible-playbook -i inventory.ini A_deploy.yml - --extra-vars "image_tag=$CI_COMMIT_SHORT_SHA" - + - ansible-playbook -i inventory.ini A_deploy.yml --extra-vars "image_tag=$CI_COMMIT_SHORT_SHA" environment: name: production url: http://$BOT_SERVER_IP diff --git a/README.md b/README.md index 0f60e85..1c91a04 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,36 @@ -### Цитатный бот -#### .....Скоро..... +# Цитатный телеграмм бот с авторазвёртыванием. + +### Что умеет данный бот? +* Отправлять рандомную цитату по запросу ``` /quote ```. +* По команде ``` /stats ``` показывать, сколько цитат в базе есть на данный момент. + +### Возможности для администратора: +* Добавлять новые цитаты командой ``` /add <текст цитаты> ```. + +## Как это развернуть? +### вам понадобится: +* Зарубежный Linux сервер на Ubuntu или Debian. +* Токен вашего телеграмм бота. Можно получить здесь: [BotFather](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 ` и добавте в него данные: +``` +TOKEN=your_token_here # Замените на реальный токен +ADMIN_IDS=123456789,987654321 # Напишите свой id или id того аккаунта, с которого будет осущесвляться добавление цитат. ID может быть несколько, порядок записи в примере. +``` +* Перейдите в папку ` auto-deployment ` командой ` cd auto-deployment `. +* Отредактируйте файл инвентори командой ` nano inventory.ini `. Удалите оттуда всю информацию и добавьте следующее: + +``` +[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` + +##### Готово, через несколько минут бот заработает. \ No newline at end of file diff --git a/auto-deployment/A_deploy.yml b/auto-deployment/A_deploy.yml index 2ce867f..5e2015f 100644 --- a/auto-deployment/A_deploy.yml +++ b/auto-deployment/A_deploy.yml @@ -1,6 +1,7 @@ # deploy.yml - name: Автоматический деплой Telegram-бота hosts: all + vars: image_name: "leor156/quote-bot:{{ image_tag | default('latest') }}" @@ -8,17 +9,36 @@ container_state: "started" tasks: - - name: Убеждаемся, что установлена библиотека Docker для Python + - name: Устанавливаем Docker и библиотеку для Python apt: - name: python3-docker + name: + - docker.io + - python3-docker state: present update_cache: yes + - name: Убеждаемся, что Docker запущен + service: + name: docker + state: started + enabled: yes + - name: Скачиваем образ бота с Docker Hub community.docker.docker_image: name: "{{ image_name }}" 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: Запускаем контейнер community.docker.docker_container: name: "{{ container_name }}" @@ -26,9 +46,7 @@ state: "{{ container_state }}" restart_policy: unless-stopped pull: always - env: - TOKEN: "{{ lookup('env', 'BOT_TOKEN') }}" - ADMIN_IDS: "{{ lookup('env', 'ADMIN_ID_TG') }}" + env_file: /opt/quote-bot/.env - name: Чистка community.docker.docker_prune: