functional docker project

This commit is contained in:
2026-01-28 15:16:07 +01:00
parent 6d45c131c7
commit 7d2af43af4
7 changed files with 86 additions and 49 deletions
+1
View File
@@ -1,2 +1,3 @@
.idea .idea
.env .env
backups/
+38 -22
View File
@@ -1,4 +1,16 @@
services: services:
mariadb:
image: mariadb:latest
container_name: app-mariadb
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
restart: unless-stopped
php: php:
build: build:
context: ./docker/php context: ./docker/php
@@ -8,13 +20,19 @@ services:
- "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}
- BACKEND_GIT_REPO=${BACKEND_GIT_REPO} - BACKEND_GIT_REPO=${BACKEND_GIT_REPO}
- BACKEND_GIT_BRANCH=${BACKEND_GIT_BRANCH} - BACKEND_GIT_BRANCH=${BACKEND_GIT_BRANCH}
depends_on: depends_on:
- mariadb - mariadb
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", "test -d /var/www/app/vendor && pidof php-fpm || exit 1" ]
interval: 5s
timeout: 3s
retries: 20
start_period: 120s
frontend: frontend:
build: build:
@@ -26,14 +44,13 @@ services:
- FRONTEND_GIT_REPO=${FRONTEND_GIT_REPO} - FRONTEND_GIT_REPO=${FRONTEND_GIT_REPO}
- FRONTEND_GIT_BRANCH=${FRONTEND_GIT_BRANCH} - FRONTEND_GIT_BRANCH=${FRONTEND_GIT_BRANCH}
volumes: volumes:
- frontend-public:/public - app-code:/var/www/app
depends_on: depends_on:
- php - php
command: [ "build" ] restart: "no"
nginx: nginx:
image: nginx image: nginx:alpine
container_name: app-nginx container_name: app-nginx
volumes: volumes:
- app-code:/var/www/app - app-code:/var/www/app
@@ -41,21 +58,16 @@ services:
ports: ports:
- "80:80" - "80:80"
depends_on: depends_on:
- php php:
condition: service_healthy
mariadb: frontend:
image: mariadb:latest condition: service_completed_successfully
environment: restart: unless-stopped
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
typesense: typesense:
image: typesense/typesense:29.0 image: typesense/typesense:29.0
restart: on-failure container_name: app-typesense
restart: unless-stopped
ports: ports:
- "8108:8108" - "8108:8108"
volumes: volumes:
@@ -69,10 +81,11 @@ services:
context: ./docker/backup context: ./docker/backup
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: app-backup container_name: app-backup
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
volumes: volumes:
- ./backups:/backups - ./backups:/backups
depends_on:
- mariadb
restart: unless-stopped restart: unless-stopped
reverb: reverb:
@@ -80,7 +93,11 @@ services:
context: ./docker/php context: ./docker/php
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: app-reverb container_name: app-reverb
entrypoint: /usr/local/bin/entrypoint.sh environment:
- GIT_TOKEN=${GIT_TOKEN}
- BACKEND_GIT_REPO=${BACKEND_GIT_REPO}
- BACKEND_GIT_BRANCH=${BACKEND_GIT_BRANCH}
entrypoint: []
command: php artisan reverb:start --host=0.0.0.0 --port=8080 command: php artisan reverb:start --host=0.0.0.0 --port=8080
volumes: volumes:
- app-code:/var/www/app - app-code:/var/www/app
@@ -89,11 +106,10 @@ services:
depends_on: depends_on:
- php - php
- mariadb - mariadb
restart: unless-stopped
volumes: volumes:
app-code: app-code:
frontend-public:
dbdata: dbdata:
typesense-data: typesense-data:
+2 -2
View File
@@ -5,10 +5,10 @@ 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_db.sh /etc/periodic/15min/backup_db COPY backup_db.sh /etc/periodic/daily/backup_db
COPY entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /etc/periodic/15min/backup_db RUN chmod +x /etc/periodic/daily/backup_db
RUN chmod +x /entrypoint.sh RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
+5 -1
View File
@@ -10,6 +10,10 @@ mkdir -p "$BACKUP_DIR"
DAY=$(date +%d) DAY=$(date +%d)
FILE="$BACKUP_DIR/$DAY.sql" FILE="$BACKUP_DIR/$DAY.sql"
mysqldump -h mariadb -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$FILE" mysqldump -h mariadb -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$FILE" 2>/dev/null
if [ $? -eq 0 ]; then
echo "[$(date)] Backup $DB_NAME sauvegardé dans $FILE" >> "$BACKUP_DIR/backup.log" echo "[$(date)] Backup $DB_NAME sauvegardé dans $FILE" >> "$BACKUP_DIR/backup.log"
else
echo "[$(date)] ERREUR lors du backup de $DB_NAME" >> "$BACKUP_DIR/backup.log"
fi
+19 -10
View File
@@ -2,14 +2,18 @@
set -e set -e
FRONTEND_DIR=/app FRONTEND_DIR=/app
PUBLIC_DIR=/public
APP_DIR=/var/www/app APP_DIR=/var/www/app
PUBLIC_DIR="$APP_DIR/public"
GIT_URL="https://oauth2:${GIT_TOKEN}@${FRONTEND_GIT_REPO}"
GIT_URL="https://${GIT_TOKEN}@${FRONTEND_GIT_REPO}" MAX_WAIT=300
WAITED=0
while [ ! -f "$APP_DIR/composer.json" ] || [ ! -d "$APP_DIR/vendor" ] || [ ! -d "$APP_DIR/public" ]; do
while [ ! -f "$APP_DIR/composer.json" ]; do if [ $WAITED -ge $MAX_WAIT ]; then
sleep 2 exit 1
fi
sleep 3
WAITED=$((WAITED + 3))
done done
@@ -17,18 +21,23 @@ if [ ! -d "$FRONTEND_DIR/.git" ]; then
git clone -b "${FRONTEND_GIT_BRANCH:-main}" "$GIT_URL" "$FRONTEND_DIR" git clone -b "${FRONTEND_GIT_BRANCH:-main}" "$GIT_URL" "$FRONTEND_DIR"
else else
cd "$FRONTEND_DIR" cd "$FRONTEND_DIR"
git pull "$GIT_URL" "${FRONTEND_GIT_BRANCH:-main}" git fetch origin
git reset --hard origin/"${FRONTEND_GIT_BRANCH:-main}"
fi fi
cd "$FRONTEND_DIR" cd "$FRONTEND_DIR"
if [ -f package.json ]; then if [ -f package.json ]; then
npm ci npm ci --prefer-offline --no-audit
fi fi
npm run build npm run build
rm -rf "$PUBLIC_DIR/*" if [ ! -d "dist" ]; then
exit 1
fi
find "$PUBLIC_DIR" -mindepth 1 ! -name '.gitkeep' ! -name 'index.php' ! -name '.htaccess' -delete
cp -r dist/* "$PUBLIC_DIR/" cp -r dist/* "$PUBLIC_DIR/"
exec "$@" exit 0
+1 -1
View File
@@ -11,5 +11,5 @@ RUN chmod +x /usr/local/bin/entrypoint.sh
WORKDIR /var/www/app WORKDIR /var/www/app
ENTRYPOINT ["entrypoint.sh"] ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"] CMD ["php-fpm"]
+15 -8
View File
@@ -2,29 +2,36 @@
set -e set -e
APP_DIR=/var/www/app APP_DIR=/var/www/app
GIT_URL="https://${GIT_TOKEN}@${BACKEND_GIT_REPO}" GIT_URL="https://oauth2:${GIT_TOKEN}@${BACKEND_GIT_REPO}"
if [ ! -d "$APP_DIR/.git" ]; then if [ ! -d "$APP_DIR/.git" ]; then
GIT_URL="https://${GIT_TOKEN}@${BACKEND_GIT_REPO}" git clone -b "${BACKEND_GIT_BRANCH:-main}" "$GIT_URL" "$APP_DIR"
else else
cd "$APP_DIR" cd "$APP_DIR"
git pull "$GIT_URL" "${BACKEND_GIT_BRANCH:-main}" git fetch origin
git reset --hard origin/"${BACKEND_GIT_BRANCH:-main}"
fi fi
cd "$APP_DIR" cd "$APP_DIR"
if [ -f composer.json ]; then if [ -f composer.json ]; then
composer install --no-interaction --prefer-dist --optimize-autoloader composer update --no-interaction --prefer-dist --optimize-autoloader
fi fi
if [ -d storage ] && [ -d bootstrap/cache ]; then if [ ! -f .env ] && [ -f .env.example ]; then
chown -R www-data:www-data storage bootstrap/cache cp .env.example .env
fi fi
if [ -f .env ]; then if [ -f artisan ]; then
php artisan key:generate --no-interaction if ! grep -q "APP_KEY=base64:" .env 2>/dev/null; then
php artisan key:generate --ansi --force
fi
fi fi
php artisan migrate --force php artisan migrate --force
chown -R www-data:www-data storage bootstrap/cache public
chmod -R 775 storage bootstrap/cache
chmod -R 755 public
exec "$@" exec "$@"