diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b3abea9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ + .git + vendor + node_modules + storage/logs + storage/framework/cache/data + .env \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..12c51dc --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,64 @@ +stages: + - test + - build + +variables: + DOCKER_DRIVER: overlay2 + +# 🔍 Étape tests (optionnelle mais recommandée) +test: + stage: test + image: laravelsail/php84-composer + services: + - name: mysql:8.0 + alias: mysql + + variables: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: hunting_api + MYSQL_USER: root + MYSQL_PASSWORD: root + DB_CONNECTION: mysql + DB_HOST: mysql + DB_PORT: 3306 + DB_DATABASE: hunting_api + DB_USERNAME: root + DB_PASSWORD: root + APP_ENV: testing + APP_KEY: base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + before_script: + - apt-get update && apt-get install -y git zip unzip + - cp .env .env.ci || true + - php artisan key:generate --force + - php artisan migrate --force + + script: + - php artisan test + +# 🐳 Build + push image dans le registry GitLab +docker-build-push: + stage: build + image: docker:24 + services: + - docker:24-dind + + variables: + DOCKER_TLS_CERTDIR: "/certs" + IMAGE_TAG: "$CI_REGISTRY_IMAGE:${CI_COMMIT_SHORT_SHA}" + + before_script: + # Login au registry GitLab + - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" + + script: + # Build de l'image à partir du Dockerfile de la racine + - docker build -t "$IMAGE_TAG" . + # Tag 'latest' en plus (optionnel mais pratique) + - docker tag "$IMAGE_TAG" "$CI_REGISTRY_IMAGE:latest" + # Push des tags + - docker push "$IMAGE_TAG" + - docker push "$CI_REGISTRY_IMAGE:latest" + + only: + - main diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e27368d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# Dockerfile + +FROM laravelsail/php84-composer AS build + +WORKDIR /var/www/html + +# Copier le code +COPY . . + +# Installer les dépendances PHP (prod) +RUN composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader + +# Build des assets si tu utilises Vite +# RUN npm ci && npm run build + +# ----------------------------- +# Image finale (runtime) +# ----------------------------- +FROM laravelsail/php84-composer + +WORKDIR /var/www/html + +COPY --from=build /var/www/html /var/www/html + +# Optimisations Laravel +RUN php artisan config:cache \ + && php artisan route:cache + +EXPOSE 80 + +CMD ["php-fpm"] diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..f7bdddb --- /dev/null +++ b/compose.yaml @@ -0,0 +1,56 @@ +services: + laravel.test: + build: + context: "./vendor/laravel/sail/runtimes/8.4" + dockerfile: Dockerfile + args: + WWWGROUP: "${WWWGROUP}" + image: "sail-8.4/app" + extra_hosts: + - "host.docker.internal:host-gateway" + ports: + - "${APP_PORT:-80}:80" + - "${VITE_PORT:-5173}:${VITE_PORT:-5173}" + environment: + WWWUSER: "${WWWUSER}" + LARAVEL_SAIL: 1 + XDEBUG_MODE: "${SAIL_XDEBUG_MODE:-off}" + XDEBUG_CONFIG: "${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}" + IGNITION_LOCAL_SITES_PATH: "${PWD}" + volumes: + - ".:/var/www/html" + networks: + - sail + depends_on: + - mysql + mysql: + image: "mysql/mysql-server:8.0" + ports: + - "${FORWARD_DB_PORT:-3306}:3306" + environment: + MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}" + MYSQL_ROOT_HOST: "%" + MYSQL_DATABASE: "${DB_DATABASE}" + MYSQL_USER: "${DB_USERNAME}" + MYSQL_PASSWORD: "${DB_PASSWORD}" + MYSQL_ALLOW_EMPTY_PASSWORD: 1 + MYSQL_EXTRA_OPTIONS: "${MYSQL_EXTRA_OPTIONS:-}" + volumes: + - "sail-mysql:/var/lib/mysql" + - "./vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh" + networks: + - sail + healthcheck: + test: + - CMD + - mysqladmin + - ping + - "-p${DB_PASSWORD}" + retries: 3 + timeout: 5s +networks: + sail: + driver: bridge +volumes: + sail-mysql: + driver: local diff --git a/phpunit.xml b/phpunit.xml index d703241..bbfcf81 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -23,8 +23,7 @@ - - +