Inkless0

0

Описание

Минималистичная блог платформа на Django для программистов и писателей. Работает в условиях сломанных cdn (без внешних зависимостей).

Языки

  • Python59,9%
  • HTML18,5%
  • CSS17,7%
  • Shell2,7%
  • Dockerfile1,2%
17 дней назад
README.md

Блог система Inkless0 beta

Персональный блог на Django 6.0 с редактором CKEditor 5 со всеми плюшками для блога и ничего лишнего...

Демонстрация блога

Данное описание написано моими руками, а не ИИ, поэтому, просьба почитать.

Сам код сгенерирован Qwen 3 Coder Next 80B q8, но я бы сказал что местами я приложил свои руки чтобы добиться того, что нужно, иногда приходилось описывать некоторые скиллы, искать документацию и подкладывать, чтобы добиться нужного результата.

История изменений

CHANGELOG.md.

Фишечки

  • Удобный редактор CKEditor 5 - позволяет загружать картинки из буфера обмена (например скриншоты), понимает markdown синтаксис, т.е. вы просто пишите

    ##
    а у вас заголовок первого уровня, пишите
    ```
    а у вас блок кода.

  • Ресайз и lightbox - при загрузке картинки создается ее уменьшенная копия в папке /data/media/thumbs/ больше никаких десятков фотографий в разрешении 4к в статье, только маленькие легкие картинки, а при клике грузится оригинальная полноразмерная картинка

  • Подсветка кода - куда нам программистам без подсветки кода в статьях, тут задействована библиотека Prism.js, которая подсвечивает номера строк, подсвечивает синтаксис и есть кнопочка для копирования листинга, сконфигурирована подсветка кода большинства языков.

  • Минималистичный дизайн - шаблон сделан настолько минималистичный, что нет никаких Bootstrap, нет Jquery, стили достаточно простые, но красивые, всё это слепила ИИ-шка, я немного подточил стили, поправил верстку.

  • Никаких внешних зависимостей - может работать без интернета или когда все cdn заблокируют.

  • SQLite/PostgreSQL - запускайте на любом слабом железе (SQLite) или используйте PostgreSQL для production-среды с более надежным хранением данных.

  • Конфигурация через переменные окружения - настройка проекта через

    .env
    файл или
    docker-compose.yml

Dev

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

Запуск блога через Docker

Установка и запуск

  1. Склонируйте репозиторий:

  2. Настройте переменные окружения:

    Создайте файл

    .env
    на основе
    .env.example
    и задайте необходимые переменные:

    • DJANGO_SUPERUSER_USERNAME
      — имя пользователя администратора (по умолчанию: admin в
      .env.example
      )
    • DJANGO_SUPERUSER_PASSWORD
      — пароль администратора (обязательно для production)
    • DJANGO_SECRET_KEY
      — секретный ключ Django (генерируется автоматически при пустом значении, но лучше задать вручную для production), сделать это можно как то так:
    python3 -c "import secrets; print(secrets.token_urlsafe(64))"

    или

    python -c "import secrets; print(secrets.token_urlsafe(64))"
    • DJANGO_DEBUG
      — режим отладки (по умолчанию: False в docker-compose.yml)
    • DJANGO_ALLOWED_HOSTS
      — разрешенные хосты через запятую (по умолчанию: 127.0.0.1,localhost). Добавьте IP-адрес вашего сервера или домен (например:
      192.168.1.3
      ) если доступ будет по нему, указываем именно то, что в браузере будет вбито (без порта) — либо хост, либо IP-адрес обращения
  3. Запустите приложение:

    Файл

    entrypoint.sh
    автоматически проверяет, существует ли файл базы данных:

    • Если
      db.sqlite3
      не найден → применяются миграции и создается суперпользователь
    • Если
      db.sqlite3
      существует → просто запускается сервер

    Суперпользователь создается из переменных окружения (из файла

    .env
    или
    docker-compose.yml
    ):

    • DJANGO_SUPERUSER_USERNAME
    • DJANGO_SUPERUSER_PASSWORD
  4. Откройте блог в браузере:

На данном этапе работает системная статика, типа стили, скрипты, но не работают картинки которые вы грузите, конфигурация предполагает использование NGINX

upstream django_app { server 127.0.0.1:9123; # имя сервиса из docker-compose.yml } server { listen 80; server_name myblog123.ru; # или укажи свой домен/IP: example.com 192.168.1.100 # Проксируем медиа-файлы из контейнера Django location /data/media/ { alias /docker_apps/myapp/app/data/media/; # тут надо до папки media которая внутри data expires 30d; add_header Cache-Control "public, immutable"; # Для картинок внутри статики (например /media/blog/...) try_files $uri $uri/ =404; } # Проксируем запросы к Django (все остальные пути) location / { proxy_pass http://django_app; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Для CKEditor и загрузки файлов client_max_body_size 10M; } }

Если всё работает - не забываем защититься

ports: - "127.0.0.1:9123:8000"

Ну и снова пересоздать

docker compose up -d

PostgreSQL (опционально)

Для более надежного хранения данных в production-среде. Чтобы использовать PostgreSQL:

  1. Раскомментируйте и задайте значения переменных в файле

    .env
    :

  2. Используйте

    docker-compose.postgres.yml
    :

Примечание: При переключении между SQLite и PostgreSQL может потребоваться пересоздание контейнера.

Docker Compose файлы

docker-compose.yml (SQLite по умолчанию)

Основной файл для запуска с SQLite базой данных. Не требует дополнительных сервисов.

docker-compose.postgres.yml (PostgreSQL)

Файл для запуска с PostgreSQL базой данных. Включает два сервиса:

  • web
    — основное приложение Django
  • db
    — PostgreSQL база данных

Команды Docker Compose

КомандаОписание
docker compose up --build
Сборка и запуск контейнера с SQLite (миграции применяются автоматически)
docker compose down
Остановка и удаление контейнера
docker compose up -d
Запуск в фоновом режиме (detached)
docker compose logs -f
Просмотр логов контейнера
docker compose restart
Перезапуск контейнера
docker compose -f docker-compose.postgres.yml up --build
Запуск с PostgreSQL

Кастомизация

Добавление кастомных стилей и тегов

Вы можете добавить собственный CSS, JavaScript или мета-теги в блог через специальные файлы:

Это жизненно необходимо для добавления всяких аналитик...

  • data/head_include.html
    — код для
    <head>
    (CSS, мета-теги)
  • data/body_include.html
    — JS код перед
    </body>

Файлы создаются автоматически при первом запуске.

Добавление favicon

В докер мы прокинули папку data и в ней создадутся файлы шаблонов...

Положим например в папку

data/media
файлик favicon.ico (есть много онлайн генераторов)

не забываем дать права

chmod 755 data/media/favicon.ico

Откроем файлик

nano data/head_include.html

и впишем

<link rel="icon" href="/favicon.ico" type="image/x-icon">

Далее, в nginx добавим alias для favicon в уже существующую конфигурацию:

server { ... # Отдача favicon.ico напрямую location = /favicon.ico { alias /docker_apps/myapp/data/media/favicon.ico; expires 30d; add_header Cache-Control "public, immutable"; } ... }

проверим и перезапустим

nginx -t service nginx reload

аналогичным методом можно добавить манифесты, иконки и другое...