Свой сайт на Django без программирования

Руководство по созданию сайта на Django с использованием Ubuntu сервера и моего репозитория

Кому подойдет?

Прежде всего тем, кто способен зайти на Ubuntu сервер по SSH, создать пользователя и прописать ему sudo права. Если вы сейчас не поняли, о чем я сказал, то дальнейший текст можно не читать. Другие способности кроме создания пользователя я надеюсь и не потребуются)

Кому пригодится?

Думаю полезно будет изучающим Python и особенно Django, а также тем, кому нужен быстрый, личный сайт с блогом и другими функциональными модулями без глючных-тормознутых-бесплатных CMS . Категории создаются через панель управления. наполняются материалами через редактор в админ разделе. Код и URL-адреса править из коробки не нужно — все работает через re_path и базу данных. Добавил категорию, закинул в нее статьи и новый раздел на сайте готов. Неправильные пути в запросах, админская часть или исключения обслуживаются через тот же repath поэтому 404,403,401,503,500 работает без исключений и хендлеров просто выводя сообщение на сайте, не выходя за свой функционал.

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

Кастомный тег url_with_timestamp в шаблонах добавляет к пути css и js файлам время создания, поэтому когда вы закинули обнову в скриптах или стилях. Нет нужды очищать кэшы или что-то перезапускать. Новый файл юзер сразу загрузит.

Что тут можно почерпнуть:

  1. Как запустить Django полностью асинхронно.

  2. Как не использовать ORM Django, которое не дружит с асинхронностью.

  3. Как связать сайт и Telegram-бота, чтобы они взаимодействовали.

  4. Как добавить Svelte в Django-проект.

  5. Как использовать более легкий posix_ipc вместо Redis.

  6. Как могут помочь bash-скрипты в развертывании проекта.

Подробности

1. Параметры Gunicorn

Параметры Gunicorn нужно подбирать под ваше оборудование. Тестирование проводилось на Ubuntu 22 Server с 2 ядрами и 2 ГБ памяти. Для работы достаточно 1 ГБ памяти, но желательно иметь 2 ядра, особенно если вы используете Fail2Ban, Telegram-бота или другие дополнительные сервисы.

2. Аутентификация

На личном сайте я не использовал Django-аутентификацию, да и не работает она с async как надо. Все управление происходит через проверку статичного IP-адреса, который обрабатывает декоратор. Ответы на сайте можно отправлять через бота. Можно добавить SSL-аутентификацию для админ панели, но это необязательно. Для формы чата есть капча кастомная.

3. Взаимодействие с ботом

Если пользователь пишет сообщение на сайте, оно автоматически приходит в бота. Через бота можно ответить, и пользователь получит сообщение на сайте.

4. Использование Svelte

Это первая моя попытка интеграции Svelte в Django-проект. Все работает корректно. Позже планирую расширить использования функционала Svelte, но для текущих задач этого достаточно.

5. Замена Redis на posix_ipc

Redis может быть слишком тяжелым для минимальной конфигурации сервера. Вместо него используется posix_ipc с простейшим функционалом для хранения разделов сайта и содержимого в памяти. Как работает. Запускается при старте из systemd помещая таблицы по списку имен pandas датафреймами в память, после обновляет их по запросу при изменении.

6. Управление сервером

Тут скрипт для установки и настройки всего system_setup.sh. У себя обычно использую для управления удаленными серверами я Python-скрипты через paramiko. Можно выбирать команды через меню и обновлять все необходимое. Набор команд примерно тот-же что и в sh.

Создание пользователя

Создайте пользователя site_user:

sudo adduser site_user

Чтобы пользователь мог выполнять команды sudo без ввода пароля, отредактируйте файл /etc/sudoers:

sudo visudo

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

site_user ALL=(ALL) NOPASSWD: ALL

Добавьте пользователя в группу sudo:

sudo usermod -aG sudo site_user

Выйдите из текущей SSH-сессии и войдите снова как site_user. Затем запретите вход по SSH для root:

sudo nano /etc/ssh/sshd_config

Найдите строку:

PermitRootLogin

Измените ее на:

PermitRootLogin no

Установка сайта

в домашней директории пользователя. По умолчанию тут это /home/site_user
git clone https://gitverse.ru/DADementr/sfx_site.git

Установите права на выполнение скрипта:

chmod 775 system_setup.sh

Настройка файла .env

Откройте файл .env и настройте параметры под себя:

  • USER — должно быть site_user

  • SITE_DIR_NAME — sfx_site

С другими именами не тестировал. Остальное точно поменять под себя!
Домен, IP-адрес, пароли, почта, ID и токен Telegram-бота, также нужно настроить внимательно.

Создайте бота через @botfather в Telegram. Чтобы узнать свой ID, можно использовать Telegram Plus или веб-версию.

Сгенерируйте новый или измените существующий SECRET_KEY Django и пароль к базе данных.

Мониторинг сервера через бота

Через бота можно мониторить состояние сервера. Команда /stat покажет:

Да, вакуум логов и ограничение их размера снизит потребление на диске до 3ГБ

Да, вакуум логов и ограничение их размера снизит потребление на диске до 3ГБ

Запуск проекта

Запустите скрипт system_setup.sh без использования sudo:

./system_setup.sh

Введите пароль и дождитесь завершения. Проверьте, работает ли сайт по домену или IP-адресу.

Если сайт не отображается, проверьте следующие службы:

sudo systemctl status gunicorn sudo systemctl status gunicorn.socket sudo systemctl status nginx

Все службы должны быть активны. Если это не так, проверьте логи и настройки.

Настройка домена

Убедитесь, что A-запись домена указывает на IP вашего сервера. Удалите AAAA-запись (IPv6), если она есть, чтобы избежать конфликтов.

Настройка сайта

Измените заголовок и описание главной страницы через панель управления. Категории и статьи можно изменять и удалять.

Цвета сайта находятся в файле /myspa/src/lib/site/global.css. Чтобы применить изменения, выполните:

cd myspa npm install npm run build

Подключение HTTPS и Fail2Ban

После успешного развертывания сайта выполните скрипт certbot_fb.sh для подключения HTTPS и настройки Fail2Ban.

Поздравляю, вы великолепны!

Ссылка на репозиторий

Более подробнее в readme.md в репо

Демонстрацию работы можно посмотреть на моем сайта ссылка в профиле. Почти тоже самое, но чуть чуть сложнее под личные нужды.
Про баги и еще что, пишите в телегу или через issues в репо.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

1
Автор поста оценил этот комментарий

Я против судо юзеров без пароля в любом виде! 😎

раскрыть ветку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества