diff --git a/.env.example b/.env.example index 908f69a..931c944 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,10 @@ -GIT_REPO= +BACKEND_GIT_REPO= +FRONTEND_GIT_REPO= +BACKEND_GIT_BRANCH= +FRONTEND_GIT_BRANCH= GIT_TOKEN= -GIT_BRANCH= + +MYSQL_ROOT_PASSWORD= +MYSQL_DATABASE= + TYPESENSE_API_KEY= \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 61e70c4..39fa2be 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,28 +1,43 @@ -version: "3.8" - services: php: build: - context: docker - dockerfile: docker/php/Dockerfile + context: ./docker/php + dockerfile: Dockerfile container_name: app-php extra_hosts: - "host.docker.internal:host-gateway" volumes: - app-code:/var/www/app + - frontend-public:/var/www/app/public environment: - GIT_TOKEN=${GIT_TOKEN} - - GIT_REPO=${GIT_REPO} + - BACKEND_GIT_REPO=${BACKEND_GIT_REPO} + - BACKEND_GIT_BRANCH=${BACKEND_GIT_BRANCH} depends_on: - mariadb + frontend: + build: + context: ./docker/frontend + dockerfile: Dockerfile + container_name: app-frontend + environment: + - GIT_TOKEN=${GIT_TOKEN} + - FRONTEND_GIT_REPO=${FRONTEND_GIT_REPO} + - FRONTEND_GIT_BRANCH=${FRONTEND_GIT_BRANCH} + volumes: + - frontend-public:/public + depends_on: + - php + command: [ "build" ] + nginx: image: nginx container_name: app-nginx volumes: - app-code:/var/www/app - - ./nginx/default.conf:/etc/nginx/conf.d/default.conf + - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" depends_on: @@ -31,14 +46,13 @@ services: mariadb: image: mariadb:latest environment: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: laravel + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} ports: - "3306:3306" volumes: - dbdata:/var/lib/mysql - typesense: image: typesense/typesense:29.0 restart: on-failure @@ -52,8 +66,8 @@ services: backup: build: - context: docker - dockerfile: docker/backup/Dockerfile + context: ./docker/backup + dockerfile: Dockerfile container_name: app-backup volumes: - ./backups:/backups @@ -63,8 +77,8 @@ services: reverb: build: - context: docker - dockerfile: docker/php/Dockerfile + context: ./docker/php + dockerfile: Dockerfile container_name: app-reverb entrypoint: /usr/local/bin/entrypoint.sh command: php artisan reverb:start --host=0.0.0.0 --port=8080 @@ -79,6 +93,7 @@ services: volumes: app-code: + frontend-public: dbdata: typesense-data: @@ -86,4 +101,4 @@ networks: default: ipam: config: - - subnet: 192.168.200.0/24 + - subnet: 192.168.200.0/24 \ No newline at end of file diff --git a/docker/backup/Dockerfile b/docker/backup/Dockerfile index 6be7fb2..f1eb474 100644 --- a/docker/backup/Dockerfile +++ b/docker/backup/Dockerfile @@ -5,8 +5,8 @@ RUN apk add --no-cache mariadb-client bash dcron RUN mkdir -p /backups RUN mkdir -p /etc/periodic/15min -COPY backup/backup_db.sh /etc/periodic/15min/backup_db -COPY backup/entrypoint.sh /entrypoint.sh +COPY backup_db.sh /etc/periodic/15min/backup_db +COPY entrypoint.sh /entrypoint.sh RUN chmod +x /etc/periodic/15min/backup_db RUN chmod +x /entrypoint.sh diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile new file mode 100644 index 0000000..94f40ac --- /dev/null +++ b/docker/frontend/Dockerfile @@ -0,0 +1,11 @@ +FROM node:20-alpine + +WORKDIR /app + +RUN apk add --no-cache git bash + +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] +CMD ["build"] diff --git a/docker/frontend/entrypoint.sh b/docker/frontend/entrypoint.sh new file mode 100644 index 0000000..1c33033 --- /dev/null +++ b/docker/frontend/entrypoint.sh @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +FRONTEND_DIR=/app +PUBLIC_DIR=/public +APP_DIR=/var/www/app + +GIT_URL="https://${GIT_TOKEN}@${FRONTEND_GIT_REPO}" + + +while [ ! -f "$APP_DIR/composer.json" ]; do + sleep 2 +done + + +if [ ! -d "$FRONTEND_DIR/.git" ]; then + git clone -b "${FRONTEND_GIT_BRANCH:-main}" "$GIT_URL" "$FRONTEND_DIR" +else + cd "$FRONTEND_DIR" + git pull "$GIT_URL" "${FRONTEND_GIT_BRANCH:-main}" +fi + +cd "$FRONTEND_DIR" + +if [ -f package.json ]; then + npm ci +fi + +npm run build + +rm -rf "$PUBLIC_DIR/*" +cp -r dist/* "$PUBLIC_DIR/" + +exec "$@" diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile index 2ad886d..8e52f19 100644 --- a/docker/php/Dockerfile +++ b/docker/php/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ COPY --from=composer:2 /usr/bin/composer /usr/bin/composer -COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh +COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh WORKDIR /var/www/app diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh index 4547005..31dce9d 100644 --- a/docker/php/entrypoint.sh +++ b/docker/php/entrypoint.sh @@ -2,12 +2,13 @@ set -e APP_DIR=/var/www/app +GIT_URL="https://${GIT_TOKEN}@${BACKEND_GIT_REPO}" if [ ! -d "$APP_DIR/.git" ]; then - git clone -b "${GIT_BRANCH:-main}" "$GIT_REPO" "$APP_DIR" + GIT_URL="https://${GIT_TOKEN}@${BACKEND_GIT_REPO}" else cd "$APP_DIR" - git pull origin "${GIT_BRANCH:-main}" + git pull "$GIT_URL" "${BACKEND_GIT_BRANCH:-main}" fi cd "$APP_DIR" @@ -20,4 +21,10 @@ if [ -d storage ] && [ -d bootstrap/cache ]; then chown -R www-data:www-data storage bootstrap/cache fi +if [ -f .env ]; then + php artisan key:generate --no-interaction +fi + +php artisan migrate --force + exec "$@"