You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
user 2582ad387c Multiselect for 3 files and more 3 weeks ago
backend updates 3 weeks ago
frontend Multiselect for 3 files and more 3 weeks ago
nginx Updates 3 weeks ago
postgres/init Init commit 3 weeks ago
scripts script 3 weeks ago
.env.example Updates 3 weeks ago
.gitignore Init commit 3 weeks ago
README.md Update readme 3 weeks ago
VPS.md Update 3 weeks ago
docker-compose.yml updates 3 weeks ago

README.md

q2dropzone

Aplikacja do udostępniania plików z obsługą dużych uploadów (do 6 GB) przez protokół tus (resumable uploads).

Stack: Go 1.23 (backend) · Vue 3 + Vite (frontend) · PostgreSQL 16 · Nginx · Docker Compose


Wymagania

Narzędzie Wersja
Docker + Docker Compose 24+
Go 1.23+ (tylko tryb deweloperski)
Node.js 20+ (tylko tryb deweloperski)

Szybki start — Docker Compose (zalecane)

1. Zmienne środowiskowe

cp .env.example .env

Edytuj .env — zmień co najmniej hasła i klucz JWT:

DB_PASSWORD=silne_haslo
JWT_SECRET=losowy_ciag_min_32_znakow

2. Zbuduj i uruchom

docker compose up --build

Nginx nasłuchuje na portach 80 i 443.

Uwaga: Domyślna konfiguracja Nginx (nginx/conf.d/dropzone.conf) przekierowuje HTTP → HTTPS i wymaga certyfikatów SSL w nginx/certs/. Lokalnie możesz uprościć konfigurację do samego HTTP — patrz sekcja Nginx lokalnie.

3. Wolumen dyskowy

Backend montuje /mnt/dysk jako katalog plików. Lokalnie możesz podmienić tę ścieżkę w docker-compose.yml:

volumes:
  - ./diskroot:/mnt/dysk

i utworzyć katalog:

mkdir -p diskroot/public

Tryb deweloperski (bez Dockera)

1. Baza danych (PostgreSQL przez Docker)

docker compose up postgres -d

Baza jest dostępna na localhost:15432.

2. Backend

cp .env.example .env
# Uzupełnij .env — DATABASE_URL już wskazuje na localhost:15432

cd backend
go run ./cmd/server

Serwer startuje na http://localhost:8080.

Jeśli zmienna DISK_ROOT nie jest ustawiona, backend przechowuje pliki w ./diskroot (względem katalogu startowego).

3. Frontend

cd frontend
npm install
npm run dev

Vite startuje na http://localhost:5173 i automatycznie proxy /api/*http://localhost:8080.


Nginx lokalnie

Aby pominąć HTTPS lokalnie, zamień zawartość nginx/conf.d/dropzone.conf na:

server {
    listen 80;
    server_name localhost;

    client_max_body_size 6g;

    location / {
        root /app/frontend/dist;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://backend:8080;
        proxy_buffering off;
        proxy_request_buffering off;
    }

    location /files/ {
        proxy_pass http://backend:8080;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
    }
}

Następnie zbuduj frontend i uruchom cały stack:

cd frontend && npm install && npm run build && cd ..
docker compose up --build

Aplikacja będzie dostępna na http://localhost.


Zmienne środowiskowe

Zmienna Opis Domyślnie (lokalnie)
DB_NAME Nazwa bazy danych dropzone
DB_USER Użytkownik bazy dropzone
DB_PASSWORD Hasło bazy
DATABASE_URL DSN PostgreSQL (backend poza Dockerem) postgres://dropzone:...@localhost:15432/dropzone
PORT Port backendu 8080
JWT_SECRET Sekret do podpisywania tokenów JWT (min. 32 znaki)
DISK_ROOT Katalog główny plików na dysku ./diskroot
NGINX_ACCEL Włącza X-Accel-Redirect (tylko w Nginx) false

Struktura projektu

q2dropzone/
├── backend/          # Go — API REST, obsługa uploadów tus, JWT
│   ├── cmd/server/   # punkt wejścia (main.go)
│   └── internal/     # auth, files, middleware, admin
├── frontend/         # Vue 3 + Vite + Tailwind + Uppy
├── nginx/conf.d/     # konfiguracja Nginx
├── postgres/init/    # schemat SQL (uruchamiany raz przy pierwszym starcie)
├── scripts/          # backup_db.sh, deploy.sh, dem_parser.py
├── docker-compose.yml
└── .env.example

Pierwsze logowanie

Schemat bazy (postgres/init/01_schema.sql) tworzy tylko tabelę users. Konto admina należy dodać ręcznie po pierwszym uruchomieniu bazy:

# Wejdź do kontenera bazy
docker exec -it dropzone_postgres psql -U dropzone dropzone

# Wstaw admina (hasło zahashuj bcryptem lub użyj skryptu pomocniczego)
INSERT INTO users (username, password, role)
VALUES ('admin', '<bcrypt_hash>', 'admin');