8.6 KiB
USB RAID Array
Webový SFTP klient pro vzdálenou práci se soubory na RAID/NAS úložišti. Projekt vznikl jako školní práce zaměřená na využití starších USB flash disků a porovnání RAID 0, RAID 1 a RAID 5.
Aplikace běží na PHP serveru, účty a sdílené odkazy ukládá do MySQL/MariaDB a k úložišti se připojuje přes SFTP. Statistiky vzdáleného Linux serveru získává přes SSH. Samotné vytvoření RAID pole se provádí na serveru mimo tuto webovou aplikaci.
Funkce
- Přihlášení, změna hesla a správa uživatelských účtů.
- Oprávnění pro nahrávání, stahování a mazání souborů.
- Procházení adresářů, hledání v aktuální složce a filtrování souborů/složek.
- Nahrávání souborů i adresářů, drag & drop a zobrazení průběhu přenosu.
- Vytváření, přejmenování a mazání položek; stažení adresáře jako ZIP.
- Editor textových souborů, náhled obrázků, videa, audia a PDF.
- Sdílení médií odkazem s expirací a volitelným stažením.
- Přehled disků, Linux MD RAID polí, CPU, RAM a swapu.
- Společná postranní navigace, modré akcenty, světlý a tmavý režim bez závislosti na Bootstrapu.
Technologie a požadavky
| Část | Požadavky |
|---|---|
| Webový server | Apache, například v XAMPP; pro lokální vývoj lze použít i vestavěný PHP server. |
| PHP | Projekt je lokálně ověřený na PHP 8.2.12. Používané závislosti jsou uvedené v Web/composer.lock. |
| Databáze | MySQL/MariaDB; původní SQL dump pochází z MySQL 8.0.41. |
| PHP moduly | mysqli s mysqlnd pro get_result(), session, fileinfo; zip pro ZIP operace. Testy vykreslení používají také dom. |
| Závislosti | Composer a phpseclib/phpseclib řady 3; v repozitáři je také adresář Web/vendor. |
| Úložiště | Dostupný SFTP server a účet s přístupem k požadované cestě. |
| Statistiky | SSH přístup k Linux serveru, příkazy df, free, vmstat, awk, tail a čitelný /proc/mdstat pro Linux MD RAID. |
| Prohlížeč | Moderní prohlížeč s podporou nativního <dialog>. PDF náhled načítá PDF.js z CDN. |
Rozbalování archivů kromě ZIP může vyžadovat další nástroje, například UnRAR, 7-Zip nebo tar podle zvoleného formátu a operačního systému. PHP musí mít zapisovatelný dočasný adresář pro práci s archivy.
Rychlé zprovoznění
1. Stažení projektu a závislostí
git clone https://github.com/michalcz10/USB-RAID-Array.git
cd USB-RAID-Array/Web
composer install
Pokud už projekt máš stažený, spusť composer install v jeho adresáři Web. Pro instalaci podle existujícího lock souboru používej install.
2. Databáze a první správce
Postup je v dokumentaci databáze. Obsahuje dvě varianty:
- Import původního SQL dumpu a doplnění tabulky pro sdílení.
- Ruční vytvoření databáze a obou tabulek.
Součástí návodu je vytvoření prvního administrátora s bcrypt hashem hesla. Původní dump obsahuje také uživatelská data a sám nevytváří databázi ani tabulku share.
3. Konfigurace připojení
V souboru Web/config/config.php nastav vlastní připojení. Následující hodnoty jsou příklady; nahrazují odpovídající proměnné v existujícím souboru:
$DB_HOST = 'localhost';
$DB_USER = 'usbraid_app';
$DB_PASS = 'DOPLNTE_HESLO_DB';
$DB_NAME = 'usbraidlogin';
$SFTP_HOST = 'ADRESA_SFTP_SERVERU';
$SFTP_USER = 'SFTP_UZIVATEL';
$SFTP_PASS = 'DOPLNTE_HESLO_SFTP';
$SSH_HOST = 'ADRESA_SSH_SERVERU';
$SSH_USER = 'SSH_UZIVATEL';
$SSH_PASS = 'DOPLNTE_HESLO_SSH';
SFTP a SSH mohou používat stejný server, ale mají samostatné konfigurační proměnné. Aktuální pomocné funkce používají výchozí port 22 a přihlášení heslem. Přihlašovací údaje do webu se ověřují proti tabulce users; jednotliví weboví uživatelé sdílejí nakonfigurované SFTP připojení.
Výchozí vzdálená cesta se načítá z users.defPath po přihlášení. Nastav například /mnt/raid podle skutečného připojení úložiště na vzdáleném serveru. Nejde o cestu na počítači s XAMPP. SFTP účet musí mít také odpovídající oprávnění v Linuxu.
4. Spuštění přes XAMPP
- Spusť Apache a MySQL v XAMPP Control Panelu.
- Zpřístupni adresář
WebjakoC:\xampp\htdocs\Web— zkopírováním nebo již nastaveným symlinkem. - Otevři
http://localhost/Web/a přihlas se vytvořeným účtem. - Ve správě uživatelů nastav další účty, jejich vzdálené cesty a oprávnění.
Při úpravách projektu používej soubory, které Apache skutečně obsluhuje. U kopie v htdocs je potřeba změny překopírovat; symlink odkazuje přímo na pracovní adresář.
Alternativně lze z kořene repozitáře spustit lokální PHP server:
php -S 127.0.0.1:8080 -t Web
Pak otevři http://127.0.0.1:8080/. Databáze a vzdálený SFTP/SSH server musí být dostupné i v tomto režimu.
Struktura projektu
USB-RAID-Array/
├── README.md
├── LICENSE
├── Documentation/
│ ├── Databaze.md # import, ruční vytvoření tabulek a první správce
│ ├── usbraidlogin.sql # původní dump tabulky users včetně dat
│ ├── share.sql # doplnění schématu pro sdílené odkazy
│ └── ... # původní technická dokumentace a podklady
├── tests/
│ ├── workspace_test.php
│ ├── serverstats_test.php
│ └── remotepaths_test.php
└── Web/
├── index.php # přihlášení
├── config/config.php # databáze, SFTP a SSH
├── includes/workspace.php
├── content/
│ ├── adminpanel.php
│ ├── changepassword.php
│ └── ftp/ # správce souborů, náhledy a statistiky
├── css/ # společné styly a rozložení
├── js/ # téma a dialogy
├── composer.json
└── vendor/
Kontroly
Z kořene repozitáře:
php tests/workspace_test.php
php tests/serverstats_test.php
php tests/remotepaths_test.php
php tests/backend_test.php
node --check Web/js/theme.js
node --check Web/js/ui.js
node --check Web/content/ftp/js/index.js
PHP testy používají testovací data a nepotřebují připojení k databázi ani SSH. Kontrolují vykreslení stránek, navigaci podle role, zpracování statistik a stavy RAID polí. Node.js slouží u uvedených příkazů ke kontrole syntaxe; pro běh aplikace není potřeba.
Test backendu navíc ověřuje přihlášení, oprávnění operací, hranice vzdálených cest, vytváření prázdných souborů a upload. Spouští handlery v oddělených PHP procesech s testovacími náhradami databáze a SFTP; vyžaduje dostupné proc_open.
V backendu používej popisné názvy lokálních proměnných ve stylu camelCase, například $username, $passwordHash, $database, $statement, $directoryPath a $canUpload. Konfigurační proměnné $DB_*, $SFTP_*, $SSH_* a existující klíče databáze, formulářů a session (uname, pswd, defPath, upPer apod.) zůstávají kvůli kompatibilitě zachované. Společné kontroly přihlášení, oprávnění a hesel jsou v Web/includes/auth.php; práci s POSIX cestami soustřeď do Web/includes/remotepaths.php.
Časté problémy
| Problém | Co zkontrolovat |
|---|---|
| Chyba připojení k databázi | Běžící MySQL, název databáze, $DB_* a oprávnění databázového účtu. |
Chybí tabulka users nebo share |
Dokončení nastavení databáze. |
| Přihlášení do webu nefunguje | pswd musí obsahovat bcrypt hash, nikoli samotné heslo. |
Login Failed nebo SSH login failed |
Nastavení SFTP/SSH, dostupnost serveru a vzdálená oprávnění. |
| Nefunguje upload větších souborů | upload_max_filesize, post_max_size, max_file_uploads a časové limity PHP/serveru. Po změně php.ini v XAMPP restartuj Apache. |
| Statistiky úložiště jsou stejné | / a uživatelská výchozí cesta mohou ležet na stejném souborovém systému. |
RAID uvádí Not configured |
Na připojeném serveru není v /proc/mdstat detekováno Linux MD pole; RAID na hostiteli virtuálního serveru se tímto způsobem nezobrazuje. |
| PDF se nenačte | Dostupnost PDF souboru, přístup přes SFTP a načtení PDF.js z CDN. |
| Zobrazuje se staré rozhraní | Obnov stránku včetně cache a ověř, že XAMPP načítá správnou kopii projektu. |
Licence
Projekt je dostupný pod licencí MIT. Autorem je Michal Sedlák.