5.3 KiB
5.3 KiB
Docker Setup for ScriptShare
This document explains how to build and run ScriptShare using Docker.
Prerequisites
- Docker Desktop (for Windows/macOS) or Docker Engine (for Linux)
- Docker Compose (usually included with Docker Desktop)
Quick Start
Using Docker Compose (Recommended)
# Clone the repository
git clone <repository-url>
cd scriptshare-cursor
# Build and start the application
docker-compose up --build
# Access the application at http://localhost:3000
Using Docker Build Directly
# Build the image
docker build -t scriptshare .
# Run the container
docker run -p 3000:80 scriptshare
Configuration
Build Arguments
You can customize the build using these arguments:
docker build \
--build-arg VITE_APP_NAME="Your ScriptShare" \
--build-arg VITE_APP_URL="https://your-domain.com" \
--build-arg VITE_ANALYTICS_ENABLED="true" \
-t scriptshare .
Environment Variables
Variable | Default | Description |
---|---|---|
VITE_APP_NAME |
"ScriptShare" | Application name shown in UI |
VITE_APP_URL |
"https://scriptshare.example.com" | Base URL for the application |
VITE_ANALYTICS_ENABLED |
"false" | Enable/disable analytics tracking |
Docker Compose Configuration
Update docker-compose.yml
to customize build arguments:
services:
scriptshare:
build:
context: .
dockerfile: Dockerfile
args:
- VITE_APP_NAME=Your ScriptShare
- VITE_APP_URL=https://your-domain.com
- VITE_ANALYTICS_ENABLED=true
ports:
- "3000:80"
Features
Multi-Stage Build
The Dockerfile uses a multi-stage build for optimization:
- Builder Stage: Builds the React application with all dependencies
- Production Stage: Serves the built files using nginx
Security Features
- Runs as non-root user (nginx)
- Minimal production image based on nginx:alpine
- Proper file permissions
- Health checks included
Dependencies Handled
The build process properly handles:
- Native modules (bcrypt, etc.) with build dependencies
- React Syntax Highlighter
- All UI component libraries
- TypeScript compilation
- Note: For Docker builds, server-side dependencies (MySQL, bcrypt, JWT) are temporarily disabled to create a frontend-only demo build
Health Checks
The container includes health checks at:
- Docker level:
curl -f http://localhost/health
- nginx level: Configured in nginx.conf
Development
Development Build
For development with hot reloading:
# Install dependencies locally
npm install
# Start development server
npm run dev
# Access at http://localhost:5173
Building for Production
# Build the application
npm run build
# Preview the build
npm run preview
Production Deployment
With Reverse Proxy (Recommended)
If using with a reverse proxy like Traefik or nginx:
# docker-compose.yml
services:
scriptshare:
build: .
labels:
- "traefik.enable=true"
- "traefik.http.routers.scriptshare.rule=Host(\`your-domain.com\`)"
- "traefik.http.services.scriptshare.loadbalancer.server.port=80"
Standalone Deployment
# Build for production
docker build -t scriptshare:latest .
# Run with custom port
docker run -d -p 80:80 --name scriptshare-app scriptshare:latest
Volumes
The container uses these volumes:
scriptshare_logs:/var/log/nginx
- nginx logs
Troubleshooting
Build Issues
- Native dependency errors: Ensure Docker has enough memory allocated
- Build timeout: Increase Docker build timeout in Docker Desktop settings
- Permission errors: Check that Docker has access to the project directory
- Server-side import errors: The Dockerfile automatically handles server-side imports by creating a frontend-only build
Runtime Issues
- Health check failures: Check nginx logs in the container
- Static files not served: Verify build output in
/usr/share/nginx/html
- Environment variables: Ensure they're set at build time, not runtime
Checking Logs
# View application logs
docker-compose logs scriptshare
# View nginx access logs
docker exec <container-id> tail -f /var/log/nginx/access.log
# View nginx error logs
docker exec <container-id> tail -f /var/log/nginx/error.log
Image Size Optimization
The production image is optimized by:
- Using Alpine Linux base images
- Multi-stage builds to exclude build dependencies
- .dockerignore to exclude unnecessary files
- Only copying built assets to production stage
Expected image size: ~25-30MB (compressed)
Security Considerations
- Container runs as non-root user
- Minimal attack surface with alpine base
- No build tools in production image
- Proper file permissions set
- Health checks for monitoring
Updates
To update the application:
- Pull latest code changes
- Rebuild the image:
docker-compose build
- Restart containers:
docker-compose up -d
Support
For issues with Docker setup:
- Check Docker Desktop is running
- Verify Docker version compatibility
- Review build logs for specific errors
- Check system resources (memory, disk space)