4.5 KiB
4.5 KiB
Docker Setup Guide (Linux)
Since you're using Docker for the database, here's the correct setup process:
Prerequisites
- Node.js (v16+):
sudo apt install nodejs npmor use NodeSource - Docker:
sudo apt install docker.io docker-compose-plugin - Docker Compose: Included with modern Docker installations
Step 1: Start the Database with Docker
cd backend
# Start PostgreSQL in Docker
docker compose up -d
# Verify the database is running
docker compose ps
# You should see:
# bookmark_postgres postgres:15 Up 0.0.0.0:5432->5432/tcp
Step 2: Backend Setup
# Install Node.js dependencies
npm install
# Copy environment file
cp .env.example .env
Step 3: Configure Environment for Docker Database
Edit backend/.env with these Docker-specific settings:
# Server Configuration
NODE_ENV=development
PORT=3001
# Database Configuration (Docker settings)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=bookmark_manager
DB_USER=postgres
DB_PASSWORD=password
DB_SSL=false
# JWT Configuration (CHANGE THIS)
JWT_SECRET=your_very_long_random_secret_key_at_least_32_characters_long
JWT_EXPIRES_IN=24h
# Email Configuration (OPTIONAL for now)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_SECURE=false
EMAIL_USER=
EMAIL_PASSWORD=
EMAIL_FROM=
# Application Configuration
ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
BASE_URL=http://localhost:3001
# Security Configuration
BCRYPT_SALT_ROUNDS=12
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
AUTH_RATE_LIMIT_MAX=5
Step 4: Create Test Database
# Connect to the Docker PostgreSQL instance
docker exec -it bookmark_postgres psql -U postgres -d bookmark_manager
# Create the test database
CREATE DATABASE bookmark_manager_test;
# Exit PostgreSQL
\q
Step 5: Initialize Database Tables
# Initialize the database schema
npm run db:init
# Check database status
npm run db:status
Step 6: Start the Application
# Start the backend server
npm run dev
# You should see:
# Server running on port 3001
# Database connected successfully
Step 7: Access the Application
Open your browser to: http://localhost:3001
The backend now serves the frontend static files automatically - no need for a separate web server!
Useful Docker Commands
# Start the database
docker compose up -d
# Stop the database
docker compose down
# View database logs
docker compose logs postgres
# Connect to database directly
docker exec -it bookmark_postgres psql -U postgres -d bookmark_manager
# Reset database (removes all data)
docker compose down -v
docker compose up -d
npm run db:init
Complete Setup Script for Docker
Here's a one-liner setup for Docker:
cd backend && \
docker compose up -d && \
npm install && \
cp .env.example .env && \
echo "Edit .env file now, then run: npm run db:init && npm run dev"
Troubleshooting Docker Setup
Docker not running
# Start Docker service
sudo systemctl start docker
sudo systemctl enable docker
# Add your user to docker group (logout/login required)
sudo usermod -aG docker $USER
Port 5432 already in use
# Check what's using port 5432
sudo lsof -i :5432
# If it's another PostgreSQL instance, stop it
sudo systemctl stop postgresql
# Or change the port in docker-compose.yml
Database connection fails
# Check if container is running
docker ps | grep postgres
# Check container logs
docker logs bookmark_postgres
# Test connection
docker exec -it bookmark_postgres psql -U postgres -c "SELECT version();"
Permission issues
# Fix Docker permissions
sudo chmod 666 /var/run/docker.sock
# Or add user to docker group
sudo usermod -aG docker $USER
# Then logout and login again
Environment File for Docker
Here's a ready-to-use .env file for the Docker setup:
NODE_ENV=development
PORT=3001
# Docker PostgreSQL settings (match docker-compose.yml)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=bookmark_manager
DB_USER=postgres
DB_PASSWORD=password
DB_SSL=false
# Generate a secure JWT secret
JWT_SECRET=bookmark_manager_super_secret_jwt_key_change_this_in_production_2024
JWT_EXPIRES_IN=24h
# Email settings (optional)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_SECURE=false
EMAIL_USER=
EMAIL_PASSWORD=
EMAIL_FROM=
ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
BASE_URL=http://localhost:3001
BCRYPT_SALT_ROUNDS=12
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
AUTH_RATE_LIMIT_MAX=5
This should work perfectly with your Docker setup! Let me know if you encounter any issues.