Giter Site home page Giter Site logo

carwebbot's Introduction

CarWebBot

Screenshot 2023-07-22 at 20-42-56 CarWebBot

Описание проекта

CarWebBot - это веб-сервер на Django, который обеспечивает функциональность для управления контентом Telegram канала. Администраторы могут создавать, редактировать и удалять объявления, которые затем публикуются в телеграмм канале.

Основные функции

  • Создание, редактирование и удаление объявлений для публикации в Telegram канале
  • Возможность добавлять неограниченное количество изображений и видео к сообщениям
  • Отложенные объявления

Технологии

Бэкенд

  • Python 3.11
  • Django 4.2
  • MySQL
  • Redis
  • Celery (В связке с Celery Beat)
  • Gunicorn
  • Telethon (вместо Telegram Bot API)
  • Nginx

Фронтенд

  • HTML
  • CSS
  • JavaScript
  • Bootstrap
  • Dropzone.js
  • Datepicker.js
  • Select2.js
  • AJAX

Окружение и инфраструктура

  • Docker
  • Docker Compose

Оглавление

Ручная установка на сервере

Этот метод подразумевает вручную настройку всех компонентов на сервере. Вам потребуется установить все необходимые зависимости, настроить базу данных, запустить сервисы и т.д.

Шаг 1: Подготовка

Обновите вашу систему:

sudo apt update
sudo apt upgrade

Установите Python 3.11:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.11

Установите необходимые пакеты

sudo apt install python3-pip libpython3.11-dev libmysqlclient-dev libssl-dev mysql-server default-libmysqlclient-dev nginx curl redis-server

Шаг 2: Установка Poetry

curl -sSL https://install.python-poetry.org | python3 -

Добавьте Poetry в вашу PATH переменную (документация).

Сконфигурируйте Poetry так, чтобы он создавал виртуальное окружение внутри проекта:

poetry config virtualenvs.in-project true

Шаг 3: Клонирование вашего проекта с GitHub

cd /var/www
git clone https://github.com/SerHappy/CarWebBot.git

Шаг 4: Установка зависимостей проекта

cd CarWebBot
poetry install

Шаг 5: Настройка переменных окружения

Текущий проект использует файл .env для управления переменными окружения. Для того чтобы проект работал корректно, нужно создать этот файл и заполнить его правильными значениями.

cd /var/www/CarWebBot
cp .env.example .env
nano .env

Отредактируйте файл .env и заполните его правильными значениями.

Обязательные переменные:

SECRET_KEY = value
ALLOWED_HOSTS = value
MAIN_CHANNEL_ID = value
MAIN_CHANNEL_NAME = value
TELETHON_API_ID = value
TELETHON_API_HASH = value

Необязательные переменные (для тестирования и разработки; не подходят для продакшена):

DEBUG = value # по умолчанию: True
LOGURU_FOLDER = value # по умолчанию: "logs/"
LOGURU_LEVEL = value # по умолчанию: "DEBUG"
LOGURU_FORMAT = value # по умолчанию: "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"
DB_ENGINE = value # по умолчанию: "django.db.backends.mysql"
DB_NAME = value # по умолчанию: "cars"
DB_USER = value # по умолчанию: "root"
DB_PASSWORD = value # по умолчанию: "root"
DB_HOST = value # по умолчанию: "localhost"
DB_PORT = value # по умолчанию: 3306
CELERY_BROKER_URL = value # по умолчанию: "redis://localhost:6379"
TELETHON_SESSION_NAME = value # по умолчанию: "session.session"
TELETHON_SYSTEM_VERSION = value # по умолчанию: "4.16.30-vxCUSTOM"
LOGIN_URL = value # по умолчанию: "/users/login/"
ANNOUNCEMENT_LIST_PER_PAGE = value # по умолчанию: 5
TAG_LIST_PER_PAGE = value # по умолчанию: 10

Обратите внимание:

  • Обязательные переменные должны быть настроены правильно, иначе проект не будет работать корректно.
  • Дефолтные настройки необязательных переменных предназначены для тестирования и разработки. Перед деплоем в продакшн убедитесь, что они настроены в соответствии с вашими потребностями и соответствуют требованиям безопасности.

Описание каждого ключа вы можете найти ниже:

Обязательные настройки

  • SECRET_KEY: Секретный ключ Django для вашего проекта, используемый для криптографической подписи.

    Пример: "6l-gr$8+qetg73mu+h1$49$6msube-3gz%&a907y^lakt650e&".

  • MAIN_CHANNEL_ID: Идентификатор основного канала Telegram.

    Пример: "100123456789".

  • MAIN_CHANNEL_NAME: Имя основного канала Telegram.

    Пример: "ChannelName".

  • TELETHON_API_ID: ID приложения для работы с Telethon, библиотекой Python для работы с API Telegram.

    Пример: 12345.

  • TELETHON_API_HASH: Секретный ключ приложения для работы с Telethon.

    Пример: "7d8fd77f6s6".

Настройки разработки (необязательно)

  • DEBUG: Указывает, должен ли Django использовать режим отладки.

    Пример: True или False. По умолчанию True. Обратите внимание, что страница регистрации доступна только в режиме отладки (True). Для продакшна установите значение False.

  • ALLOWED_HOSTS: Список хостов/доменов, на которых будет работать ваш проект Django. Обязательно добавьте ваш домен в этот список.

    Пример: 127.0.0.1, 8.8.8.8. По умолчанию 127.0.0.1.

Настройки логирования (необязательно)

  • LOGURU_FOLDER: Путь до папки для журналов Loguru.

    Пример: "my_log_folder/. По умолчанию logs.

  • LOGURU_LEVEL: Уровень логирования для Loguru.

    Пример: "INFO". По умолчанию DEBUG.

  • LOGURU_FORMAT: Формат логирования для Loguru.

    Пример: "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}". По умолчанию этот формат.

Настройки базы данных (необязательно)

  • DB_ENGINE: Движок базы данных Django.

    Пример: "django.db.backends.mysql". По умолчанию используется данный движок.

  • DB_NAME: Имя вашей базы данных.

    Пример: "my_db". По умолчанию cars.

  • DB_USER: Имя пользователя для доступа к вашей базе данных.

    Пример: "user". По умолчанию root.

  • DB_PASSWORD: Пароль для доступа к вашей базе данных.

    Пример: "password". По умолчанию root.

  • DB_HOST: Хост вашей базы данных.

    Пример: "db". По умолчанию localhost. Для Docker-контейнера это обязательный параметр, используйте тут db.

  • DB_PORT: Порт вашей базы данных.

    Пример: 1234. По умолчанию 3306.

Настройки очереди заданий Celery (необязательно)

  • CELERY_BROKER_URL: URL брокера для Celery.

    Пример: "your-celery-broker-url". По умолчанию redis://localhost:6379. Для Docker-контейнера это обязательный параметр, используйте тут redis://redis:6379.

Настройки Telethon (необязательно)

  • TELETHON_SESSION_NAME: Имя сессии для Telethon.

    Пример: "my_session". По умолчанию session.

  • TELETHON_SYSTEM_VERSION: Версия системы для Telethon.

    Пример: "4.16.30-vxCUSTOM". По умолчанию используется данная версия.

Другие необязательные настройки

  • LOGIN_URL: URL для входа в систему.

    Пример: "accounts/login/". По умолчанию /users/login/.

  • ANNOUNCEMENT_LIST_PER_PAGE: Количество объявлений на странице.

    Пример: 1. По умолчанию 5.

  • TAG_LIST_PER_PAGE: Количество тегов на странице.

    Пример: 1. По умолчанию 10.

Сохраните и закройте файл.

Шаг 6: Создание файла сессии Telethon

После заполнения файла конфигурации .env, вам необходимо создать файл сессии Telethon для корректной работы сервера с Telegram API. Для этого выполните следующий шаг:

  1. Запустите скрипт create_telethon_session.py:

    poetry run python3.11 create_telethon_session.py

    Скрипт запросит у вас некоторую информацию и автоматически создаст файл сессии Telethon, который будет использоваться вашим приложением.

  2. Убедитесь, что файл сессии был создан в правильном месте и имеет корректные права доступа.

Этот шаг необходим для установления соединения с API Telegram и корректной работы вашего сервера.

Шаг 7: Настройка MySQL

Запустите скрипт безопасной установки для MySQL:

sudo mysql_secure_installation

Войдите в MySQL:

sudo mysql

Создайте базу данных:

CREATE DATABASE cars;

Если вы столкнулись с ошибкой при установке MySQL ("SET PASSWORD has no significance for user 'root'@'localhost'"), выполните следующую команду:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'password';

Выйдите из MySQL:

exit;

Примените миграции:

cd /var/www/CarWebBot
poetry run python3.11 web/manage.py migrate

Опционально: Использование файла конфигурации MySQL

В корне проекта есть пример файла my.cnf, который можно использовать как отправную точку для настройки MySQL. Если вы хотите использовать эти настройки, выполните следующие шаги:

  1. Скопируйте файл my.cnf из корня проекта в каталог MySQL:

    sudo cp /var/www/CarWebBot/my.cnf /etc/mysql/my.cnf
  2. Перезапустите службу MySQL, чтобы применить изменения:

    sudo systemctl restart mysql

Эти настройки предназначены для оптимизации использования памяти и производительности и могут быть дополнительно настроены в зависимости от ваших потребностей.

Не забудьте тестировать систему после применения этих настроек, чтобы убедиться, что все работает корректно.

Шаг 8: Настройка Redis

Отредактируйте конфигурацию Redis:

sudo nano /etc/redis/redis.conf

Замените строку supervised no на supervised systemd.

Перезапустите Redis:

sudo systemctl restart redis.service

Шаг 9: Настройка Gunicorn

Создайте новый файл gunicorn.service:

sudo nano /etc/systemd/system/gunicorn.service

Добавьте следующие строки в файл:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root


Group=www-data
WorkingDirectory=/var/www/CarWebBot/web
ExecStart=/var/www/CarWebBot/.venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/var/www/CarWebBot/web/CarWebBot.sock core.wsgi:application

[Install]
WantedBy=multi-user.target

Запустите Gunicorn и добавьте его в автозагрузку:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

Шаг 10: Настройка Nginx

Создайте новый файл конфигурации Nginx:

sudo nano /etc/nginx/sites-available/CarWebBot

Добавьте следующие строки в файл, заменив your_domain на ваш домен:

server {
    listen 80;
    server_name your_domain;
    client_max_body_size 0;


 access_log /var/log/nginx/access.log;

    location /static/ {
        alias /var/www/CarWebBot/web/static/;
    }

    location /media/ {
        alias /var/www/CarWebBot/web/media/;
    }

    location / {
        proxy_pass http://unix:/var/www/CarWebBot/web/CarWebBot.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Создайте символическую ссылку на файл конфигурации Nginx:

sudo ln -s /etc/nginx/sites-available/CarWebBot /etc/nginx/sites-enabled/

Проверьте наличие ошибок в конфигурации Nginx:

sudo nginx -t

Если все в порядке, перезапустите Nginx:

sudo systemctl restart nginx

Шаг 11: Настройка Celery и Celery Beat

Создайте новый файл celery.service:

sudo nano /etc/systemd/system/celery.service

Добавьте следующие строки в файл:

[Unit]
Description=Celery Service
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/var/www/CarWebBot/web
ExecStart=/var/www/CarWebBot/.venv/bin/celery -A core worker --loglevel=info

[Install]
WantedBy=multi-user.target

Запустите службу Celery:

sudo systemctl start celery
sudo systemctl enable celery

Создайте новый файл celerybeat.service:

sudo nano /etc/systemd/system/celerybeat.service

Добавьте следующие строки в файл:

[Unit]
Description=Celery Beat Service
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/var/www/CarWebBot/web
ExecStart=/var/www/CarWebBot/.venv/bin/celery -A core beat --loglevel=info

[Install]
WantedBy=multi-user.target

Запустите службу Celery Beat:

sudo systemctl start celerybeat
sudo systemctl enable celerybeat

После завершения этих шагов, проект должен быть развернут и готов к использованию.

Автоматизированная установка с Docker

Этот метод позволяет автоматизировать процесс установки, используя Docker и скрипт initial_setup.bash. Вам нужно будет только клонировать репозиторий, заполнить файл .env и запустить скрипт. Все остальные действия, включая создание сессии Telethon, будут выполнены автоматически.

  1. Подготовка

    Установите Docker и Docker Compose, используя эту инструкцию. Так же установите python версии 3.11 и git:

    sudo apt install software-properties-common -y
    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt install python3.11
    sudo apt install git
  2. Клонирование проекта:

    git clone https://github.com/SerHappy/CarWebBot.git
    cd CarWebBot
  3. Настройка файла .env:

    Отредактируйте файл .env, следуя инструкциям в этом разделе, и сохраните изменения.

    ВНИМАНИЕ: В переменной ALLOWED_HOSTS необходимо указать ваш домен и 127.0.0.1, разделенные запятыми. DB_HOST должен быть db, а брокер Celery CELERY_BROKER_URL - redis://redis:6379/0.

  4. Настройка файла Nginx

    Отредактируйте файл CarWebBot.conf. Замените your_domain на ваш домен и сохраните изменения.

  5. Опционально: Настройка файла конфигурации MySQL в Docker

    Если вы хотите оптимизировать конфигурацию MySQL в контейнере Docker, вы можете настроить предоставленный файл my.cnf. Все пути для копирования уже прописаны в docker-compose.yml, поэтому вам нужно будет только отредактировать файл по желанию.

  6. Запуск скрипта установки:

    chmod +x initial_setup.bash
    ./initial_setup.bash

    P.S Если при выполнении скрипта вы решили дампить БД, то медиа автоматически не переносится, поэтому вам нужно будет вручную скопировать все содержимое старой директории media и вставить в новую.

  7. Запуск проекта: Если вы не захотели собрать и запускать проект с помощью скрипта, вы можете сделать это вручную:

    docker-compose up -d --build

Теперь ваш проект должен быть развернут и запущен на вашем сервере. Команды для управления Docker Compose можно найти здесь.

carwebbot's People

Contributors

serhappy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.