From 4b780fd6d240fd89a6b70b449e083b6e7552c0e5 Mon Sep 17 00:00:00 2001 From: hackerESQ Date: Wed, 29 Jan 2025 22:53:32 -0600 Subject: [PATCH] fix: ensure storage path permissions are set in entry script --- README.md | 4 ---- docker-compose.yml | 4 ++-- docker/Dockerfile | 21 ++++++++++----------- docker/entrypoint.sh | 41 ++++++++++++++++++++--------------------- docker/nginx.conf | 2 +- 5 files changed, 33 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 7e47e41..40e65d3 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,6 @@ Adjust the `environment` properties in the compose file to your preferences. **Importantly**, you need to set the `APP_KEY` value. If you're unsure, Investbrain will generate an `APP_KEY` for you on first run, but it will not persist. You must _manually_ update your environment configuration with this generated value! -Alternatively, create a .env file in the same directory as your compose file, then reference the .env file using the `env_file` property. - -> Want to know what other configuration options are available? You can reference the [.env.example](https://github.com/investbrainapp/investbrain/blob/main/.env.example) file in this respository for available environment configurations. - **3. Run `docker compose up`** It might take a few minutes to pull the Docker images. But assuming everything worked as expected, you should now be able to access Investbrain in the browser by visiting: diff --git a/docker-compose.yml b/docker-compose.yml index 0577b33..981456e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: ports: - "${APP_PORT:-8000}:80" environment: - APP_KEY: "" # Generate a key using `openssl rand -base64 32` + APP_KEY: "" # Generate a key using `echo base64:$(openssl rand -base64 32)` APP_URL: "http://localhost:8000" ASSET_URL: "http://localhost:8000" DB_CONNECTION: mysql @@ -24,7 +24,7 @@ services: CACHE_STORE: redis REDIS_HOST: investbrain-redis volumes: - - ./storage:/var/www/app/storage:delegated + - ./storage:/var/app/storage depends_on: - mysql - redis diff --git a/docker/Dockerfile b/docker/Dockerfile index 2316aff..5c175bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -7,15 +7,12 @@ ENV APP_DEBUG=true ENV SELF_HOSTED=true # Set the working directory -COPY . /var/www/app -WORKDIR /var/www/app - -# Allow PHP installs to be built cross-platform -#ENV CFLAGS="-fstack-protector-strong -fpic -fPIC -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" +COPY . /var/app +WORKDIR /var/app # Install required packages RUN apt-get update && apt-get upgrade -y \ - && apt-get upgrade -y \ + && apt-get install -y \ nginx \ libfreetype-dev \ libjpeg62-turbo-dev \ @@ -37,20 +34,22 @@ RUN apt-get update && apt-get upgrade -y \ && docker-php-ext-install -j$(nproc) \ gd pgsql zip pdo_mysql mysqli intl -# Set permissions +# Remove default nginx config +RUN rm /etc/nginx/sites-enabled/default \ + && rm -rf /var/www/html \ + && ln -s /var/app /var/www/app + +# Set permissions and ensure www-data has a shell available RUN chown -R www-data:www-data . \ && chmod -R 775 ./storage \ && chmod +x ./docker/entrypoint.sh \ - && usermod -s /bin/bash www-data + && usermod -s /bin/bash www-data # Install Composer and Node.js Install PHP dependencies and build front end assets RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && composer install --no-scripts --optimize-autoloader \ && npm install && npm run build -# Remove default nginx config -RUN rm /etc/nginx/sites-enabled/default - # Copy over configs COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 4b3e559..dc89b58 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,11 +1,25 @@ #!/bin/bash -cd /var/www/app +cd /var/app echo -e "\n====================== Validating environment... ====================== " +for dir in storage/framework/cache storage/framework/sessions storage/framework/views; do + if [ ! -d "$dir" ]; then + echo -e "\n > $dir is missing. Creating scaffold for storage directory... " + mkdir -p storage/framework/{cache,sessions,views} + chmod -R 775 storage + chown -R www-data:www-data storage + fi +done + +if [ ! -L "public/storage" ]; then + echo -e "\n > Creating symbolic link for app public storage... " + + php artisan storage:link +fi + if [[ -z "$APP_KEY" ]]; then echo -e "\n > Oops! The required APP_KEY configuration is missing in your environment! " - echo -e "\n > Generating a key (see below) but this will NOT be persisted between container restarts. " echo -e "\n > You should set this APP_KEY in your .env file! " draw_box() { @@ -18,30 +32,15 @@ if [[ -z "$APP_KEY" ]]; then echo "$border" } - export APP_KEY=base64:$(openssl rand -base64 32) + export APP_KEY=$(php artisan key:generate --show) draw_box $APP_KEY fi -for dir in storage/framework/cache storage/framework/sessions storage/framework/views; do - if [ ! -d "$dir" ]; then - echo -e "\n > $dir is missing. Creating scaffold for storage directory... " - mkdir -p storage/framework/{cache,sessions,views} - chmod -R 775 storage - chown -R www-data:www-data storage - fi -done - -if [ ! -L "public/storage" ]; then - echo -e "\n > Creating symbolic link for app public storage... " - - /usr/local/bin/php /var/www/app/artisan storage:link -fi - echo -e "\n====================== Running migrations... ====================== " run_migrations() { - /usr/local/bin/php /var/www/app/artisan migrate --force + php artisan migrate --force } -RETRIES=10 +RETRIES=12 # wait 60 seconds for database to be ready DELAY=5 until run_migrations; do RETRIES=$((RETRIES-1)) @@ -54,4 +53,4 @@ until run_migrations; do done echo -e "\n====================== Spinning up Supervisor daemon... ====================== \n" -exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf \ No newline at end of file +exec supervisord -c /etc/supervisor/conf.d/supervisord.conf \ No newline at end of file diff --git a/docker/nginx.conf b/docker/nginx.conf index 93bf2c1..c044f53 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -2,7 +2,7 @@ server { listen 80; server_name _; - root /var/www/app/public; + root /var/app/public; index index.php index.html index.htm; location / {