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. Файлы конфигурации
Вам понадобятся два файла из репозитория (или их содержимое):
docker-compose.prod.yml-> сохраните его на сервере какdocker-compose.yml..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) ⚠️
Это критически важный этап.
- Docker-контейнер (с нашим бэкендом Django и Gunicorn) должн иметь доступ к примонтированным папкам.
- Внешний 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
- Подключение конфига:
Создайте симлинк на сгенерированный конфиг:
sudo ln -s /home/username/docker-apps/dicquo/config/nginx/dq-app--external-nginx.conf /etc/nginx/sites-enabled/dq-app.conf - Проверка и релоад:
sudo nginx -t sudo systemctl reload nginx - Получение 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-бот.