diff --git a/README.md b/README.md index 35e8311..9b6c7e6 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,88 @@ MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin ``` +### Manual Password Hash Generation + +If you need to generate the password hash manually (instead of using the setup script): + +#### Method 1: Using Node.js + +```bash +# Install bcrypt globally +npm install -g bcrypt-cli + +# Generate hash (will prompt for password) +bcrypt-cli hash + +# Or with inline password (be careful with shell history) +node -e "const bcrypt = require('bcrypt'); bcrypt.hash('YOUR_PASSWORD', 12).then(console.log)" +``` + +#### Method 2: Using Python + +```bash +# Install bcrypt +pip install bcrypt + +# Generate hash +python3 -c "import bcrypt; password = b'YOUR_PASSWORD'; print(bcrypt.hashpw(password, bcrypt.gensalt(rounds=12)).decode())" +``` + +#### Method 3: Using Docker + +```bash +# One-liner using Node.js in Docker +docker run --rm -it node:alpine sh -c "npm install bcrypt && node -e \"require('bcrypt').hash('YOUR_PASSWORD', 12).then(console.log)\"" +``` + +### JWT Secret Generation + +Generate a secure JWT secret: + +#### Method 1: Using OpenSSL + +```bash +# Generate 64-character random string +openssl rand -base64 64 | tr -d '\n' +``` + +#### Method 2: Using Node.js + +```bash +# Generate crypto-random string +node -e "console.log(require('crypto').randomBytes(64).toString('base64'))" +``` + +#### Method 3: Using Python + +```bash +# Generate secure random string +python3 -c "import secrets; print(secrets.token_urlsafe(64))" +``` + +#### Method 4: Using /dev/urandom + +```bash +# Generate from random device +head -c 64 /dev/urandom | base64 | tr -d '\n' +``` + +### Example .env Configuration + +After generating your password hash and JWT secret: + +```env +# Example with generated values +ADMIN_PASSWORD_HASH=$2b$12$YKkb7VCztpTQ5eRQwfBfKuP0kziOlLXdH8kKDP3ZbQfCPwF.EAYmS +JWT_SECRET=Km5F2p9kXx7Nw3Qr8vBz4Ht6Lj9Mn2Sf5Yd8Gc3Vb7Nx4Wq9Rt6Yh3Kp8Zx2Cv5 +``` + +**Security Notes:** +- Never commit actual passwords or secrets to version control +- Use at least 12 rounds for bcrypt (default in examples above) +- JWT secrets should be at least 256 bits (32 bytes) of entropy +- Store the `.env` file securely with restricted permissions: `chmod 600 .env` + ### Security Settings ```env