diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 908749c..6140911 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,7 +13,7 @@ ## Reporting issues ## Development setup Requires PHP 8.2+ and a container runtime (Podman or Docker). The development -environment runs in containers defined by `docker-compose.yml`. +environment runs in containers defined by `docker/dev/docker-compose.yml`. On NixOS, or anywhere with Nix installed: @@ -49,7 +49,7 @@ ## Development setup | Mailhog | http://localhost:8025 | | MariaDB | localhost:3306 | -Without Nix, start the same containers directly from `docker-compose.yml`. +Without Nix, start the same containers directly from `docker/dev/docker-compose.yml`. Contributions improving the setup instructions for other platforms are welcome. ## Before opening a pull request diff --git a/README.md b/README.md index e43934d..2fc7980 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ ## 🚀 Self-hosting The production image is available at `forge.lvl0.xyz/lvl0/dishplanner:latest`. See [CHANGELOG.md](CHANGELOG.md) before upgrading. -### docker-compose.yml +### docker-compose.prod.yml ```yaml services: diff --git a/docker-compose.yml b/docker/dev/docker-compose.yml similarity index 96% rename from docker-compose.yml rename to docker/dev/docker-compose.yml index cd6cbf3..c2d8fd5 100644 --- a/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -1,10 +1,11 @@ # Local Development Docker Compose +name: dishplanner version: '3.8' services: app: build: - context: . + context: ../.. dockerfile: Dockerfile.dev container_name: dishplanner_app restart: unless-stopped @@ -41,7 +42,7 @@ services: VITE_HOST: "0.0.0.0" volumes: # Mount entire project for hot reload with SELinux context - - .:/app:Z + - ../..:/app:Z # Named volumes for performance and permission isolation - app_vendor:/app/vendor - app_node_modules:/app/node_modules @@ -64,7 +65,7 @@ services: volumes: - db_data:/var/lib/mysql # Initialize with SQL scripts - - ./docker/mysql-init:/docker-entrypoint-initdb.d + - ../mysql-init:/docker-entrypoint-initdb.d healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s diff --git a/shell.nix b/shell.nix index 3373028..5a07708 100644 --- a/shell.nix +++ b/shell.nix @@ -29,59 +29,67 @@ pkgs.mkShell { # Use keep-id for proper permission mapping in rootless podman export PODMAN_USERNS=keep-id + # Compose file location + COMPOSE_FILE="$PWD/docker/dev/docker-compose.yml" + + # =================== + # ALIASES + # =================== + alias pc='podman-compose -f $COMPOSE_FILE' + # Define helper functions dev-rebuild() { echo "🔨 Rebuilding development environment..." - PODMAN_USERNS=keep-id podman-compose down -v - PODMAN_USERNS=keep-id podman-compose build --no-cache app - PODMAN_USERNS=keep-id podman-compose up -d + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE down -v + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE build --no-cache app + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE up -d echo "✅ Rebuild complete! Check logs with: dev-logs" } dev-rebuild-quick() { echo "⚡ Quick rebuild (keeping volumes)..." - PODMAN_USERNS=keep-id podman-compose down - PODMAN_USERNS=keep-id podman-compose build app - PODMAN_USERNS=keep-id podman-compose up -d + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE down + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE build app + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE up -d echo "✅ Quick rebuild complete!" } dev-up() { echo "🚀 Starting development environment..." - PODMAN_USERNS=keep-id podman-compose up -d + PODMAN_USERNS=keep-id podman-compose -f $COMPOSE_FILE up -d echo "✅ Dev environment started!" } dev-down() { echo "🛑 Stopping development environment..." - podman-compose down + podman-compose -f $COMPOSE_FILE down echo "✅ Dev environment stopped!" } dev-restart() { echo "🔄 Restarting development environment..." - podman-compose restart + podman-compose -f $COMPOSE_FILE restart echo "✅ Dev environment restarted!" } dev-logs() { - podman-compose logs -f "$@" + podman-compose -f $COMPOSE_FILE logs -f "$@" } dev-logs-db() { - podman-compose logs -f db "$@" + podman-compose -f $COMPOSE_FILE logs -f db "$@" } dev-shell() { - podman-compose exec app sh + podman-compose -f $COMPOSE_FILE exec app sh } dev-artisan() { - podman-compose exec app php artisan "$@" + podman-compose -f $COMPOSE_FILE exec app php artisan "$@" } dev-test() { - podman-compose exec -T app env $(grep -vE '^\s*(#|$)' .env.testing) php -d memory_limit=512M vendor/bin/phpunit "$@" + podman-compose -f $COMPOSE_FILE exec -T app env $(grep -vE '^\s*(#|$)' .env.testing) php -d memory_limit=512M vendor/bin/phpunit "$@" } dev-fix-permissions() { @@ -171,12 +179,12 @@ pkgs.mkShell { echo "" # Auto-start prompt - if [ -f "docker-compose.yml" ]; then + if [ -f "$COMPOSE_FILE" ]; then read -p "Start development containers? (y/N) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Starting containers..." - podman-compose up -d + podman-compose -f $COMPOSE_FILE up -d # Wait a moment for containers to start sleep 3 @@ -188,8 +196,8 @@ pkgs.mkShell { echo " Mailhog: http://localhost:8025" echo " MariaDB: localhost:3306" echo "" - echo "Run 'podman-compose logs -f app' to follow logs" + echo "Run 'pc logs -f app' to follow logs" fi fi ''; -} \ No newline at end of file +}