feat: add cron scheduling and update services
- Added go-crond library to Dockerfile for task scheduling - Created schedule service in compose.yaml with go-crond - Added cron configuration file: docker/cron/laravel - Updated README.md - Improved service configurations with health checks - Switched to base frankenphp image
This commit is contained in:
@@ -37,9 +37,11 @@ Route::middleware(['auth:sanctum'])->group(function () {
|
||||
|
||||
### Комментарий:
|
||||
|
||||
Не стал ставить редис и настраивать крон корректно, тк тестовое задание
|
||||
Маршруты явно прописал, для наглядности
|
||||
|
||||
Запустил отдельными сервисами, проверил
|
||||
Настроил крон, воспользовался библеотекой https://github.com/webdevops/go-crond, показалось удобной
|
||||
|
||||
Не стал ставить редис для очередей, тк тестовое задание, в продакшене использовал https://laravel.com/docs/12.x/horizon
|
||||
|
||||
Жестко не стал базу ограничивать, сделал просто каст через php enum (статус таски)
|
||||
|
||||
|
||||
36
compose.yaml
36
compose.yaml
@@ -1,5 +1,6 @@
|
||||
services:
|
||||
app:
|
||||
image: laravel_frankenphp
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile
|
||||
@@ -69,28 +70,45 @@ services:
|
||||
networks:
|
||||
- laravel_network
|
||||
queue:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile
|
||||
image: laravel_frankenphp
|
||||
container_name: laravel_queue
|
||||
working_dir: /var/www
|
||||
command: php artisan queue:work --verbose --tries=3
|
||||
restart: unless-stopped
|
||||
command: php artisan queue:work --verbose --tries=3 --sleep=3
|
||||
healthcheck:
|
||||
test: [ "CMD", "php", "artisan", "queue:monitor", "default" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
volumes:
|
||||
- ./laravel:/var/www
|
||||
depends_on:
|
||||
- postgres
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- laravel_network
|
||||
schedule:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile
|
||||
image: laravel_frankenphp
|
||||
container_name: laravel_schedule
|
||||
restart: unless-stopped
|
||||
working_dir: /var/www
|
||||
user: "${UID:-1000}:${GID:-1000}"
|
||||
command: php artisan schedule:work
|
||||
volumes:
|
||||
- ./laravel:/var/www
|
||||
- ./docker/cron:/etc/cron.d:ro
|
||||
command:
|
||||
- "go-crond"
|
||||
- "--default-user=${UID:-1000}"
|
||||
- "--allow-unprivileged"
|
||||
- "--include=/etc/cron.d"
|
||||
- "--verbose"
|
||||
healthcheck:
|
||||
test: [ "CMD", "pgrep", "-f", "go-crond" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
depends_on:
|
||||
- app
|
||||
networks:
|
||||
|
||||
@@ -14,6 +14,13 @@ RUN apk add --no-cache \
|
||||
curl \
|
||||
bash
|
||||
|
||||
RUN GOCROND_VERSION=22.9.1 \
|
||||
GOCRON_OS=linux \
|
||||
GOCRON_ARCH=amd64 \
|
||||
&& wget -O /usr/local/bin/go-crond \
|
||||
https://github.com/webdevops/go-crond/releases/download/${GOCROND_VERSION}/go-crond.${GOCRON_OS}.${GOCRON_ARCH} \
|
||||
&& chmod +x /usr/local/bin/go-crond
|
||||
|
||||
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
||||
|
||||
RUN addgroup -g ${GROUP_ID} ${USER_NAME} && \
|
||||
|
||||
1
docker/cron/laravel
Normal file
1
docker/cron/laravel
Normal file
@@ -0,0 +1 @@
|
||||
* * * * * appuser cd /var/www && /usr/local/bin/php artisan schedule:run >> /var/www/storage/logs/cron.log 2>&1
|
||||
Reference in New Issue
Block a user