96 lines
5.4 KiB
Markdown
96 lines
5.4 KiB
Markdown
Файлообменник (fileshare) — сведения о релизе
|
|
|
|
Текущая версия: 0.10
|
|
Дата фиксации описания: 2026-04-17
|
|
|
|
--------------------------------------------------------------------------------
|
|
1. Назначение
|
|
--------------------------------------------------------------------------------
|
|
|
|
Веб-приложение на Go для обмена файлами: загрузка на сервер, хранение на диске,
|
|
метаданные в PostgreSQL, скачивание по ссылке. Есть простая HTML-страница и REST API.
|
|
По умолчанию HTTP-порт приложения: 8090.
|
|
|
|
--------------------------------------------------------------------------------
|
|
2. Что сделано в проекте
|
|
--------------------------------------------------------------------------------
|
|
|
|
2.1 Язык и зависимости
|
|
- Go 1.22
|
|
- github.com/lib/pq — драйвер PostgreSQL
|
|
- github.com/google/uuid — идентификаторы файлов
|
|
|
|
2.2 Структура каталогов
|
|
- cmd/fileshare/ — точка входа (main.go), встроенная статика web/
|
|
- cmd/fileshare/web/ — index.html (форма загрузки, список файлов)
|
|
- internal/config/ — переменные окружения (LISTEN_ADDR, DATABASE_URL, …)
|
|
- internal/store/ — работа с БД, миграция таблицы при старте
|
|
- internal/handlers/ — HTTP-обработчики API и отдача файлов
|
|
- internal/version/ — константа версии (сейчас 0.10)
|
|
|
|
2.3 База данных (PostgreSQL)
|
|
- Таблица files: id (UUID), исходное имя, тип содержимого, размер,
|
|
storage_key (путь к файлу на диске), created_at
|
|
- Индекс по дате создания для списка
|
|
|
|
2.4 Хранение файлов на диске
|
|
- Каталог из UPLOAD_DIR (по умолчанию ./data/uploads; в Docker — /data/uploads)
|
|
- Подкаталоги по первым символам UUID: ??/??/{uuid}.bin
|
|
|
|
2.5 HTTP API
|
|
- GET /health — проверка работы; JSON: status, version (0.10)
|
|
- GET /api/files — список файлов (JSON), поле download_url
|
|
- POST /api/files — multipart/form-data, поле "file"
|
|
- GET /api/files/{id}/download — скачивание (Content-Disposition: attachment)
|
|
- GET / — веб-интерфейс (загрузка и список)
|
|
|
|
2.6 Docker
|
|
- Dockerfile: multi-stage сборка (Alpine), бинарник без CGO
|
|
- docker-compose.yml:
|
|
* сервис db — postgres:16-alpine, том pgdata
|
|
* сервис app — приложение, порт 8090:8090, том uploads для файлов
|
|
* зависимость app от здоровья БД (healthcheck)
|
|
- Переменные: POSTGRES_PASSWORD (из .env или значение по умолчанию),
|
|
DATABASE_URL для приложения, MAX_UPLOAD_MB и др.
|
|
|
|
2.7 Установка
|
|
- install.ps1 (Windows, PowerShell) — проверка Docker, копирование .env из
|
|
.env.example при отсутствии .env, docker compose up -d --build
|
|
- install.sh (Unix) — то же для sh
|
|
|
|
2.8 Конфигурация через окружение
|
|
- DATABASE_URL — обязательно при локальном запуске без compose
|
|
- LISTEN_ADDR — например :8090
|
|
- UPLOAD_DIR — каталог загрузок
|
|
- MAX_UPLOAD_MB — лимит размера тела запроса (по умолчанию 100)
|
|
- PUBLIC_BASE_URL — опционально, базовый URL для ссылок в JSON за reverse-proxy
|
|
|
|
2.9 Репозиторий Git
|
|
- .gitignore — бинарники, .env, data/, uploads/, IDE и т.д.
|
|
- .gitattributes — eol для go, yaml, sh, ps1
|
|
- .dockerignore — уменьшение контекста сборки
|
|
|
|
--------------------------------------------------------------------------------
|
|
3. Публикация версии 0.10
|
|
--------------------------------------------------------------------------------
|
|
|
|
Версия зафиксирована в коде: internal/version/version.go (константа Version = "0.10").
|
|
При старте сервер пишет в лог: fileshare v0.10 listening on …
|
|
Ответ GET /health включает поле "version": "0.10".
|
|
|
|
Рекомендуемые шаги для «публикации»:
|
|
- git add -A && git commit -m "Release 0.10"
|
|
- при использовании тегов: git tag -a v0.10 -m "fileshare 0.10"
|
|
- сборка образа: docker compose build
|
|
- выкладка: по вашему registry/серверу — отправка образа и compose-файлов
|
|
|
|
--------------------------------------------------------------------------------
|
|
4. Быстрый старт (напоминание)
|
|
--------------------------------------------------------------------------------
|
|
|
|
Windows: .\install.ps1
|
|
Затем в браузере: http://localhost:8090/
|
|
Проверка версии: http://localhost:8090/health
|
|
|
|
================================================================================
|