# Установка — Файлообменник

# Установка файлообменника

Сервер на Go, база PostgreSQL, запуск через Docker Compose. Порт приложения по умолчанию: 8090.

## 1. Что нужно

- Docker и Docker Compose (в Docker Desktop для Windows уже есть Compose).
- Исходники проекта (каталог с `docker-compose.yml`, `Dockerfile` и скриптами установки).

## 2. Windows (PowerShell)

В каталоге проекта выполните:

    .\install.ps1

Скрипт проверит наличие Docker, при отсутствии файла `.env` скопирует его из `.env.example`, затем выполнит сборку и запуск контейнеров.

## 3. Linux и macOS

Сделайте скрипт исполняемым и запустите:

    chmod +x install.sh
    ./install.sh

## 4. Установка вручную

1. Скопируйте `.env.example` в `.env`.
2. Откройте `.env` и задайте надёжный `POSTGRES_PASSWORD` (для Docker это пароль пользователя PostgreSQL).
3. В том же каталоге выполните:

    docker compose up -d --build

При первом запуске образ приложения соберётся, поднимется PostgreSQL и сервис с файлообменником.

## 5. Файл `.env`

- `POSTGRES_PASSWORD` — пароль БД (должен совпадать с тем, что подставляется в строку подключения в Compose).
- `MAX_UPLOAD_MB` — необязательно; лимит размера загрузки в мегабайтах (по умолчанию 100).
- `PUBLIC_BASE_URL` — если сервер за обратным прокси с другим хостом/HTTPS, можно указать публичный базовый URL для корректных ссылок в API.

## 6. После установки

- Откройте в браузере: http://localhost:8090/
- Проверка работы и версии: http://localhost:8090/health (JSON: статус и поле `version`).

## 7. Остановка и данные

Остановить контейнеры:

    docker compose down

Файлы загрузок и данные PostgreSQL хранятся в именованных томах Docker (`uploads` и `pgdata`), поэтому после `down` они не удаляются. Чтобы удалить и тома (осторожно, потеряете файлы и БД):

    docker compose down -v

## 8. Запуск без Docker (для разработки)

Нужен установленный PostgreSQL и переменная окружения `DATABASE_URL`, например:

    set DATABASE_URL=postgres://user:pass@localhost:5432/fileshare?sslmode=disable
    go run ./cmd/fileshare

В Linux/macOS вместо `set` используйте `export DATABASE_URL=...`.