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:
2026-02-08 00:15:35 +07:00
parent d6022b9bca
commit 6d721dba79
4 changed files with 39 additions and 11 deletions

View File

@@ -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 (статус таски) Жестко не стал базу ограничивать, сделал просто каст через php enum (статус таски)

View File

@@ -1,5 +1,6 @@
services: services:
app: app:
image: laravel_frankenphp
build: build:
context: . context: .
dockerfile: docker/Dockerfile dockerfile: docker/Dockerfile
@@ -69,28 +70,45 @@ services:
networks: networks:
- laravel_network - laravel_network
queue: queue:
build: image: laravel_frankenphp
context: .
dockerfile: docker/Dockerfile
container_name: laravel_queue container_name: laravel_queue
working_dir: /var/www 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: volumes:
- ./laravel:/var/www - ./laravel:/var/www
depends_on: depends_on:
- postgres postgres:
condition: service_healthy
networks: networks:
- laravel_network - laravel_network
schedule: schedule:
build: image: laravel_frankenphp
context: .
dockerfile: docker/Dockerfile
container_name: laravel_schedule container_name: laravel_schedule
restart: unless-stopped
working_dir: /var/www working_dir: /var/www
user: "${UID:-1000}:${GID:-1000}" user: "${UID:-1000}:${GID:-1000}"
command: php artisan schedule:work
volumes: volumes:
- ./laravel:/var/www - ./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: depends_on:
- app - app
networks: networks:

View File

@@ -14,6 +14,13 @@ RUN apk add --no-cache \
curl \ curl \
bash 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 COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
RUN addgroup -g ${GROUP_ID} ${USER_NAME} && \ RUN addgroup -g ${GROUP_ID} ${USER_NAME} && \

1
docker/cron/laravel Normal file
View File

@@ -0,0 +1 @@
* * * * * appuser cd /var/www && /usr/local/bin/php artisan schedule:run >> /var/www/storage/logs/cron.log 2>&1