erjemin 86bfd9b07b
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m34s
fix: "обход" скрытых миграций TagIt для продакшн.
2026-02-25 21:31:33 +03:00
2026-02-22 13:00:49 +03:00
2026-02-21 02:03:37 +03:00

DicQuo (Цитаты, Афоризмы и Факты)

Dicquo — это коллекция отобранных вручную цитат, оформленных с уважением к типографике. Место для вдумчивого чтения, переосмысления и поиска вдохновения. Проект создан как пространство, где типографика встречается со смыслом, а технологии помогают контенту выглядеть безупречно.

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

  • Типографика как искусство: Разработка и тестирование собственных алгоритмов типографирования (висячая пунктуация, неразрывные пробелы, правильные тире) из библиотеки etpgrf (доступен в GitHub, GitVerse и self-hosted Cube2, онлайн версия развёрнута на typograph.cube2.ru).
  • SEO-эксперименты: Исследование влияния микроразметки, мета-тегов и семантической верстки на индексацию поисковыми системами.
  • Технологический стек: Современный Django, Docker, CI/CD и автоматизация деплоя.

Развернут на dq.cube2.ru.


Структура файлов на сервере (Production)

После правильного развертывания, папка проекта на сервере (например, ~/docker-apps/dicquo/) должна выглядеть так:

dicquo/
├── docker-compose.yml       # Переименованный docker-compose.prod.yml из этого репозитория (запускает контейнеры)
├── .env                     # Файл с переменными окружения и секретами (не пушить в git!)
├── database/                # Папка для базы данных (Persistent Volume)
│   ├── db.sqlite3           # Фактический файл базы данных
├── media/                   # Папка с медиа-файлами (Persistent Volume)
│   ├── img2/                # Картинки для цитат (доступны через Nginx)
│   └── errors/              # Картинки для страниц ошибок (404, 500)
└── config/                  # Папка для конфигураций (Генерируется контейнером)
    └── nginx/
        ├── dq-app--external-nginx.conf  # Конфиг для внешнего Nginx (скопируется из контейнера при первом запуске)
        └── nginx_dq.conf.example        # Образец конфига для внешнего Nginx (не используется в продакшене)

Развёртывание (Deployment)

Проект полностью упакован в Docker и разворачивается с помощью docker compose. Ниже приведена инструкция для развертывания на чистом Linux-сервере (Ubuntu/Debian, архитектуры AMD/ARM).

1. Подготовка структуры

Создайте директорию для проекта (например, в домашней папке пользователя) и необходимые подпапки для persistent-данных:

mkdir -p ~/docker-apps/dicquo
cd ~/docker-apps/dicquo
mkdir -p database media config

2. Файлы конфигурации

Вам понадобятся два файла из репозитория (или их содержимое):

  1. docker-compose.prod.yml -> сохраните его на сервере как docker-compose.yml.
  2. .env -> создайте на основе .env.sample, заполнив секретами для продакшена.

Важные переменные в .env:

  • HOST_PROJECT_PATH: Полный путь к папке проекта на хосте (например, /home/username/docker-apps/dicquo). Используется для корректной генерации конфига Nginx.
  • DJANGO_ALLOWED_HOSTS: Список доменов через запятую (например, dq.cube2.ru,127.0.0.1).

3. Перенос данных (Опционально)

Если вы мигрируете с dev-окружения или другого сервера, можно просто скопировать файлы базы данных и медиа.

Скопируйте файл базы database/db.sqlite3 и содержимое папки media/ в соответсвующие папки на сервере.

4. Настройка прав доступа (Permissions) ⚠️

Это критически важный этап.

  1. Docker-контейнер (с нашим бэкендом Django и Gunicorn) должн иметь доступ к примонтированным папкам.
  2. Внешний Nginx (на хосте) должен иметь доступ к статике и медиа.

Права на папки проекта:

# Разрешаем запись в базу и медиа для всех (самый простой способ избежать проблем с UID внутри Docker)
sudo chmod 777 database
sudo chmod 666 database/db.sqlite3
sudo chmod -R 755 media

Права на родительские директории (Pass-through): Если проект лежит в домашней папке пользователя (/home/username/...), то Nginx (пользователь www-data) по умолчанию не сможет туда попасть. Нужно разрешить "проход" (execute) для всех пользователей по пути к проекту:

# Разрешаем "проход" через домашнюю папку (чтение файлов при этом остается закрытым, только доступ к известным путям)
chmod o+x /home/username
chmod o+x /home/username/docker-apps
chmod o+x /home/username/docker-apps/dicquo

Без этого шага Nginx будет выдавать 403 Forbidden на картинки и статику.

5. Запуск

docker compose up -d

При первом запуске контейнер автоматически:

  • Применит миграции.
  • Соберет статику.
  • Сгенерирует конфиг для Nginx в папке config/nginx/.

6. Настройка Nginx и SSL

  1. Подключение конфига: Создайте симлинк на сгенерированный конфиг:
    sudo ln -s /home/username/docker-apps/dicquo/config/nginx/dq-app--external-nginx.conf /etc/nginx/sites-enabled/dq-app.conf
    
  2. Проверка и релоад:
    sudo nginx -t
    sudo systemctl reload nginx
    
  3. Получение SSL сертификата (Certbot):
    sudo certbot --nginx -d dq.cube2.ru
    

Разработка (Dev)

Для локального запуска используется docker-compose.yml (он же dev-версия).

docker compose up --build

Проект будет доступен по адресу: http://127.0.0.1:8008

ToDo

  • В будущем, возможно, сделать API для предоставления цитат вешним потребителям (по темам, авторам и т.п.).
  • Попробовать парсинг и разметку цитат с внешних сайтов.
  • Telegram-бот.
Description
dq.cube2.ru – коллекция вручную отобранных цитат, оформленных с уважением к типографике. Место для медитаций и вдумчивого чтения.
https://dq.cube2.ru
Readme 4 MiB
Languages
Python 62.5%
HTML 19.7%
CSS 8.4%
JavaScript 6.4%
Dockerfile 3%