|
|
3 weeks ago | |
|---|---|---|
| backend | 3 weeks ago | |
| frontend | 3 weeks ago | |
| nginx | 3 weeks ago | |
| postgres/init | 3 weeks ago | |
| scripts | 3 weeks ago | |
| .env.example | 3 weeks ago | |
| .gitignore | 3 weeks ago | |
| README.md | 3 weeks ago | |
| VPS.md | 3 weeks ago | |
| docker-compose.yml | 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 wnginx/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');