Tento projekt je webový e-mailový klient vytvořený jako maturitní práce v roce 2025 na střední škole (třída P4A).
Warning
Projekt je archivován a není aktivně udržován. Kód může obsahovat bezpečnostní chyby a zranitelnosti. Není určen pro produkční nasazení, slouží pouze pro studijní a demonstrační účely.
- Framework/Knihovny: Next.js, Nodemailer, ImapFlow
- Databáze: PostgreSQL s využitím Drizzle ORM
- Zabezpečení: JWT, šifrování pomocí AES
- Infrastruktura: Docker (pro databázi), Nginx (reverzní proxy)
K projektu je přiložena kompletní maturitní dokumentace (5151 slov), která popisuje analýzu, návrh a implementaci aplikace.
Aplikace byla vytvořena a testována s následujícími verzemi:
- Node.js:
v22.12.0 - npm:
v10.8.3 - Operační systém: Doporučuje se použití Linux serveru (např. Ubuntu 22.04 nebo novější), protože dále v návodu je uvedena konfigurace Nginx, která je běžně používána na Linuxu.
Poznámka: Projekt však bude fungovat i na Windows, pokud použijete alternativní webový server nebo jiný způsob nasazení.
Stáhněte a spusťte PostgreSQL kontejner pomocí Dockeru:
# Stáhněte PostgreSQL Docker image
docker pull postgres
# Spusťte PostgreSQL kontejner
docker run --restart unless-stopped --name drizzle-postgres -e POSTGRES_PASSWORD=mypassword -d -p 5432:5432 postgresVytvořte databázi s názvem mail:
# Připojte se k PostgreSQL a vytvořte databázi
docker exec -it drizzle-postgres psql -U postgres -c "CREATE DATABASE mail;"Pokud chcete změnit heslo uživatele postgres, použijte následující příkaz:
# Změna hesla uživatele postgres
docker exec -it drizzle-postgres psql -U postgres -c "ALTER USER postgres WITH PASSWORD 'newpassword';"Vytvořte soubor .env v kořenovém adresáři projektu a nastavte následující proměnné:
.env setup:
# DATABASE_URL=postgresql://<user>:<password>@<host>:<port>/<database>
DATABASE_URL=postgresql://postgres:mypassword@localhost:5432/mail
MASTER_KEY=256_bit_hexadecimal_string
JWT_SECRET=512_bit_hexadecimal_string
REFRESH_SECRET=512_bit_hexadecimal_string
NODE_ENV=production/developmentPro generování hodnot pro MASTER_KEY, JWT_SECRET a REFRESH_SECRET použijte následující JavaScript kód. Tento kód můžete vložit přímo do spuštěného Node.js prostředí v terminálu:
# Spusťte Node.js v terminálu
nodePoté vložte následující kód:
(()=>{const crypto=require("crypto");const refreshSecret=crypto.randomBytes(64).toString("hex");const jwtSecret=crypto.randomBytes(64).toString("hex");const masterKey=crypto.randomBytes(32).toString("hex");console.log(`Refresh Secret: ${refreshSecret}\nJWT Secret: ${jwtSecret}\nMaster Key: ${masterKey}`);})();Po spuštění kódu se vygenerují a zobrazí hodnoty pro MASTER_KEY, JWT_SECRET a REFRESH_SECRET, které můžete zkopírovat a vložit do svého .env souboru.
Před použitím nástrojů jako drizzle-kit nebo spuštěním projektu je nutné nainstalovat všechny závislosti. Spusťte následující příkaz v kořenovém adresáři projektu:
npm installAplikace již obsahuje připravené migrace, takže stačí spustit následující příkaz pro jejich aplikaci:
npx drizzle-kit migratePokud však chcete přidávat další migrace, použijte následující příkazy:
# Vygenerujte nové migrace
npx drizzle-kit generate
# Aplikujte nové migrace
npx drizzle-kit migratenpx drizzle-kit pushPro spuštění aplikace v režimu vývoje použijte:
npm run devPro spuštění aplikace v produkčním režimu:
# Sestavení aplikace
npm run build
# Spuštění aplikace
npm run startAplikace bude dostupná na adrese http://localhost:3000.
Pro nasazení aplikace na reverzní proxy server Nginx použijte následující konfiguraci:
Vytvořte nebo upravte souor konfigurace Nginx (např. /etc/nginx/conf.d/mail.conf) a vložte následující obsah (vyměňte <DOMÉNA> s vlastní doménou):
server {
server_name <DOMÉNA>; # Vyměňte za vlastní doménu
listen 443 ssl http2;
listen [::]:443 ssl http2;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
ssl_certificate /etc/letsencrypt/live/<DOMÉNA>/fullchain.pem; # Vyměňte za vlastní doménu
ssl_certificate_key /etc/letsencrypt/live/<DOMÉNA>/privkey.pem; # Vyměňte za vlastní doménu
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = <DOMÉNA>) { # Vyměňte za vlastní doménu
return 301 https://$host$request_uri;
}
server_name <DOMÉNA>; # Vyměňte za vlastní doménu
listen 80;
listen [::]:80;
return 404;
}-
Uložte konfiguraci
-
Otestujte konfiguraci Nginx:
nginx -t- Restartujte Nginx:
systemctl restart nginxPro zajištění HTTPS použijte Let's Encrypt certifikát:
- Nainstalujte certbot:
sudo apt install certbot python3-certbot-nginx- Vygenerujte certifikát pro doménu:
sudo certbot --nginx -d <DOMÉNA>Po dokončení všech kroků bude aplikace dostupná na zvolené adrese.


