Файлообменник (fileshare) — сведения о релизе
Текущая версия: 0.10 Дата фиксации описания: 2026-04-17
- Назначение
Веб-приложение на Go для обмена файлами: загрузка на сервер, хранение на диске, метаданные в PostgreSQL, скачивание по ссылке. Есть простая HTML-страница и REST API. По умолчанию HTTP-порт приложения: 8090.
- Что сделано в проекте
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 — уменьшение контекста сборки
- Публикация версии 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-файлов
- Быстрый старт (напоминание)
Windows: .\install.ps1 Затем в браузере: http://localhost:8090/ Проверка версии: http://localhost:8090/health
================================================================================