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