1 changed files with 180 additions and 0 deletions
@ -1,2 +1,182 @@ |
|||||
# q2dropzone |
# 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 |
||||
|
|
||||
|
```bash |
||||
|
cp .env.example .env |
||||
|
``` |
||||
|
|
||||
|
Edytuj `.env` — zmień co najmniej hasła i klucz JWT: |
||||
|
|
||||
|
```dotenv |
||||
|
DB_PASSWORD=silne_haslo |
||||
|
JWT_SECRET=losowy_ciag_min_32_znakow |
||||
|
``` |
||||
|
|
||||
|
### 2. Zbuduj i uruchom |
||||
|
|
||||
|
```bash |
||||
|
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](#nginx-lokalnie). |
||||
|
|
||||
|
### 3. Wolumen dyskowy |
||||
|
|
||||
|
Backend montuje `/mnt/dysk` jako katalog plików. Lokalnie możesz podmienić tę ścieżkę w `docker-compose.yml`: |
||||
|
|
||||
|
```yaml |
||||
|
volumes: |
||||
|
- ./diskroot:/mnt/dysk |
||||
|
``` |
||||
|
|
||||
|
i utworzyć katalog: |
||||
|
|
||||
|
```bash |
||||
|
mkdir -p diskroot/public |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## Tryb deweloperski (bez Dockera) |
||||
|
|
||||
|
### 1. Baza danych (PostgreSQL przez Docker) |
||||
|
|
||||
|
```bash |
||||
|
docker compose up postgres -d |
||||
|
``` |
||||
|
|
||||
|
Baza jest dostępna na `localhost:15432`. |
||||
|
|
||||
|
### 2. Backend |
||||
|
|
||||
|
```bash |
||||
|
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 |
||||
|
|
||||
|
```bash |
||||
|
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: |
||||
|
|
||||
|
```nginx |
||||
|
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: |
||||
|
|
||||
|
```bash |
||||
|
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: |
||||
|
|
||||
|
```bash |
||||
|
# 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'); |
||||
|
``` |
||||
|
|||||
Loading…
Reference in new issue