From ac2afd694937bb56e9724543bf35b285a76ca9cc Mon Sep 17 00:00:00 2001 From: chamiakJ Date: Mon, 28 Apr 2025 12:37:41 +0530 Subject: [PATCH] Remove legacy environment files and update Docker configuration for environment management - Deleted .env and .env.example files to streamline environment variable management. - Updated docker-compose.yml to utilize env_file for frontend and backend services. - Enhanced update-docker-env.sh to create separate environment files for development and production. - Revised README.md to reflect the new environment file structure and setup instructions. --- .env | 34 ------------ .env.example | 34 ------------ README.md | 52 +++++++----------- docker-compose.yml | 37 ++----------- update-docker-env.sh | 100 ++++++++++++++++++++++++++++++---- worklenz-backend/.env.example | 76 -------------------------- 6 files changed, 113 insertions(+), 220 deletions(-) delete mode 100644 .env delete mode 100644 .env.example delete mode 100644 worklenz-backend/.env.example diff --git a/.env b/.env deleted file mode 100644 index 97d22a55..00000000 --- a/.env +++ /dev/null @@ -1,34 +0,0 @@ -# Database configuration -DB_USER=postgres -DB_PASSWORD=password -DB_NAME=worklenz_db -DB_HOST=db -DB_PORT=5432 -DB_MAX_CLIENTS=50 - -# Server configuration -NODE_ENV=development -PORT=3000 -SESSION_NAME=worklenz.sid -SESSION_SECRET=worklenz-session-secret -COOKIE_SECRET=worklenz-cookie-secret - -# CORS -SOCKET_IO_CORS=http://localhost:5000 -SERVER_CORS=* - -# Storage configuration (MinIO) -STORAGE_PROVIDER=s3 -AWS_REGION=us-east-1 -AWS_BUCKET=worklenz-bucket -S3_ACCESS_KEY_ID=minioadmin -S3_SECRET_ACCESS_KEY=minioadmin -S3_URL=http://minio:9000 - -# Application URLs -HOSTNAME=localhost:5000 -FRONTEND_URL=http://localhost:5000 - -# For local development, set these to the frontend service -LOGIN_FAILURE_REDIRECT=http://localhost:5000 -LOGIN_SUCCESS_REDIRECT=http://localhost:5000/auth/authenticate \ No newline at end of file diff --git a/.env.example b/.env.example deleted file mode 100644 index 9765d3cc..00000000 --- a/.env.example +++ /dev/null @@ -1,34 +0,0 @@ -# Database configuration -DB_USER=postgres -DB_PASSWORD=your_db_password -DB_NAME=worklenz_db -DB_HOST=localhost -DB_PORT=5432 -DB_MAX_CLIENTS=50 - -# Server configuration -NODE_ENV=development -PORT=3000 -SESSION_NAME=worklenz.sid -SESSION_SECRET=your_session_secret -COOKIE_SECRET=your_cookie_secret - -# CORS -SOCKET_IO_CORS=http://localhost:5000 -SERVER_CORS=* - -# Storage configuration -STORAGE_PROVIDER=s3 -AWS_REGION=your_aws_region -AWS_BUCKET=your_bucket_name -S3_ACCESS_KEY_ID=your_access_key_id -S3_SECRET_ACCESS_KEY=your_secret_access_key -S3_URL=your_s3_url - -# Application URLs -HOSTNAME=localhost:5000 -FRONTEND_URL=http://localhost:5000 - -# For local development -LOGIN_FAILURE_REDIRECT=http://localhost:5000 -LOGIN_SUCCESS_REDIRECT=http://localhost:5000/auth/authenticate \ No newline at end of file diff --git a/README.md b/README.md index db71d6f9..a6885d95 100644 --- a/README.md +++ b/README.md @@ -358,42 +358,34 @@ const s3Client = new S3Client({ ### Environment Configuration -The `.env` file includes the necessary configuration for using MinIO: +The project uses the following environment file structure: -``` -STORAGE_PROVIDER=s3 -AWS_REGION=us-east-1 -AWS_BUCKET=worklenz-bucket -S3_ACCESS_KEY_ID=minioadmin -S3_SECRET_ACCESS_KEY=minioadmin -S3_URL=http://minio:9000 +- **Frontend**: + - `worklenz-frontend/.env.development` - Development environment variables + - `worklenz-frontend/.env.production` - Production build variables + +- **Backend**: + - `worklenz-backend/.env` - Backend environment variables + +### Setting Up Environment Files + +The Docker environment script will create or overwrite all environment files: + +```bash +# For HTTP/WS +./update-docker-env.sh your-hostname + +# For HTTPS/WSS +./update-docker-env.sh your-hostname true ``` -When the backend service starts, it will use these environment variables to connect to MinIO for file storage. - -## Development - -For development, you can use the provided Docker setup which includes all necessary dependencies. The code will be running inside containers, but you can still edit files locally and see changes reflected in real-time. - -## Production Deployment - -For production deployment: - -1. Update the `.env` file with production settings -2. Build custom Docker images or use the provided ones -3. Deploy using Docker Compose or a container orchestration platform like Kubernetes - -For MinIO in production, consider: -- Setting up proper credentials (change default minioadmin/minioadmin) -- Configuring persistent storage -- Setting up proper networking and access controls -- Using multiple MinIO instances for high availability +This script generates properly configured environment files for both development and production environments. ## Docker Deployment ### Local Development with Docker -1. Set up the environment variables: +1. Set up the environment files: ```bash # For HTTP/WS ./update-docker-env.sh @@ -401,8 +393,6 @@ For MinIO in production, consider: # For HTTPS/WSS ./update-docker-env.sh localhost true ``` - - This will create a `.env` file with default settings for local development. 2. Run the application using Docker Compose: ```bash @@ -417,7 +407,7 @@ For MinIO in production, consider: When deploying to a remote server: -1. Set up the environment variables with your server's hostname: +1. Set up the environment files with your server's hostname: ```bash # For HTTP/WS ./update-docker-env.sh your-server-hostname diff --git a/docker-compose.yml b/docker-compose.yml index 8c6a831e..ebb7e028 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,9 +7,8 @@ services: depends_on: backend: condition: service_started - environment: - - VITE_API_URL=${VITE_API_URL:-http://backend:3000} - - VITE_SOCKET_URL=${VITE_SOCKET_URL:-ws://backend:3000} + env_file: + - ./worklenz-frontend/.env.production networks: - worklenz @@ -23,36 +22,8 @@ services: condition: service_healthy minio: condition: service_started - environment: - - AWS_REGION=${AWS_REGION:-us-east-1} - - BACKEND_PUBLIC_DIR - - BACKEND_VIEWS_DIR - - COMMIT_BUILD_IMMEDIATELY - - COOKIE_SECRET - - DB_HOST=${DB_HOST:-db} - - DB_MAX_CLIENTS - - DB_NAME=${DB_NAME:-worklenz_db} - - DB_PASSWORD=${DB_PASSWORD:-password} - - DB_PORT=${DB_PORT:-5432} - - DB_USER=${DB_USER:-postgres} - - GOOGLE_CALLBACK_URL - - GOOGLE_CLIENT_ID - - GOOGLE_CLIENT_SECRET - - HOSTNAME - - LOGIN_FAILURE_REDIRECT - - NODE_ENV=${NODE_ENV:-development} - - PORT=${PORT:-3000} - - SESSION_NAME - - SESSION_SECRET - - SLACK_WEBHOOK - - SOCKET_IO_CORS - - SOURCE_EMAIL - - USE_PG_NATIVE - - STORAGE_PROVIDER=${STORAGE_PROVIDER:-s3} - - AWS_BUCKET=${BUCKET:-worklenz-bucket} - - AWS_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID:-minioadmin} - - AWS_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY:-minioadmin} - - S3_URL=${S3_URL:-http://minio:9000} + env_file: + - ./worklenz-backend/.env networks: - worklenz diff --git a/update-docker-env.sh b/update-docker-env.sh index 1ba25997..cabcfab5 100755 --- a/update-docker-env.sh +++ b/update-docker-env.sh @@ -19,32 +19,108 @@ else WS_PREFIX="ws://" fi -# Create or update root .env file -cat > .env << EOL -# Frontend Configuration +# Create or overwrite frontend .env.development file +mkdir -p worklenz-frontend +cat > worklenz-frontend/.env.development << EOL +# API Connection +VITE_API_URL=http://localhost:3000 +VITE_SOCKET_URL=ws://localhost:3000 + +# Application Environment +VITE_APP_TITLE=Worklenz +VITE_APP_ENV=development + +# Mixpanel +VITE_MIXPANEL_TOKEN= + +# Recaptcha +VITE_ENABLE_RECAPTCHA=false +VITE_RECAPTCHA_SITE_KEY= + +# Session ID +VITE_WORKLENZ_SESSION_ID=worklenz-session-id +EOL + +# Create frontend .env.production file +cat > worklenz-frontend/.env.production << EOL +# API Connection VITE_API_URL=${HTTP_PREFIX}${HOSTNAME}:3000 VITE_SOCKET_URL=${WS_PREFIX}${HOSTNAME}:3000 -# Backend Configuration +# Application Environment +VITE_APP_TITLE=Worklenz +VITE_APP_ENV=production + +# Mixpanel +VITE_MIXPANEL_TOKEN= + +# Recaptcha +VITE_ENABLE_RECAPTCHA=false +VITE_RECAPTCHA_SITE_KEY= + +# Session ID +VITE_WORKLENZ_SESSION_ID=worklenz-session-id +EOL + +# Create backend environment file +mkdir -p worklenz-backend +cat > worklenz-backend/.env << EOL +# Server +NODE_ENV=production +PORT=3000 +SESSION_NAME=worklenz.sid +SESSION_SECRET=change_me_in_production +COOKIE_SECRET=change_me_in_production + +# CORS +SOCKET_IO_CORS=${HTTP_PREFIX}${HOSTNAME}:5000 +SERVER_CORS=${HTTP_PREFIX}${HOSTNAME}:5000 + +# Database DB_HOST=db DB_PORT=5432 DB_USER=postgres DB_PASSWORD=password DB_NAME=worklenz_db -NODE_ENV=development -PORT=3000 +DB_MAX_CLIENTS=50 +USE_PG_NATIVE=true # Storage Configuration -AWS_REGION=us-east-1 STORAGE_PROVIDER=s3 -BUCKET=worklenz-bucket -S3_ACCESS_KEY_ID=minioadmin -S3_SECRET_ACCESS_KEY=minioadmin +AWS_REGION=us-east-1 +AWS_BUCKET=worklenz-bucket +AWS_ACCESS_KEY_ID=minioadmin +AWS_SECRET_ACCESS_KEY=minioadmin S3_URL=http://minio:9000 + +# Backend Directories +BACKEND_PUBLIC_DIR=./public +BACKEND_VIEWS_DIR=./views + +# Host +HOSTNAME=${HOSTNAME} +FRONTEND_URL=${HTTP_PREFIX}${HOSTNAME}:5000 + +# Email +SOURCE_EMAIL=no-reply@example.com + +# Notifications +SLACK_WEBHOOK= + +# Other Settings +COMMIT_BUILD_IMMEDIATELY=true + +# JWT Secret +JWT_SECRET=change_me_in_production EOL echo "Environment configuration updated for ${HOSTNAME} with" $([ "$USE_SSL" = "true" ] && echo "HTTPS/WSS" || echo "HTTP/WS") +echo "Created/updated environment files:" +echo "- worklenz-frontend/.env.development (development)" +echo "- worklenz-frontend/.env.production (production build)" +echo "- worklenz-backend/.env" +echo echo "To run with Docker Compose, use: docker-compose up -d" echo -echo "API URL: ${VITE_API_URL:-${HTTP_PREFIX}${HOSTNAME}:3000}" -echo "Socket URL: ${VITE_SOCKET_URL:-${WS_PREFIX}${HOSTNAME}:3000}" \ No newline at end of file +echo "Production API URL: ${HTTP_PREFIX}${HOSTNAME}:3000" +echo "Production Socket URL: ${WS_PREFIX}${HOSTNAME}:3000" \ No newline at end of file diff --git a/worklenz-backend/.env.example b/worklenz-backend/.env.example deleted file mode 100644 index 145f2411..00000000 --- a/worklenz-backend/.env.example +++ /dev/null @@ -1,76 +0,0 @@ -# Server -NODE_ENV=development -PORT=3000 -SESSION_NAME=worklenz.sid -SESSION_SECRET="your_session_secret" -COOKIE_SECRET="your_cookie_secret" - -# CORS -SOCKET_IO_CORS=http://localhost:5000 -SERVER_CORS=* - -# Database -DB_USER=postgres -DB_PASSWORD=your_db_password -DB_NAME=worklenz_db -DB_HOST=localhost -DB_PORT=5432 -DB_MAX_CLIENTS=50 - -# Google Login -GOOGLE_CLIENT_ID="your_google_client_id" -GOOGLE_CLIENT_SECRET="your_google_client_secret" -GOOGLE_CALLBACK_URL="http://localhost:5000/secure/google/verify" -LOGIN_FAILURE_REDIRECT="http://localhost:5000/auth/authenticating" -LOGIN_SUCCESS_REDIRECT="http://localhost:5000/auth/authenticating" - -# CLI -ANGULAR_DIST_DIR="path/to/frontend/dist" -ANGULAR_SRC_DIR="path/to/frontend" -BACKEND_PUBLIC_DIR="path/to/backend/public" -BACKEND_VIEWS_DIR="path/to/backend/views" -COMMIT_BUILD_IMMEDIATELY=false - -# HOST -HOSTNAME=localhost:5000 - -# SLACK -SLACK_WEBHOOK=your_slack_webhook_url -USE_PG_NATIVE=false - -# JWT SECRET -JWT_SECRET=your_jwt_secret - -# FRONTEND_URL -FRONTEND_URL=http://localhost:5000 - -# STORAGE -STORAGE_PROVIDER=s3 # values s3 or azure - -# AWS -AWS_REGION="your_aws_region" -AWS_ACCESS_KEY_ID="your_aws_access_key_id" -AWS_SECRET_ACCESS_KEY="your_aws_secret_access_key" -AWS_BUCKET="your_s3_bucket" -S3_URL="your_s3_url" - -# Azure Storage -AZURE_STORAGE_ACCOUNT_NAME="your_storage_account_name" -AZURE_STORAGE_CONTAINER="your_storage_container" -AZURE_STORAGE_ACCOUNT_KEY="your_storage_account_key" -AZURE_STORAGE_URL="your_storage_url" - -# DIRECTPAY -DP_STAGE=DEV -DP_URL=your_url -DP_MERCHANT_ID=your_merchant_id -DP_SECRET_KEY=your_secret_key -DP_API_KEY=your_api_key - -CONTACT_US_EMAIL=support@example.com - -GOOGLE_CAPTCHA_SECRET_KEY=your_captcha_secret_key -GOOGLE_CAPTCHA_PASS_SCORE=0.8 - -# Email Cronjobs -ENABLE_EMAIL_CRONJOBS=true \ No newline at end of file