Был создан сайт на Django, основной функционал — блог. Сайт поддерживает локализацию. Цель разработки — улучшение навыков и представление информации об авторе.
База данных — PostgreSQL. Разработку, проектирование и развертывание сайта я выполнял самостоятельно. Запросы проксируются через nginx, используется gunicorn. Сайт поддерживает HTTPS, сертификат получен от Let’s Encrypt. Проект полностью завернут в Docker Compose и поднимается одной командой. Размещён сайт на моём личном сервере, домен также принадлежит мне.
Настроен небольшой CI/CD-пайплайн: при пуше в main сервер
автоматически обновляет файлы и перезапускает контейнеры.
Это мой первый сайт на Django, который дошёл до реального релиза. Ранее я пробовал Django, но проекты оставались в «сыром» виде. Экспериментировал с асинхронным сервером и веб-сокетами (чат и небольшая игра). Но именно блог я довёл до конца и выпустил в сеть.
Почему «часть 1»? У меня есть планы развивать этот проект дальше. Это и интересно, и потенциально полезно. Но планы могут так и остаться планами.
Сайт я написал примерно полгода назад, но поднял только недавно — сначала была сессия, потом отдых у родителей и другие дела.
При разработке больших проблем не возникло: Django оказался удобным и продуманным инструментом. А вот при развертывании трудности были.
Сначала нужен был сервер. Домашний компьютер я использовать не хотел, поэтому решил поставить Raspberry Pi. Тут же возникли трудности: понадобился корпус, который я распечатал на 3D-принтере. Потом выяснилось, что место для сервера я выбрал неудачное — рядом с радиатором и домашним ПК, из-за чего там было слишком жарко. Пришлось прикрутить вентилятор. Спасибо моему папе за советы по электронике.
Сервер готов! Но запуск сайта сразу не вышел. Проблемой оказался мой роутер Xiaomi Mi Router 4C — он занимает 80-й порт, отключить это невозможно. Решение оказалось одно (кроме покупки нового роутера) — перепрошивка на OpenWRT (ссылка). Долго не решался, но всё оказалось довольно просто. А нужен 80-й порт именно для получения TLS-сертификата и работы с HTTPS.
После этого я ещё примерно неделю поднимал сайт в свободное от учёбы время: заворачивал всё в Docker, настраивал nginx и окружение. И вот — пишу этот пост.