From e3eacf1e23996ab43b9c9390ee91e1a8da83396e Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Wed, 28 Aug 2024 17:20:17 +0200 Subject: [PATCH] Fix Docker api issues --- docker-compose.yml | 22 ++++++------ docker/php-fpm-entrypoint | 76 ++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index f796c835..9e694a9c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,33 +2,30 @@ services: api: &api image: jhumanj/opnform-api:latest - environment: + environment: &api-environment # Add this anchor DB_HOST: db REDIS_HOST: redis - DB_DATABASE: ${DB_DATABASE:-forge} DB_USERNAME: ${DB_USERNAME:-forge} DB_PASSWORD: ${DB_PASSWORD:-forge} DB_CONNECTION: ${DB_CONNECTION:-pgsql} - AWS_ENDPOINT: http://minio:9000 - AWS_ACCESS_KEY_ID: ${MINIO_ACCESS_KEY:-minio} - AWS_SECRET_ACCESS_KEY: ${MINIO_SECRET_KEY:-minio123} FILESYSTEM_DISK: local - AWS_REGION: eu-west-1 - AWS_BUCKET: laravel-bucket LOCAL_FILESYSTEM_VISIBILITY: public env_file: - ./api/.env volumes: - - ./api/storage:/usr/share/nginx/html/storage + - opnform_storage:/usr/share/nginx/html/storage:rw api-worker: - <<: *api - command: ./artisan queue:work + image: jhumanj/opnform-api:latest + command: php artisan queue:work + environment: + <<: *api-environment + IS_API_WORKER: "true" env_file: - ./api/.env volumes: - - ./api/storage:/usr/share/nginx/html/storage + - opnform_storage:/usr/share/nginx/html/storage:rw ui: image: jhumanj/opnform-client:latest @@ -55,4 +52,5 @@ services: - 80:80 volumes: - postgres-data: \ No newline at end of file + postgres-data: + opnform_storage: \ No newline at end of file diff --git a/docker/php-fpm-entrypoint b/docker/php-fpm-entrypoint index cd75c59f..19dc2ed4 100644 --- a/docker/php-fpm-entrypoint +++ b/docker/php-fpm-entrypoint @@ -1,30 +1,43 @@ #!/bin/bash main() { - prep_file_permissions - prep_storage - wait_for_db - apply_db_migrations - run_init_project - run_server "$@" -} - -is_master() { - echo "$@" | grep -q php-fpm + if [ "$IS_API_WORKER" = "true" ]; then + # This is the API worker, skip setup and just run the command + exec "$@" + else + # This is the API service, run full setup + prep_file_permissions + prep_storage + wait_for_db + apply_db_migrations + run_init_project + run_server "$@" + fi } prep_file_permissions() { chmod a+x ./artisan } -apply_db_migrations() { - echo "Running DB Migrations" - ./artisan migrate -} +prep_storage() { + # Create Laravel-specific directories + mkdir -p /persist/storage/framework/cache/data + mkdir -p /persist/storage/framework/sessions + mkdir -p /persist/storage/framework/views -run_init_project() { - echo "Running app:init-project command" - ./artisan app:init-project + # Set permissions for the entire storage directory + chown -R www-data:www-data /persist/storage + chmod -R 775 /persist/storage + + # Create symlink to the correct storage location + ln -sf /persist/storage /usr/share/nginx/html/storage + + touch /var/log/opnform.log + chown www-data /var/log/opnform.log + + # Ensure proper permissions for the storage directory + chown -R www-data:www-data /usr/share/nginx/html/storage + chmod -R 775 /usr/share/nginx/html/storage } wait_for_db() { @@ -34,28 +47,19 @@ wait_for_db() { done } -run_server() { - echo "Starting server $@" - /usr/local/bin/docker-php-entrypoint "$@" +apply_db_migrations() { + echo "Running DB Migrations" + ./artisan migrate } -prep_storage() { - mkdir -p /etc/initial-storage - if [ ! -d /etc/initial-storage/app ]; then - echo "Backing up initial storage directory" - cp -a ./storage/* /etc/initial-storage/ - fi - - mkdir -p /persist/storage - if [ ! -d /persist/storage/app ]; then - echo "Initialising blank storage dir" - cp -a /etc/initial-storage/* /persist/storage/ - fi - - chmod -R 777 /persist/storage +run_init_project() { + echo "Running app:init-project command" + ./artisan app:init-project +} - touch /var/log/opnform.log - chown www-data /var/log/opnform.log +run_server() { + echo "Starting server $@" + exec /usr/local/bin/docker-php-entrypoint "$@" } main "$@" \ No newline at end of file