This commit is contained in:
2025-07-20 20:43:06 +02:00
parent 0abee5b794
commit 29592c7fc8
93 changed files with 23400 additions and 131 deletions

249
scripts/docker-setup.sh Executable file
View File

@ -0,0 +1,249 @@
#!/bin/bash
# Docker-based Bookmark Manager Setup Script for Linux
echo "🐳 Setting up Bookmark Manager with Docker Database..."
echo ""
# Function to check command exists
check_command() {
if ! command -v $1 &> /dev/null; then
echo "$1 is not installed or not in PATH"
return 1
else
echo "$1 found: $(which $1)"
return 0
fi
}
# Check prerequisites
echo "📋 Checking prerequisites..."
echo ""
NODE_OK=false
DOCKER_OK=false
if check_command "node"; then
NODE_VERSION=$(node --version)
echo " Version: $NODE_VERSION"
NODE_OK=true
else
echo " Install with: sudo apt install nodejs npm"
fi
if check_command "npm"; then
NPM_VERSION=$(npm --version)
echo " Version: $NPM_VERSION"
else
echo " npm should come with Node.js"
fi
if check_command "docker"; then
DOCKER_VERSION=$(docker --version)
echo " Version: $DOCKER_VERSION"
DOCKER_OK=true
else
echo " Install with: sudo apt install docker.io"
fi
if docker compose version >/dev/null 2>&1; then
COMPOSE_VERSION=$(docker compose version)
echo "✅ docker compose found"
echo " Version: $COMPOSE_VERSION"
else
echo "❌ docker compose not available"
echo " Make sure you have Docker with Compose plugin installed"
DOCKER_OK=false
fi
echo ""
if [ "$NODE_OK" = false ] || [ "$DOCKER_OK" = false ]; then
echo "❌ Prerequisites not met. Please install missing components:"
echo ""
if [ "$NODE_OK" = false ]; then
echo "Install Node.js:"
echo " sudo apt update"
echo " sudo apt install nodejs npm"
fi
if [ "$DOCKER_OK" = false ]; then
echo "Install Docker:"
echo " sudo apt update"
echo " sudo apt install docker.io docker-compose-plugin"
echo " sudo systemctl start docker"
echo " sudo usermod -aG docker \$USER"
echo " # Then logout and login again"
fi
exit 1
fi
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
echo "❌ Docker is not running. Starting Docker..."
sudo systemctl start docker
sleep 2
if ! docker info >/dev/null 2>&1; then
echo "❌ Failed to start Docker. Please run:"
echo " sudo systemctl start docker"
echo " sudo usermod -aG docker \$USER"
echo " # Then logout and login again"
exit 1
fi
fi
echo "✅ Docker is running"
# Navigate to backend directory
if [ ! -d "backend" ]; then
echo "❌ Backend directory not found. Are you in the correct directory?"
exit 1
fi
cd backend
# Check if docker-compose.yml exists
if [ ! -f "docker-compose.yml" ]; then
echo "❌ docker-compose.yml not found in backend directory"
exit 1
fi
# Start PostgreSQL with Docker
echo "🐳 Starting PostgreSQL database with Docker..."
if docker compose up -d; then
echo "✅ Database container started"
# Wait for database to be ready
echo "⏳ Waiting for database to be ready..."
sleep 5
# Check if container is running
if docker compose ps | grep -q "Up"; then
echo "✅ Database is running"
else
echo "❌ Database container failed to start"
docker compose logs
exit 1
fi
else
echo "❌ Failed to start database container"
exit 1
fi
# Install Node.js dependencies
echo "📦 Installing Node.js dependencies..."
if npm install; then
echo "✅ Dependencies installed successfully"
else
echo "❌ Failed to install dependencies"
echo " Try: npm cache clean --force && npm install"
exit 1
fi
# Create environment file
if [ ! -f .env ]; then
echo "📝 Creating environment file..."
if cp .env.example .env; then
echo "✅ Environment file created"
# Update .env with Docker database settings
echo "🔧 Configuring environment for Docker database..."
# Create a properly configured .env file
cat > .env << 'EOF'
NODE_ENV=development
PORT=3001
# Docker PostgreSQL settings
DB_HOST=localhost
DB_PORT=5432
DB_NAME=bookmark_manager
DB_USER=postgres
DB_PASSWORD=password
DB_SSL=false
# JWT Configuration - CHANGE THIS IN PRODUCTION
JWT_SECRET=bookmark_manager_docker_jwt_secret_key_change_in_production_2024
JWT_EXPIRES_IN=24h
# Email Configuration (optional)
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
EOF
echo "✅ Environment configured for Docker database"
else
echo "❌ Failed to create environment file"
exit 1
fi
else
echo "✅ Environment file already exists"
fi
# Create test database
echo "🗄️ Creating test database..."
if docker exec bookmark_postgres psql -U postgres -d bookmark_manager -c "CREATE DATABASE bookmark_manager_test;" 2>/dev/null; then
echo "✅ Test database created"
else
echo " Test database may already exist (this is OK)"
fi
# Test database connection
echo "🔍 Testing database connection..."
sleep 2
if npm run db:status >/dev/null 2>&1; then
echo "✅ Database connection successful"
else
echo "⚠️ Database connection test failed, but continuing..."
fi
# Initialize database tables
echo "🗄️ Initializing database tables..."
if npm run db:init; then
echo "✅ Database tables initialized successfully"
else
echo "❌ Database initialization failed"
echo ""
echo "Try running manually:"
echo " npm run db:diagnostics"
echo " npm run db:init"
exit 1
fi
echo ""
echo "🎉 Docker setup complete!"
echo ""
echo "Database is running in Docker container: bookmark_postgres"
echo ""
echo "To start the application:"
echo " cd backend"
echo " npm run dev"
echo ""
echo "Then open http://localhost:3001 in your browser"
echo ""
echo "The backend now serves the frontend files automatically!"
echo ""
echo "Useful Docker commands:"
echo " docker compose ps - Check container status"
echo " docker compose logs postgres - View database logs"
echo " docker compose down - Stop database"
echo " docker compose up -d - Start database"
echo ""
echo "Database commands:"
echo " npm run db:status - Check database connection"
echo " npm run db:init - Initialize/reset database"
echo " npm test - Run tests"
echo ""