Files
new_vk_parser/README.md
T
2026-06-15 21:14:07 +05:00

200 lines
4.5 KiB
Markdown
Raw 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.
# VK Parser New Core
Первый чистый слой проекта:
- админка с источниками, пользователями, воркерами и raw-лентой;
- VK parser worker;
- VK storage uploader worker;
- PostgreSQL job queue.
Старый проект лежит в `original_project/` как справочник. Новый код живёт в `src/vk_parser_app/`.
## Что нужно на сервере
Ubuntu 22.04/24.04:
```bash
sudo apt update
sudo apt install -y python3 python3-venv python3-pip postgresql postgresql-contrib nginx git curl
```
Для будущей работы с видео:
```bash
sudo apt install -y ffmpeg
```
## БД
Пример:
```bash
sudo -u postgres psql
```
```sql
CREATE DATABASE vk_parser;
CREATE USER vk_parser_user WITH PASSWORD 'CHANGE_ME';
GRANT ALL PRIVILEGES ON DATABASE vk_parser TO vk_parser_user;
\c vk_parser
GRANT ALL ON SCHEMA public TO vk_parser_user;
```
## Установка проекта
```bash
cd /opt
sudo git clone <repo-url> vk-parser
sudo chown -R $USER:$USER /opt/vk-parser
cd /opt/vk-parser
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
```
Заполнить `.env`:
```env
APP_SECRET_KEY=long-random-string
ADMIN_BOOTSTRAP_LOGIN=admin
ADMIN_BOOTSTRAP_PASSWORD=long-admin-password
DB_HOST=localhost
DB_PORT=5432
DB_NAME=vk_parser
DB_USER=vk_parser_user
DB_PASSWORD=...
VK_ACCESS_TOKEN=...
VK_STORAGE_GROUP_ID=239548476
```
Важно: для `wall.post`, `wall.edit`, `photos.saveWallPhoto` нужен VK user token пользователя с правами в storage-группе. Community token для этого контура не подходит.
## Миграции
```bash
PYTHONPATH=src .venv/bin/python scripts/apply_migrations.py
```
Первый админ создаётся из `ADMIN_BOOTSTRAP_LOGIN` / `ADMIN_BOOTSTRAP_PASSWORD` при старте админки.
## Проверка VK storage
Без фото:
```bash
PYTHONPATH=src .venv/bin/python scripts/vk_storage_spike.py
```
С фото:
```bash
cp /path/to/photo.jpg sample_photo.jpg
PYTHONPATH=src .venv/bin/python scripts/vk_storage_spike.py
```
Скрипт должен вывести ссылку вида:
```text
https://vk.com/wall-239548476_123
```
После этого надо руками проверить:
- пост создан от имени storage-группы;
- админ/редактор группы может открыть и отредактировать пост;
- вложенное фото видно в браузере.
## Запуск локально
Админка:
```bash
PYTHONPATH=src .venv/bin/uvicorn vk_parser_app.admin:app --host 0.0.0.0 --port 8080
```
Парсер:
```bash
PYTHONPATH=src .venv/bin/python -m vk_parser_app.workers.parser
```
VK storage uploader:
```bash
PYTHONPATH=src .venv/bin/python -m vk_parser_app.workers.vk_storage_uploader
```
## systemd units
Минимальный `vk-admin.service`:
```ini
[Unit]
Description=VK Parser Admin
After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/vk-parser
Environment=PYTHONPATH=/opt/vk-parser/src
ExecStart=/opt/vk-parser/.venv/bin/uvicorn vk_parser_app.admin:app --host 0.0.0.0 --port 8080
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
`vk-parser.service`:
```ini
[Unit]
Description=VK Parser Worker
After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/vk-parser
Environment=PYTHONPATH=/opt/vk-parser/src
ExecStart=/opt/vk-parser/.venv/bin/python -m vk_parser_app.workers.parser
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
`vk-storage-uploader.service`:
```ini
[Unit]
Description=VK Storage Uploader Worker
After=network.target postgresql.service
[Service]
WorkingDirectory=/opt/vk-parser
Environment=PYTHONPATH=/opt/vk-parser/src
ExecStart=/opt/vk-parser/.venv/bin/python -m vk_parser_app.workers.vk_storage_uploader
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
## Текущий pipeline
```text
sources(vk)
-> vk-parser
-> raw_posts + raw_post_media
-> jobs(type='vk.storage.copy')
-> vk-storage-uploader
-> wall.post в storage-группе
-> raw_posts.storage_post_url
```
Фото копируются в storage-группу. Видео в первой версии сохраняются как `link_only`/исходное VK-вложение, чтобы сначала стабилизировать основной контур.