================================================================================
Файлообменник (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
================================================================================