From 7592fc987f58f698dd4623b2537baa0d18179486 Mon Sep 17 00:00:00 2001 From: Ben Edmunds Date: Thu, 17 Apr 2025 15:37:57 -0400 Subject: [PATCH] Setup docker and make --- .dockerignore | 11 ++++++++ Dockerfile | 35 ++++++++++++++++++++++++++ Makefile | 60 ++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 13 ++++++++++ docker-entrypoint.sh | 5 ++++ 5 files changed, 124 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 docker-compose.yml create mode 100644 docker-entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..dc8fb48 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.git +.github +vendor +node_modules +docs +.dockerignore +Dockerfile +docker-compose.yml +.gitignore +.gitattributes +README.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..07ea620 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +FROM php:8.3-cli + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + unzip \ + libzip-dev \ + libxml2-dev \ + libonig-dev \ + zip \ + && rm -rf /var/lib/apt/lists/* + +# Install PHP extensions required by the project +RUN docker-php-ext-install zip +RUN docker-php-ext-install dom +RUN docker-php-ext-install simplexml +RUN docker-php-ext-install mbstring +RUN docker-php-ext-configure pcntl --enable-pcntl && docker-php-ext-install pcntl + +# Install Composer +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +# Set working directory +WORKDIR /var/www/html + +# Copy project files +COPY . . + +# Set up entrypoint +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +RUN chmod +x /usr/local/bin/docker-entrypoint.sh +ENTRYPOINT ["docker-entrypoint.sh"] + +# Install dependencies by default (can be overridden) +CMD ["composer", "install"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bf1364a --- /dev/null +++ b/Makefile @@ -0,0 +1,60 @@ +.PHONY: build install generate build-site serve test lint fix-lint coverage help + +IMAGE_NAME = mergephp-website +CONTAINER_NAME = mergephp-website-container +HOST_PORT = 8000 +CONTAINER_PORT = 8000 + +# Default target +help: + @echo "Available commands:" + @echo " make build - Build the Docker image" + @echo " make install - Install Composer dependencies" + @echo " make generate - Generate a new meetup" + @echo " make build-site - Build the static site" + @echo " make serve - Serve the site on localhost:$(HOST_PORT)" + @echo " make test - Run PHPUnit tests" + @echo " make lint - Check code style" + @echo " make fix-lint - Fix lint errors automatically" + @echo " make coverage - Generate code coverage report" + @echo " make bash - Open a bash shell in the container" + +# Build the Docker image +build: + docker build -t $(IMAGE_NAME) . + +# Install dependencies +install: + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer install + +# Generate a new meetup +generate: build + docker run --rm -it -v $(PWD):/var/www/html $(IMAGE_NAME) composer generate + +# Build the static site +build-site: build + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer build + +# Serve the site +serve: build + docker run --rm -p $(HOST_PORT):$(CONTAINER_PORT) -v $(PWD):/var/www/html --name $(CONTAINER_NAME) $(IMAGE_NAME) php -S 0.0.0.0:$(CONTAINER_PORT) -t docs/ + +# Run tests +test: build + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer test + +# Run lint check +lint: build + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer lint + +# Fix lint errors +fix-lint: build + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer fix-lint-errors + +# Generate code coverage +coverage: build + docker run --rm -v $(PWD):/var/www/html $(IMAGE_NAME) composer coverage + +# Open a bash shell in the container +bash: build + docker run --rm -it -v $(PWD):/var/www/html $(IMAGE_NAME) bash diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b48ef11 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile + container_name: mergephp-website + volumes: + - .:/var/www/html + ports: + - "8000:8000" + command: php -S 0.0.0.0:8000 -t docs/ diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..451af36 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +# Execute the command passed as arguments +exec "$@"