add a frontend container

This commit is contained in:
2026-01-27 15:52:56 +01:00
parent 14e8aa80a9
commit 6d45c131c7
7 changed files with 94 additions and 21 deletions
+8 -2
View File
@@ -1,4 +1,10 @@
GIT_REPO= BACKEND_GIT_REPO=
FRONTEND_GIT_REPO=
BACKEND_GIT_BRANCH=
FRONTEND_GIT_BRANCH=
GIT_TOKEN= GIT_TOKEN=
GIT_BRANCH=
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
TYPESENSE_API_KEY= TYPESENSE_API_KEY=
+29 -14
View File
@@ -1,28 +1,43 @@
version: "3.8"
services: services:
php: php:
build: build:
context: docker context: ./docker/php
dockerfile: docker/php/Dockerfile dockerfile: Dockerfile
container_name: app-php container_name: app-php
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
volumes: volumes:
- app-code:/var/www/app - app-code:/var/www/app
- frontend-public:/var/www/app/public
environment: environment:
- GIT_TOKEN=${GIT_TOKEN} - GIT_TOKEN=${GIT_TOKEN}
- GIT_REPO=${GIT_REPO} - BACKEND_GIT_REPO=${BACKEND_GIT_REPO}
- BACKEND_GIT_BRANCH=${BACKEND_GIT_BRANCH}
depends_on: depends_on:
- mariadb - 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: nginx:
image: nginx image: nginx
container_name: app-nginx container_name: app-nginx
volumes: volumes:
- app-code:/var/www/app - 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: ports:
- "80:80" - "80:80"
depends_on: depends_on:
@@ -31,14 +46,13 @@ services:
mariadb: mariadb:
image: mariadb:latest image: mariadb:latest
environment: environment:
MYSQL_ROOT_PASSWORD: root - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: laravel - MYSQL_DATABASE=${MYSQL_DATABASE}
ports: ports:
- "3306:3306" - "3306:3306"
volumes: volumes:
- dbdata:/var/lib/mysql - dbdata:/var/lib/mysql
typesense: typesense:
image: typesense/typesense:29.0 image: typesense/typesense:29.0
restart: on-failure restart: on-failure
@@ -52,8 +66,8 @@ services:
backup: backup:
build: build:
context: docker context: ./docker/backup
dockerfile: docker/backup/Dockerfile dockerfile: Dockerfile
container_name: app-backup container_name: app-backup
volumes: volumes:
- ./backups:/backups - ./backups:/backups
@@ -63,8 +77,8 @@ services:
reverb: reverb:
build: build:
context: docker context: ./docker/php
dockerfile: docker/php/Dockerfile dockerfile: Dockerfile
container_name: app-reverb container_name: app-reverb
entrypoint: /usr/local/bin/entrypoint.sh entrypoint: /usr/local/bin/entrypoint.sh
command: php artisan reverb:start --host=0.0.0.0 --port=8080 command: php artisan reverb:start --host=0.0.0.0 --port=8080
@@ -79,6 +93,7 @@ services:
volumes: volumes:
app-code: app-code:
frontend-public:
dbdata: dbdata:
typesense-data: typesense-data:
@@ -86,4 +101,4 @@ networks:
default: default:
ipam: ipam:
config: config:
- subnet: 192.168.200.0/24 - subnet: 192.168.200.0/24
+2 -2
View File
@@ -5,8 +5,8 @@ RUN apk add --no-cache mariadb-client bash dcron
RUN mkdir -p /backups RUN mkdir -p /backups
RUN mkdir -p /etc/periodic/15min RUN mkdir -p /etc/periodic/15min
COPY backup/backup_db.sh /etc/periodic/15min/backup_db COPY backup_db.sh /etc/periodic/15min/backup_db
COPY backup/entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /etc/periodic/15min/backup_db RUN chmod +x /etc/periodic/15min/backup_db
RUN chmod +x /entrypoint.sh RUN chmod +x /entrypoint.sh
+11
View File
@@ -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"]
+34
View File
@@ -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 "$@"
+1 -1
View File
@@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer 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 RUN chmod +x /usr/local/bin/entrypoint.sh
WORKDIR /var/www/app WORKDIR /var/www/app
+9 -2
View File
@@ -2,12 +2,13 @@
set -e set -e
APP_DIR=/var/www/app APP_DIR=/var/www/app
GIT_URL="https://${GIT_TOKEN}@${BACKEND_GIT_REPO}"
if [ ! -d "$APP_DIR/.git" ]; then 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 else
cd "$APP_DIR" cd "$APP_DIR"
git pull origin "${GIT_BRANCH:-main}" git pull "$GIT_URL" "${BACKEND_GIT_BRANCH:-main}"
fi fi
cd "$APP_DIR" cd "$APP_DIR"
@@ -20,4 +21,10 @@ if [ -d storage ] && [ -d bootstrap/cache ]; then
chown -R www-data:www-data storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
fi fi
if [ -f .env ]; then
php artisan key:generate --no-interaction
fi
php artisan migrate --force
exec "$@" exec "$@"