functional docker project
This commit is contained in:
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
.idea
|
.idea
|
||||||
.env
|
.env
|
||||||
|
backups/
|
||||||
+38
-22
@@ -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:
|
||||||
|
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -7,9 +7,13 @@ BACKUP_DIR="/backups"
|
|||||||
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
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
|
||||||
|
|
||||||
echo "[$(date)] Backup $DB_NAME sauvegardé dans $FILE" >> "$BACKUP_DIR/backup.log"
|
if [ $? -eq 0 ]; then
|
||||||
|
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
|
||||||
@@ -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
|
||||||
@@ -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"]
|
||||||
@@ -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
|
||||||
|
|
||||||
exec "$@"
|
chown -R www-data:www-data storage bootstrap/cache public
|
||||||
|
chmod -R 775 storage bootstrap/cache
|
||||||
|
chmod -R 755 public
|
||||||
|
|
||||||
|
exec "$@"
|
||||||
Reference in New Issue
Block a user