From bd5cdcd870b4b889ab2630576288e278004e64f9 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sat, 21 Feb 2026 00:43:47 +0300 Subject: [PATCH] =?UTF-8?q?mod:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B7=D0=B2=D1=91=D1=80=D1=82=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 123 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 165d228..ac4c070 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,130 @@ -# DicQuo (цитаты и высказывания) +# DicQuo (Цитаты, Афоризмы и Факты) -Пет-проект ротации цитат и высказываний. Развернут на [dq.cube2.ru](https://dq.cube2.ru). +**Dicquo** — это коллекция отобранных вручную цитат, оформленных с уважением к типографике. Место для вдумчивого чтения, переосмысления и поиска вдохновения. Проект создан как пространство, где типографика встречается со смыслом, а технологии помогают контенту выглядеть безупречно. -Изначальная цель: -* Испытывать различные типографы (библиотеки и API), разрабатывать и тестировать свои - типографы и правила типографирования. -* Испытать, как содержание отдельных атрибуты (meta, keywords, description и т.п.) - влияют на поисковую выдачу. +Основные цели проекта: +* **Типографика как искусство:** Разработка и тестирование собственных алгоритмов типографирования (висячая пунктуация, неразрывные пробелы, правильные тире) из библиотеки `tpgrf` (доступен в [GitHub](https://github.com/erjemin/etpgrf), [GitVerse](https://gitverse.ru/erjemin/etpgrf) и self-hosted [Cube2](https://git.cube2.ru/erjemin/2025-etpgrf)). +* **SEO-эксперименты:** Исследование влияния микроразметки, мета-тегов и семантической верстки на индексацию поисковыми системами. +* **Технологический стек:** Современный Django, Docker, CI/CD и автоматизация деплоя. -[Инструкция по развертыванию на хостинге c CGI Passenger](deploy_to_dreamhost.md) +Развернут на [dq.cube2.ru](https://dq.cube2.ru). -## ToDo? +--- + +## Структура файлов на сервере (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 для предоставления цитат вешним потребителям (по темам, авторам и т.п.).