| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # Multi-stage build for unified backend + frontend container
- FROM node:18-alpine AS frontend-build
- # Set working directory for frontend build
- WORKDIR /app/frontend
- # Copy frontend package files
- COPY frontend/package*.json ./
- # Install frontend dependencies
- RUN npm ci --only=production
- # Copy frontend source code
- COPY frontend/ ./
- # Build frontend for production
- RUN npm run build && ls -la dist/
- # Backend + Frontend unified container
- FROM php:8.1-apache
- # Install system dependencies and PHP extensions
- RUN apt-get update && apt-get install -y \
- libzip-dev \
- libpng-dev \
- libjpeg-dev \
- libfreetype6-dev \
- zip \
- unzip \
- curl \
- && docker-php-ext-configure gd --with-freetype --with-jpeg \
- && docker-php-ext-install gd zip pdo_mysql \
- && a2enmod rewrite \
- && a2enmod headers
- # Install Composer
- COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
- # Set working directory for backend
- WORKDIR /var/www/html
- # Copy backend source code
- COPY backend/ ./
- # Install backend dependencies
- RUN composer install --no-dev --optimize-autoloader
- # Create api directory and copy backend files there
- RUN mkdir -p api && cp -r *.php api/ && cp -r models api/ && cp -r vendor api/ && cp composer.json api/ && cp -r config api/ && cp -r middleware api/ && cp -r database api/
- # Copy built frontend files to frontend/dist directory
- RUN mkdir -p frontend/dist
- COPY --from=frontend-build /app/frontend/dist/ ./frontend/dist/
- # Create uploads directory and set permissions
- RUN mkdir -p uploads && chmod -R 755 uploads
- # Copy Apache configuration
- COPY docker/apache-unified-simple.conf /etc/apache2/sites-available/unified.conf
- # Enable the unified site
- RUN a2ensite unified.conf && a2dissite 000-default.conf
- # Set environment variables for frontend build
- ARG VUE_APP_API_URL=/api
- ENV VUE_APP_API_URL=/api
- # Expose port 80
- EXPOSE 80
- # Health check
- HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
- CMD curl -f http://localhost/api/company.php || exit 1
- # Start Apache
- CMD ["apache2-foreground"]
|