# Crew Admin Panel

A comprehensive administration platform built with Laravel 5.2 for managing custom sportswear operations, product catalogs, and customer relationships.

## Overview

Crew Admin is a web-based administration interface designed to streamline business operations for Crew Sportswear's custom merchandise management. The platform provides robust tools for inventory control, order processing, and analytics.

## Technology Stack

- **Framework**: Laravel 5.2
- **PHP Version**: 7.4
- **Web Server**: Apache 2.4
- **Database**: MySQL (separate container)
- **Reverse Proxy**: Traefik with Let's Encrypt SSL
- **Containerization**: Docker & Docker Compose
- **CI/CD**: Gitea Actions

## Features

- User authentication and role-based access control
- Product and inventory management
- Order processing and tracking
- Customer relationship management
- Analytics and reporting dashboard
- RESTful API endpoints
- Secure HTTPS communication
- Automated deployment workflows

## Requirements

- Docker Engine 20.10+
- Docker Compose 2.0+
- PHP 7.4 (for local development)
- Composer 1.x
- MySQL 5.7+ or MariaDB 10.3+

## Deployment

### Production Deployment

Production is automatically deployed via Gitea Actions when pushing to `main` or `master` branch.

**Production URL**: https://admin.crewsportswear.app

```bash
# Trigger production deployment
git push origin main
```

The deployment workflow:
1. Builds Docker image
2. Transfers image to production server via SSH
3. Deploys to `/var/www/apps/crew_admin`
4. Runs migrations and cache clearing
5. Performs health check

### Development Deployment

Development environment is automatically deployed when pushing to `dev` branch.

**Development URL**: https://dev-admin.crewsportswear.app

```bash
# Trigger dev deployment
git push origin dev
```

### Manual Deployment

```bash
# Build and deploy production
docker compose -f docker-compose.prod.yml up -d --build

# Build and deploy development
docker compose -f docker-compose.dev.yml up -d --build
```

## Configuration

### Environment Variables

Create a `.env` file in the deployment directory with:

```env
# Application
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:your-32-character-key-here
APP_URL=https://admin.crewsportswear.app

# Database (external MySQL container)
DB_CONNECTION=mysql
DB_HOST=mysql_container_name
DB_PORT=3306
DB_DATABASE=crew_admin
DB_USERNAME=crew_admin_user
DB_PASSWORD=your-secure-password

# Additional configuration
IMAGES_DIRECTORY=/path/to/images
PRODUCTION_PRIVATE_SERVER=http://internal-server
```

### SSL/HTTPS Configuration

The application uses Traefik as a reverse proxy with automatic Let's Encrypt SSL certificates. The certresolver is set to `le` in `docker-compose.prod.yml`:

```yaml
traefik.http.routers.crew-admin.tls=true
traefik.http.routers.crew-admin.tls.certresolver=le
```

Ensure your DNS points to the server before deployment.

## Docker Networks

The application requires two Docker networks:

- `traefik-public`: External network for Traefik routing
- `crew-app-net`: Internal network for inter-service communication

These are automatically created by the deployment script.

## Local Development

```bash
# Install dependencies
composer install

# Copy environment file
cp .env.example .env

# Generate application key
php artisan key:generate

# Configure database in .env file
# Run migrations
php artisan migrate

# Start development server
php artisan serve
```

## Gitea Workflows

### Production Deployment Workflow
- **File**: `.gitea/workflows/deploy.yml`
- **Trigger**: Push to `main` or `master`
- **Target**: `/var/www/apps/crew_admin`
- **Domain**: admin.crewsportswear.app

### Development Deployment Workflow
- **File**: `.gitea/workflows/deploy-dev.yml`
- **Trigger**: Push to `dev`
- **Target**: `/var/www/apps/crew_admin_dev`
- **Domain**: dev-admin.crewsportswear.app

### Docker Registry Build Workflow
- **File**: `.gitea/workflows/build-push.yml`
- **Trigger**: Version tag (e.g., `v1.0.0`)
- **Action**: Builds and pushes to Docker registry

## Required Secrets

Configure these secrets in your Gitea repository settings:

- `DEPLOY_SSH_KEY`: SSH private key for deployment server
- `DEPLOY_HOST`: Deployment server hostname/IP
- `DEPLOY_USER`: SSH username for deployment

## Artisan Commands

Common commands for cache management:

```bash
# Clear all caches
docker exec crew_admin_app php artisan cache:clear
docker exec crew_admin_app php artisan config:clear
docker exec crew_admin_app php artisan view:clear

# Rebuild caches
docker exec crew_admin_app php artisan config:cache
docker exec crew_admin_app php artisan route:cache
```

## Troubleshooting

### Container Not Starting

```bash
# Check container logs
docker logs crew_admin_app

# Check if networks exist
docker network ls | grep -E "traefik-public|crew-app-net"

# Recreate networks if needed
docker network create traefik-public
docker network create crew-app-net
```

### SSL Certificate Issues

```bash
# Check Traefik logs
docker logs traefik 2>&1 | grep crew-admin

# Verify DNS is pointing correctly
dig admin.crewsportswear.app
```

### Database Connection Issues

```bash
# Verify database container is running
docker ps | grep mysql

# Check network connectivity
docker exec crew_admin_app ping mysql_container_name
```

## License

Proprietary software for Crew Sportswear operations.
