Files
2020-dq/README.md
2026-02-21 02:03:37 +03:00

132 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DicQuo (Цитаты, Афоризмы и Факты)
**Dicquo** — это коллекция отобранных вручную цитат, оформленных с уважением к типографике. Место для вдумчивого чтения, переосмысления и поиска вдохновения. Проект создан как пространство, где типографика встречается со смыслом, а технологии помогают контенту выглядеть безупречно.
Основные цели проекта:
* **Типографика как искусство:** Разработка и тестирование собственных алгоритмов типографирования (висячая пунктуация, неразрывные пробелы, правильные тире) из библиотеки `etpgrf` (доступен в [GitHub](https://github.com/erjemin/etpgrf), [GitVerse](https://gitverse.ru/erjemin/etpgrf) и self-hosted [Cube2](https://git.cube2.ru/erjemin/2025-etpgrf), онлайн версия развёрнута на [typograph.cube2.ru](https://typograph.cube2.ru/)).
* **SEO-эксперименты:** Исследование влияния микроразметки, мета-тегов и семантической верстки на индексацию поисковыми системами.
* **Технологический стек:** Современный Django, Docker, CI/CD и автоматизация деплоя.
Развернут на [dq.cube2.ru](https://dq.cube2.ru).
---
## Структура файлов на сервере (Production)
После правильного развертывания, папка проекта на сервере (например, `~/docker-apps/dicquo/`) должна выглядеть так:
```text
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-данных:
```bash
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 (на хосте) должен иметь доступ к статике и медиа.
**Права на папки проекта:**
```bash
# Разрешаем запись в базу и медиа для всех (самый простой способ избежать проблем с 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) для всех пользователей по пути к проекту:
```bash
# Разрешаем "проход" через домашнюю папку (чтение файлов при этом остается закрытым, только доступ к известным путям)
chmod o+x /home/username
chmod o+x /home/username/docker-apps
chmod o+x /home/username/docker-apps/dicquo
```
> *Без этого шага Nginx будет выдавать 403 Forbidden на картинки и статику.*
### 5. Запуск
```bash
docker compose up -d
```
При первом запуске контейнер автоматически:
* Применит миграции.
* Соберет статику.
* Сгенерирует конфиг для Nginx в папке `config/nginx/`.
### 6. Настройка Nginx и SSL
1. **Подключение конфига:**
Создайте симлинк на сгенерированный конфиг:
```bash
sudo ln -s /home/username/docker-apps/dicquo/config/nginx/dq-app--external-nginx.conf /etc/nginx/sites-enabled/dq-app.conf
```
2. **Проверка и релоад:**
```bash
sudo nginx -t
sudo systemctl reload nginx
```
3. **Получение SSL сертификата (Certbot):**
```bash
sudo certbot --nginx -d dq.cube2.ru
```
---
## Разработка (Dev)
Для локального запуска используется `docker-compose.yml` (он же dev-версия).
```bash
docker compose up --build
```
Проект будет доступен по адресу: http://127.0.0.1:8008
## ToDo
* В будущем, возможно, сделать API для предоставления цитат вешним потребителям
(по темам, авторам и т.п.).
* Попробовать парсинг **и разметку** цитат с внешних сайтов.
* Telegram-бот.