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
- Ручная установка на сервере (Ubuntu server)
- Автоматизированная установка с Docker (рекомендованный метод)
Этот метод подразумевает вручную настройку всех компонентов на сервере. Вам потребуется установить все необходимые зависимости, настроить базу данных, запустить сервисы и т.д.
Обновите вашу систему:
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
curl -sSL https://install.python-poetry.org | python3 -
Добавьте Poetry в вашу PATH переменную (документация).
Сконфигурируйте Poetry так, чтобы он создавал виртуальное окружение внутри проекта:
poetry config virtualenvs.in-project true
cd /var/www
git clone https://github.com/SerHappy/CarWebBot.git
cd CarWebBot
poetry install
Текущий проект использует файл .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_BROKER_URL
: URL брокера для Celery.Пример:
"your-celery-broker-url"
. По умолчаниюredis://localhost:6379
. Для Docker-контейнера это обязательный параметр, используйте тутredis://redis:6379
.
-
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
.
Сохраните и закройте файл.
После заполнения файла конфигурации .env
, вам необходимо создать файл сессии Telethon для корректной работы сервера с Telegram API. Для этого выполните следующий шаг:
-
Запустите скрипт
create_telethon_session.py
:poetry run python3.11 create_telethon_session.py
Скрипт запросит у вас некоторую информацию и автоматически создаст файл сессии Telethon, который будет использоваться вашим приложением.
-
Убедитесь, что файл сессии был создан в правильном месте и имеет корректные права доступа.
Этот шаг необходим для установления соединения с API Telegram и корректной работы вашего сервера.
Запустите скрипт безопасной установки для 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
В корне проекта есть пример файла my.cnf
, который можно использовать как отправную точку для настройки MySQL. Если вы хотите использовать эти настройки, выполните следующие шаги:
-
Скопируйте файл
my.cnf
из корня проекта в каталог MySQL:sudo cp /var/www/CarWebBot/my.cnf /etc/mysql/my.cnf
-
Перезапустите службу MySQL, чтобы применить изменения:
sudo systemctl restart mysql
Эти настройки предназначены для оптимизации использования памяти и производительности и могут быть дополнительно настроены в зависимости от ваших потребностей.
Не забудьте тестировать систему после применения этих настроек, чтобы убедиться, что все работает корректно.
Отредактируйте конфигурацию Redis:
sudo nano /etc/redis/redis.conf
Замените строку supervised no
на supervised systemd
.
Перезапустите Redis:
sudo systemctl restart redis.service
Создайте новый файл 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
Создайте новый файл конфигурации 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
Создайте новый файл 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 и скрипт initial_setup.bash
. Вам нужно будет только клонировать репозиторий, заполнить файл .env
и запустить скрипт. Все остальные действия, включая создание сессии Telethon, будут выполнены автоматически.
-
Подготовка
Установите 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
-
Клонирование проекта:
git clone https://github.com/SerHappy/CarWebBot.git cd CarWebBot
-
Настройка файла
.env
:Отредактируйте файл
.env
, следуя инструкциям в этом разделе, и сохраните изменения.ВНИМАНИЕ: В переменной
ALLOWED_HOSTS
необходимо указать ваш домен и 127.0.0.1, разделенные запятыми.DB_HOST
должен бытьdb
, а брокер CeleryCELERY_BROKER_URL
-redis://redis:6379/0
. -
Настройка файла Nginx
Отредактируйте файл
CarWebBot.conf
. Заменитеyour_domain
на ваш домен и сохраните изменения. -
Опционально: Настройка файла конфигурации MySQL в Docker
Если вы хотите оптимизировать конфигурацию MySQL в контейнере Docker, вы можете настроить предоставленный файл
my.cnf
. Все пути для копирования уже прописаны в docker-compose.yml, поэтому вам нужно будет только отредактировать файл по желанию. -
Запуск скрипта установки:
chmod +x initial_setup.bash ./initial_setup.bash
P.S Если при выполнении скрипта вы решили дампить БД, то медиа автоматически не переносится, поэтому вам нужно будет вручную скопировать все содержимое старой директории media и вставить в новую.
-
Запуск проекта: Если вы не захотели собрать и запускать проект с помощью скрипта, вы можете сделать это вручную:
docker-compose up -d --build
Теперь ваш проект должен быть развернут и запущен на вашем сервере. Команды для управления Docker Compose можно найти здесь.