Skip to content
This repository was archived by the owner on May 12, 2026. It is now read-only.

FrantisekSilhan/web-email-client

Repository files navigation

Webový Emailový Klient (Maturitní práce 2025)

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.

🚀 Technologie

  • 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)

Dokumentace

K projektu je přiložena kompletní maturitní dokumentace (5151 slov), která popisuje analýzu, návrh a implementaci aplikace.

📸 Ukázky aplikace

Schránka s přijatou poštou

Inbox

Detail e-mailu

Detail emailu

Editor nové zprávy

Psaní emailu


Nasazení aplikace na server

1. Požadavky

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í.

2. Nastavení databáze PostgreSQL

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 postgres

Vytvoření databáze

Vytvoř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;"

Změna hesla uživatele

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';"

3. Nastavení .env souboru

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/development

Generování klíčů

Pro 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
node

Poté 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.

4. Instalace závislostí

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 install

5. Migrace databáze

Aplikace již obsahuje připravené migrace, takže stačí spustit následující příkaz pro jejich aplikaci:

npx drizzle-kit migrate

Pokud však chcete přidávat další migrace, použijte následující příkazy:

Vytvoření a aplikace nových migrací

# Vygenerujte nové migrace
npx drizzle-kit generate

# Aplikujte nové migrace
npx drizzle-kit migrate

Rychká změna bez vytváření migrací

npx drizzle-kit push

6. Spuštění projektu

Vývojový režim

Pro spuštění aplikace v režimu vývoje použijte:

npm run dev

Produkční režim

Pro spuštění aplikace v produkčním režimu:

# Sestavení aplikace
npm run build

# Spuštění aplikace
npm run start

Aplikace bude dostupná na adrese http://localhost:3000.

7. Nastavení Nginx

Pro nasazení aplikace na reverzní proxy server Nginx použijte následující konfiguraci:

Konfigurace Nginx

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;
}

Aktivace konfigurace

  1. Uložte konfiguraci

  2. Otestujte konfiguraci Nginx:

nginx -t
  1. Restartujte Nginx:
systemctl restart nginx

8. SSL certifikát (Let's Encrypt)

Pro zajištění HTTPS použijte Let's Encrypt certifikát:

  1. Nainstalujte certbot:
sudo apt install certbot python3-certbot-nginx
  1. Vygenerujte certifikát pro doménu:
sudo certbot --nginx -d <DOMÉNA>

9. Přístup k aplikaci

Po dokončení všech kroků bude aplikace dostupná na zvolené adrese.

About

Maturitní práce 2025. Moderní webový e-mailový klient postavený na Node.js, PostgreSQL a Drizzle ORM.

Topics

Resources

Stars

Watchers

Forks

Contributors