mirror of
https://github.com/michalcz10/USB-RAID-Array.git
synced 2026-11-11 16:09:03 +00:00
Document project setup and database installation
Expand README with application features, requirements, XAMPP setup, connection configuration, project structure and troubleshooting. Add Czech database documentation covering SQL import, manual SQL and phpMyAdmin table setup, bcrypt administrator creation, database permissions and verification. Provide the missing share table schema as a separate SQL supplement and explain its relationship to the original users dump.
This commit is contained in:
@@ -0,0 +1,281 @@
|
|||||||
|
# Nastavení databáze
|
||||||
|
|
||||||
|
Tento návod popisuje databázi webové aplikace USB RAID Array pro MySQL/MariaDB. Lze použít phpMyAdmin v XAMPP nebo příkazový klient `mysql`.
|
||||||
|
|
||||||
|
Vyber jednu ze dvou cest: [import SQL](#varianta-a-import-sql) nebo [ruční vytvoření tabulek](#varianta-b-ruční-vytvoření-tabulek). Poté pokračuj [vytvořením prvního správce](#první-administrátor) a [nastavením připojení](#připojení-aplikace).
|
||||||
|
|
||||||
|
## Co aplikace ukládá
|
||||||
|
|
||||||
|
| Tabulka | Účel | Používají ji |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `users` | Webové účty, hashe hesel, role, vzdálené cesty a oprávnění. | `login.php`, `adminpanel.php`, `changepassword.php` |
|
||||||
|
| `share` | Tokeny sdílených médií, cesta k souboru, expirace a povolení stažení. | `ftp/view.php`, `ftp/shared.php` |
|
||||||
|
|
||||||
|
Obsah souborů zůstává na SFTP serveru. Databáze uchovává jen účty a metadata sdílení.
|
||||||
|
|
||||||
|
### Původní SQL soubor a doplnění
|
||||||
|
|
||||||
|
[usbraidlogin.sql](usbraidlogin.sql) je původní dump z phpMyAdmin. Obsahuje vytvoření tabulky `users` a vložení uživatelských dat. **Neobsahuje `CREATE DATABASE`, `USE` ani tabulku `share`.** Tabulka `users` v tomto dumpu nemá primární ani unikátní klíč.
|
||||||
|
|
||||||
|
[share.sql](share.sql) doplňuje strukturu, kterou aktuální kód potřebuje pro sdílené odkazy. Je odvozená z dotazů v `view.php` a `shared.php`, nikoli z původního dumpu. Neobsahuje testovací odkazy ani uživatelská data. `IF NOT EXISTS` při opakovaném spuštění nevytvoří druhou tabulku, ale také neopraví již existující nekompatibilní schéma.
|
||||||
|
|
||||||
|
Obě varianty níže používají databázi `usbraidlogin`, InnoDB a `utf8mb4_unicode_ci` podle původního SQL. Import původního dumpu prováděj do nové databáze; na existující tabulce `users` by `CREATE TABLE` skončilo chybou.
|
||||||
|
|
||||||
|
## Varianta A: import SQL
|
||||||
|
|
||||||
|
### Přes phpMyAdmin
|
||||||
|
|
||||||
|
1. V XAMPP spusť Apache a MySQL.
|
||||||
|
2. Otevři `http://localhost/phpmyadmin/` a přihlas se databázovým účtem s právem vytvářet databáze a tabulky.
|
||||||
|
3. Na kartě **SQL** vytvoř databázi:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE `usbraidlogin`
|
||||||
|
CHARACTER SET utf8mb4
|
||||||
|
COLLATE utf8mb4_unicode_ci;
|
||||||
|
```
|
||||||
|
|
||||||
|
4. V levém panelu vyber **usbraidlogin**. Tento krok je nutný, protože dump neobsahuje příkaz `USE`.
|
||||||
|
5. Otevři **Import**, vyber `Documentation/usbraidlogin.sql`, ponech formát SQL a spusť import.
|
||||||
|
6. Ve stejné databázi znovu otevři **Import** a importuj `Documentation/share.sql`.
|
||||||
|
7. Zkontroluj, že jsou přítomné tabulky `users` a `share`.
|
||||||
|
|
||||||
|
Původní dump vkládá i účty s hashi hesel. Z hashe nelze zjistit původní heslo. Pro vlastní instalaci vytvoř vlastní účet podle kapitoly [První administrátor](#první-administrátor). Importované účty před zpřístupněním instalace zkontroluj a ponech jen ty, které chceš používat.
|
||||||
|
|
||||||
|
### Přes příkazový řádek
|
||||||
|
|
||||||
|
V PowerShellu otevři klienta z XAMPP:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& 'C:\xampp\mysql\bin\mysql.exe' -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
Použij jméno svého správce databáze místo `root`, pokud se liší. Heslo se zadává až do výzvy klienta. Jestli má lokální účet prázdné heslo, potvrď výzvu Enterem.
|
||||||
|
|
||||||
|
Na Linuxu nebo pokud je klient v `PATH`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
V klientovi spusť následující příkazy. Cesty uprav podle umístění repozitáře; v příkladu pro Windows jsou použité dopředné lomítka:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE `usbraidlogin`
|
||||||
|
CHARACTER SET utf8mb4
|
||||||
|
COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
USE `usbraidlogin`;
|
||||||
|
SOURCE C:/cesta/USB-RAID-Array/Documentation/usbraidlogin.sql;
|
||||||
|
SOURCE C:/cesta/USB-RAID-Array/Documentation/share.sql;
|
||||||
|
SHOW TABLES;
|
||||||
|
```
|
||||||
|
|
||||||
|
`SOURCE` je příkaz klienta `mysql`. V phpMyAdmin používej kartu Import. Na Linuxu nahraď cesty například `/cesta/USB-RAID-Array/Documentation/usbraidlogin.sql` a odpovídající cestou k `share.sql`.
|
||||||
|
|
||||||
|
## Varianta B: ruční vytvoření tabulek
|
||||||
|
|
||||||
|
Tato varianta vytvoří prázdné tabulky bez importovaných účtů. Následující SQL vlož do karty **SQL** v phpMyAdmin nebo do klienta `mysql`. Původní dump už v této variantě neimportuj.
|
||||||
|
|
||||||
|
### 1. Databáze
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE `usbraidlogin`
|
||||||
|
CHARACTER SET utf8mb4
|
||||||
|
COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
USE `usbraidlogin`;
|
||||||
|
```
|
||||||
|
|
||||||
|
Pokud databáze už existuje, vyber ji příkazem `USE` a přeskoč `CREATE DATABASE`. Před vytvořením tabulek ověř jejich existenci pomocí `SHOW TABLES`; existující tabulky nemaž kvůli opakování návodu.
|
||||||
|
|
||||||
|
### 2. Tabulka `users`
|
||||||
|
|
||||||
|
Struktura přesně odpovídá tabulce v původním `usbraidlogin.sql`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE `users` (
|
||||||
|
`uname` varchar(255) NOT NULL,
|
||||||
|
`pswd` varchar(60) NOT NULL,
|
||||||
|
`admin` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`defPath` varchar(255) NOT NULL DEFAULT '/',
|
||||||
|
`delPer` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`downPer` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
`upPer` tinyint(1) NOT NULL DEFAULT '0'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
```
|
||||||
|
|
||||||
|
| Sloupec | Význam |
|
||||||
|
| --- | --- |
|
||||||
|
| `uname` | Přihlašovací jméno. Každý účet vytvářej s odlišným jménem. |
|
||||||
|
| `pswd` | Bcrypt hash hesla vytvořený PHP, dlouhý 60 znaků. |
|
||||||
|
| `admin` | `1` pro správce, `0` pro běžný účet; správce má přístup ke správě účtů a statistikám serveru. |
|
||||||
|
| `defPath` | Absolutní vzdálená cesta na SFTP serveru, například `/mnt/raid`. |
|
||||||
|
| `delPer` | `1` povoluje mazání souborů a adresářů. |
|
||||||
|
| `downPer` | `1` povoluje stahování v rozhraní. |
|
||||||
|
| `upPer` | `1` povoluje nahrávání a úpravy, například vytváření, přejmenování, editaci a rozbalování archivů. |
|
||||||
|
|
||||||
|
Hodnoty oprávnění zadávej jako `0` nebo `1`. Role správce a souborová oprávnění jsou samostatné sloupce; pro plný přístup nastav prvnímu správci všechny čtyři přepínače na `1`.
|
||||||
|
|
||||||
|
Věrná kopie původního schématu nemá unikátní index pro `uname`. Administrace duplicity ověřuje při přidávání účtu, ale při ručním SQL je musíš zkontrolovat sám.
|
||||||
|
|
||||||
|
### 3. Tabulka `share`
|
||||||
|
|
||||||
|
Stejnou tabulku vytváří doplňující soubor `share.sql`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE IF NOT EXISTS `share` (
|
||||||
|
`token` char(32) NOT NULL,
|
||||||
|
`file_path` text NOT NULL,
|
||||||
|
`expiration` datetime NOT NULL,
|
||||||
|
`download_allowed` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`token`),
|
||||||
|
KEY `idx_share_expiration` (`expiration`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
```
|
||||||
|
|
||||||
|
| Sloupec | Význam |
|
||||||
|
| --- | --- |
|
||||||
|
| `token` | Identifikátor odkazu v URL; aplikace generuje 32 hexadecimálních znaků pomocí `bin2hex(random_bytes(16))`. |
|
||||||
|
| `file_path` | Vzdálená cesta ke sdílenému souboru. |
|
||||||
|
| `expiration` | Datum a čas konce platnosti. Dotaz v `shared.php` vyžaduje `expiration > NOW()`. |
|
||||||
|
| `download_allowed` | `1` povoluje stažení přes sdílený odkaz, `0` pouze náhled. |
|
||||||
|
|
||||||
|
Primární klíč zajišťuje jedinečnost tokenu, index `idx_share_expiration` usnadňuje dotazy podle expirace. Mezi tabulkami není cizí klíč: současný kód u odkazu neukládá autora ani ID uživatele.
|
||||||
|
|
||||||
|
### Alternativa: naklikání tabulek v phpMyAdmin
|
||||||
|
|
||||||
|
Místo spuštění uvedených `CREATE TABLE` můžeš stejné tabulky vytvořit přes formulář:
|
||||||
|
|
||||||
|
1. Vyber databázi `usbraidlogin`, zvol vytvoření nové tabulky `users` a počet sloupců **7**.
|
||||||
|
2. Zadej názvy a datové typy podle SQL výše: `uname VARCHAR(255)`, `pswd VARCHAR(60)`, `admin TINYINT(1)`, `defPath VARCHAR(255)`, `delPer TINYINT(1)`, `downPer TINYINT(1)` a `upPer TINYINT(1)`.
|
||||||
|
3. U všech sloupců ponech **NULL vypnuté** a nezapínej `A_I` (AUTO_INCREMENT). Přepínačům nastav výchozí hodnotu `0`, sloupci `defPath` hodnotu `/`. `uname` a `pswd` nemají výchozí hodnotu. Pro shodu s původním dumpem nenastavuj žádný primární klíč.
|
||||||
|
4. Vyber engine **InnoDB**, porovnávání **utf8mb4_unicode_ci** a tabulku ulož.
|
||||||
|
5. Vytvoř tabulku `share` se **4** sloupci: `token CHAR(32)`, `file_path TEXT`, `expiration DATETIME` a `download_allowed TINYINT(1)`.
|
||||||
|
6. Opět vypni NULL a AUTO_INCREMENT. U `download_allowed` nastav výchozí hodnotu `0`; ostatní sloupce výchozí hodnotu nemají. Sloupci `token` nastav index **PRIMARY**.
|
||||||
|
7. Použij InnoDB a utf8mb4_unicode_ci. Po uložení na kartě **Struktura** přidej běžný index `idx_share_expiration` na sloupci `expiration`.
|
||||||
|
8. Výsledek porovnej pomocí `SHOW CREATE TABLE users;` a `SHOW CREATE TABLE share;` s uvedenými SQL definicemi.
|
||||||
|
|
||||||
|
## První administrátor
|
||||||
|
|
||||||
|
### 1. Vytvoření hashe hesla
|
||||||
|
|
||||||
|
Heslo do `pswd` neukládej jako prostý text ani jako MD5/SHA hash. Přihlášení používá PHP `password_verify()` a aplikace vytváří hesla pomocí `PASSWORD_BCRYPT`.
|
||||||
|
|
||||||
|
Pokud je PHP v `PATH`, spusť:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
php -r "echo password_hash('ZVOLTE_VLASTNI_HESLO', PASSWORD_BCRYPT), PHP_EOL;"
|
||||||
|
```
|
||||||
|
|
||||||
|
V PowerShellu s XAMPP lze použít plnou cestu:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& 'C:\xampp\php\php.exe' -r "echo password_hash('ZVOLTE_VLASTNI_HESLO', PASSWORD_BCRYPT), PHP_EOL;"
|
||||||
|
```
|
||||||
|
|
||||||
|
`ZVOLTE_VLASTNI_HESLO` před spuštěním nahraď vlastním heslem. Zvol alespoň 8 znaků, jednu číslici a jedno velké písmeno, aby odpovídalo pravidlům správy účtů. Výstup bude bcrypt hash začínající například `$2y$10$`. Každé spuštění může pro stejné heslo vytvořit jiný platný hash.
|
||||||
|
|
||||||
|
Pokud nechceš heslo uvést v historii příkazové řádky, spusť `php -a` a zavolej `password_hash()` v interaktivním PHP shellu. Příkaz s vlastním heslem ani jeho výstup neukládej do veřejných ukázek dokumentace.
|
||||||
|
|
||||||
|
### 2. Vložení účtu
|
||||||
|
|
||||||
|
Nejprve ověř, zda zvolené jméno už není použité:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
USE `usbraidlogin`;
|
||||||
|
SELECT `uname`, `admin`, `defPath` FROM `users` WHERE `uname` = 'spravce';
|
||||||
|
```
|
||||||
|
|
||||||
|
Pokud dotaz nic nevrátí, vlož účet. Text `SEM_VLOZTE_BCRYPT_HASH` nahraď celým skutečným hashem z předchozího kroku a `/mnt/raid` skutečnou cestou na SFTP serveru:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO `users`
|
||||||
|
(`uname`, `pswd`, `admin`, `defPath`, `delPer`, `downPer`, `upPer`)
|
||||||
|
VALUES
|
||||||
|
('spravce', 'SEM_VLOZTE_BCRYPT_HASH', 1, '/mnt/raid', 1, 1, 1);
|
||||||
|
```
|
||||||
|
|
||||||
|
Tento SQL příkaz je šablona — placeholder není platný hash. Do přihlašovacího formuláře následně zadávej jméno `spravce` a původní heslo, ze kterého jsi hash vytvořil. Další účty už lze přidávat přes **User management**.
|
||||||
|
|
||||||
|
Pokud jméno existuje, další stejné nevkládej. Pro obnovení přístupu ke svému účtu lze v phpMyAdmin nahradit pouze jeho hash:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
UPDATE `users`
|
||||||
|
SET `pswd` = 'SEM_VLOZTE_BCRYPT_HASH'
|
||||||
|
WHERE `uname` = 'spravce';
|
||||||
|
```
|
||||||
|
|
||||||
|
## Připojení aplikace
|
||||||
|
|
||||||
|
Pro aplikaci vytvoř samostatný databázový účet. Následující příklad předpokládá, že se PHP připojuje k databázi lokálně jako `usbraid_app` na hostiteli `localhost`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE USER 'usbraid_app'@'localhost' IDENTIFIED BY 'DOPLNTE_VLASTNI_HESLO_DB';
|
||||||
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `usbraidlogin`.* TO 'usbraid_app'@'localhost';
|
||||||
|
```
|
||||||
|
|
||||||
|
DDL příkazy pro vytvoření tabulek spouštěj správcovským databázovým účtem. Aplikace pro běžný provoz nepotřebuje práva `CREATE` ani `DROP`. Pokud účet již existuje, `CREATE USER` neopakuj; nastav mu potřebná práva. Pro vzdálenou databázi použij hostitele odpovídajícího umístění PHP serveru místo `localhost`.
|
||||||
|
|
||||||
|
V existujícím `Web/config/config.php` nastav:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$DB_HOST = 'localhost';
|
||||||
|
$DB_USER = 'usbraid_app';
|
||||||
|
$DB_PASS = 'DOPLNTE_VLASTNI_HESLO_DB';
|
||||||
|
$DB_NAME = 'usbraidlogin';
|
||||||
|
```
|
||||||
|
|
||||||
|
Účet MySQL, webový účet z tabulky `users` a SFTP/SSH účet jsou tři různé věci. Změna hesla ve webové aplikaci mění pouze hash v `users.pswd`.
|
||||||
|
|
||||||
|
### Časové pásmo sdílených odkazů
|
||||||
|
|
||||||
|
`view.php` počítá expiraci v `Europe/Prague`, zatímco databázový dotaz ji porovnává s `NOW()`. Databázový čas musí odpovídat tomuto pásmu, jinak může odkaz vypršet dříve nebo později. Ověř:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT NOW() AS database_time,
|
||||||
|
@@global.time_zone AS global_time_zone,
|
||||||
|
@@session.time_zone AS session_time_zone,
|
||||||
|
@@system_time_zone AS system_time_zone;
|
||||||
|
```
|
||||||
|
|
||||||
|
Pokud databáze používá `SYSTEM`, ověř časové pásmo systému databázového serveru. U spravované instalace lze nakonfigurovat časové pásmo MySQL na `Europe/Prague`, pokud má server načtené tabulky časových pásem. Jednorázové `SET time_zone` v phpMyAdmin mění pouze jeho spojení a nevyřeší nastavení nových spojení aplikace. Pevný posun `+01:00` nepokrývá český letní čas.
|
||||||
|
|
||||||
|
## Ověření instalace
|
||||||
|
|
||||||
|
V databázi spusť:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
USE `usbraidlogin`;
|
||||||
|
SHOW TABLES;
|
||||||
|
DESCRIBE `users`;
|
||||||
|
DESCRIBE `share`;
|
||||||
|
|
||||||
|
SELECT `uname`, `admin`, `defPath`, `delPer`, `downPer`, `upPer`,
|
||||||
|
CHAR_LENGTH(`pswd`) AS hash_length
|
||||||
|
FROM `users`;
|
||||||
|
```
|
||||||
|
|
||||||
|
Výsledek má obsahovat obě tabulky. U účtu vytvořeného podle návodu má mít `hash_length` hodnotu `60`. Délka sama o sobě ještě nepotvrzuje správnost hesla; tu ověří přihlášení.
|
||||||
|
|
||||||
|
V aplikaci pak ověř:
|
||||||
|
|
||||||
|
1. Přihlášení vlastním administrátorem a otevření správy účtů.
|
||||||
|
2. Správnou výchozí cestu a přístup k SFTP souborům.
|
||||||
|
3. Vytvoření sdíleného odkazu u testovacího média a jeho otevření v anonymním okně.
|
||||||
|
4. Platnost odkazu a chování volby stažení.
|
||||||
|
|
||||||
|
Změny role, cesty a oprávnění provedené přímo v databázi se do existujícího webového přihlášení nepromítnou okamžitě — hodnoty se načítají do session při přihlášení. Po takové změně se odhlas a znovu přihlas.
|
||||||
|
|
||||||
|
## Řešení chyb
|
||||||
|
|
||||||
|
| Chyba | Příčina a řešení |
|
||||||
|
| --- | --- |
|
||||||
|
| `Unknown database 'usbraidlogin'` | Vytvoř databázi a zkontroluj `$DB_NAME`. |
|
||||||
|
| `No database selected` při importu | Před importem vyber databázi v phpMyAdmin nebo spusť `USE usbraidlogin`. |
|
||||||
|
| `Table 'users' already exists` | Dump se importuje do již vytvořeného schématu. Zkontroluj existující tabulku a nepokračuj slepým mazáním dat. |
|
||||||
|
| `Table 'usbraidlogin.share' doesn't exist` | Importuj `share.sql` nebo tabulku vytvoř ručně podle návodu. |
|
||||||
|
| `Access denied for user` | Zkontroluj `$DB_USER`, `$DB_PASS`, hostitele a přidělená práva. |
|
||||||
|
| Přihlášení hlásí nesprávné údaje | Ověř jméno a bcrypt hash; do formuláře patří původní heslo. |
|
||||||
|
| Sdílený odkaz ihned expiruje | Zkontroluj časové pásmo a `NOW()` na databázovém serveru. |
|
||||||
|
| Čeština se ukládá nesprávně | Tabulky používají `utf8mb4`; současný helper v `config.php` nastavuje spojení na `utf8`. Pro plné čtyřbajtové znaky, například emoji, je potřeba sjednotit i spojení na `utf8mb4`. |
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
-- Doplneni puvodniho usbraidlogin.sql o tabulku pro sdilene odkazy.
|
||||||
|
-- Nejprve vyberte databazi usbraidlogin v phpMyAdmin nebo prikazem USE.
|
||||||
|
-- Struktura odpovida INSERT/SELECT v Web/content/ftp/view.php a shared.php.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `share` (
|
||||||
|
`token` char(32) NOT NULL,
|
||||||
|
`file_path` text NOT NULL,
|
||||||
|
`expiration` datetime NOT NULL,
|
||||||
|
`download_allowed` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
|
PRIMARY KEY (`token`),
|
||||||
|
KEY `idx_share_expiration` (`expiration`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
@@ -1,2 +1,153 @@
|
|||||||
# USB-RAID-pole
|
# USB RAID Array
|
||||||
Cílem práce je nalézt využití zastaralých paměťových médií jako například slabopaměťové USB flash disky s malou paměťovou kapacitou. Technologii RAID (NAS) pole v praxi implementujte na vícero RAID technologiích a vzájemně komparujte řešení. Komparujte chování navrženého systému minimálně na technologiích RAID 0, RAID 1 a RAID 5. Vytvořte vzdálené připojení na toto RAID pole s možností nahrání a stažení souborů po přihlášení uživatele (web login). K tomuto účelu vytvořte webovou aplikaci. Zabezpečte vzdálené připojení. Použité technologie: RAID, NAS, FTP, USB, Flash, HTML, PHP, MySQL.
|
|
||||||
|
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í
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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](Documentation/Databaze.md). Obsahuje dvě varianty:
|
||||||
|
|
||||||
|
1. Import [původního SQL dumpu](Documentation/usbraidlogin.sql) a [doplnění tabulky pro sdílení](Documentation/share.sql).
|
||||||
|
2. 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:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$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
|
||||||
|
|
||||||
|
1. Spusť Apache a MySQL v XAMPP Control Panelu.
|
||||||
|
2. Zpřístupni adresář `Web` jako `C:\xampp\htdocs\Web` — zkopírováním nebo již nastaveným symlinkem.
|
||||||
|
3. Otevři `http://localhost/Web/` a přihlas se vytvořeným účtem.
|
||||||
|
4. 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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
└── 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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
php tests/workspace_test.php
|
||||||
|
php tests/serverstats_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.
|
||||||
|
|
||||||
|
## Č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](Documentation/Databaze.md). |
|
||||||
|
| 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](LICENSE). Autorem je Michal Sedlák.
|
||||||
|
|||||||
Reference in New Issue
Block a user