Docs: rewrite README with clear Docker and Docker Compose instructions; refactor app into package (auth, admin, pages, db); keep single entrypoint app.py

This commit is contained in:
2025-09-04 10:48:04 +03:00
parent cc767dcf46
commit f4e1bc8a95
8 changed files with 386 additions and 453 deletions

118
README.md
View File

@@ -1,51 +1,101 @@
# Flask UUID Pages Admin (SQLite)
# ForMe — мини CMS на Flask (SQLite)
Минималистичное Flaskприложение с SQLite:
- Админка доступна только пользователю `ruslan` с паролем `utOgbZ09ruslan` (по умолчанию).
- В админке можно вставлять HTML и публиковать страницы.
- Для каждой страницы генерируется UUIDссылка `/p/<uuid>`.
- Неавторизованный пользователь не видит админку и главную страницу (404). Страницы по UUID доступны всем, у кого есть ссылка.
Небольшое приложение для публикации HTMLстраниц по UUID.
## Запуск локально
Возможности
- Авторизация администратора (логин/пароль из переменных окружения).
- Публикация HTML со свободной разметкой; генерация ссылки `/p/<uuid>`.
- Редактирование и удаление опубликованных страниц в админке.
- На опубликованных страницах у авторизованных отображается плавающая кнопка “Админка”.
- Водяной знак “Made by Ruslan” в левом верхнем углу опубликованных страниц.
1. Создайте и активируйте виртуальное окружение (опционально):
Важно: функционал экспорта в PDF/Word удалён — код и зависимости очищены.
Windows PowerShell:
## Локальный запуск
```powershell
python -m venv .venv
.venv\\Scripts\\Activate.ps1
```
1) Создать и активировать виртуальное окружение (Windows PowerShell):
2. Установите зависимости:
```powershell
python -m venv .venv
.venv\Scripts\Activate.ps1
```
```powershell
pip install -r requirements.txt
```
2) Установить зависимости:
3. (Опционально) Переопределите настройки через переменные окружения:
```powershell
pip install -r requirements.txt
```
```powershell
$env:SECRET_KEY = "your-strong-secret-key"
$env:ADMIN_USERNAME = "ruslan"
$env:ADMIN_PASSWORD = "utOgbZ09ruslan"
```
3) (Опционально) Настроить переменные окружения:
4. Запустите сервер разработки:
```powershell
$env:SECRET_KEY = "your-strong-secret"
$env:ADMIN_USERNAME = "ruslan"
$env:ADMIN_PASSWORD = "utOgbZ09ruslan"
# путь для БД по умолчанию: ./app.db
```
```powershell
python app.py
```
4) Запустить приложение:
```powershell
python app.py
```
5) Открыть http://localhost:5000
## Маршруты
- `/login` — форма входа в админку.
- `/admin` — админ‑панель (только для авторизованных, иначе 404).
- `/p/<uuid>` — просмотр опубликованной страницы по UUID.
- `/` — редирект в админку для авторизованных, иначе 404.
- `/login`вход
- `/admin` — панель публикации и список страниц (только для авторизованных)
- `/p/<uuid>` — просмотр опубликованной страницы
- `/` — редиректит на `/login` или `/admin`
## Замечания по безопасности
## Запуск в Docker
- HTML хранится и отдаётся как есть. Предполагается, что контент вводит доверенный админ.
- В продакшне обязательно задайте `SECRET_KEY` и используйте HTTPS; настройте защищённые cookies.
В проекте есть `Dockerfile` (gunicorn) и `docker-compose.yml` с томом для БД.
Вариант A. Docker (без compose)
```bash
docker build -t forme .
docker run --name forme-web -p 5000:5000 \
-e SECRET_KEY=prod-secret \
-e ADMIN_USERNAME=ruslan \
-e ADMIN_PASSWORD=utOgbZ09ruslan \
-e DATABASE=/data/app.db \
-v forme_appdb:/data \
-d forme
```
Вариант B. Docker Compose
```bash
docker compose build
docker compose up -d
```
По умолчанию:
- Приложение доступно на `http://localhost:5000`
- Переменные окружения можно переопределить через `.env`
- База хранится в томе `appdb` по пути контейнера `/data/app.db`
## Структура проекта
```
app.py # точка входа
app/
__init__.py # create_app + регистрация блюпринтов
db.py # инициализация/доступ к SQLite
auth.py # логин/логаут и context processor
admin.py # админка: создать/редактировать/удалить
pages.py # публичные страницы / и /p/<uuid>
templates/
base.html, login.html, admin.html, edit.html
```
## Заметки по продакшену
- Обязательно задайте `SECRET_KEY` через переменные окружения.
- Смените дефолтные `ADMIN_USERNAME/ADMIN_PASSWORD`.
- Вынесите БД в том/персистентный диск.