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