fix: ensure storage path permissions are set in entry script

This commit is contained in:
hackerESQ
2025-01-29 22:53:32 -06:00
parent 1faa22897b
commit 4b780fd6d2
5 changed files with 36 additions and 42 deletions
-4
View File
@@ -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! **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`** **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: 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:
+2 -2
View File
@@ -10,7 +10,7 @@ services:
ports: ports:
- "${APP_PORT:-8000}:80" - "${APP_PORT:-8000}:80"
environment: 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" APP_URL: "http://localhost:8000"
ASSET_URL: "http://localhost:8000" ASSET_URL: "http://localhost:8000"
DB_CONNECTION: mysql DB_CONNECTION: mysql
@@ -24,7 +24,7 @@ services:
CACHE_STORE: redis CACHE_STORE: redis
REDIS_HOST: investbrain-redis REDIS_HOST: investbrain-redis
volumes: volumes:
- ./storage:/var/www/app/storage:delegated - ./storage:/var/app/storage
depends_on: depends_on:
- mysql - mysql
- redis - redis
+10 -11
View File
@@ -7,15 +7,12 @@ ENV APP_DEBUG=true
ENV SELF_HOSTED=true ENV SELF_HOSTED=true
# Set the working directory # Set the working directory
COPY . /var/www/app COPY . /var/app
WORKDIR /var/www/app WORKDIR /var/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"
# Install required packages # Install required packages
RUN apt-get update && apt-get upgrade -y \ RUN apt-get update && apt-get upgrade -y \
&& apt-get upgrade -y \ && apt-get install -y \
nginx \ nginx \
libfreetype-dev \ libfreetype-dev \
libjpeg62-turbo-dev \ libjpeg62-turbo-dev \
@@ -37,20 +34,22 @@ RUN apt-get update && apt-get upgrade -y \
&& docker-php-ext-install -j$(nproc) \ && docker-php-ext-install -j$(nproc) \
gd pgsql zip pdo_mysql mysqli intl 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 . \ RUN chown -R www-data:www-data . \
&& chmod -R 775 ./storage \ && chmod -R 775 ./storage \
&& chmod +x ./docker/entrypoint.sh \ && 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 # 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 \ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --no-scripts --optimize-autoloader \ && composer install --no-scripts --optimize-autoloader \
&& npm install && npm run build && npm install && npm run build
# Remove default nginx config
RUN rm /etc/nginx/sites-enabled/default
# Copy over configs # Copy over configs
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
+23 -24
View File
@@ -1,27 +1,8 @@
#!/bin/bash #!/bin/bash
cd /var/www/app cd /var/app
echo -e "\n====================== Validating environment... ====================== " echo -e "\n====================== Validating environment... ====================== "
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() {
local text="$1"
local length=${#text}
local border=$(printf '%*s' "$((length + 4))" | tr ' ' '*')
echo -e "\n\n$border"
echo "* $text *"
echo "$border"
}
export APP_KEY=base64:$(openssl rand -base64 32)
draw_box $APP_KEY
fi
for dir in storage/framework/cache storage/framework/sessions storage/framework/views; do for dir in storage/framework/cache storage/framework/sessions storage/framework/views; do
if [ ! -d "$dir" ]; then if [ ! -d "$dir" ]; then
echo -e "\n > $dir is missing. Creating scaffold for storage directory... " echo -e "\n > $dir is missing. Creating scaffold for storage directory... "
@@ -34,14 +15,32 @@ done
if [ ! -L "public/storage" ]; then if [ ! -L "public/storage" ]; then
echo -e "\n > Creating symbolic link for app public storage... " echo -e "\n > Creating symbolic link for app public storage... "
/usr/local/bin/php /var/www/app/artisan storage:link 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 > You should set this APP_KEY in your .env file! "
draw_box() {
local text="$1"
local length=${#text}
local border=$(printf '%*s' "$((length + 4))" | tr ' ' '*')
echo -e "\n\n$border"
echo "* $text *"
echo "$border"
}
export APP_KEY=$(php artisan key:generate --show)
draw_box $APP_KEY
fi fi
echo -e "\n====================== Running migrations... ====================== " echo -e "\n====================== Running migrations... ====================== "
run_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 DELAY=5
until run_migrations; do until run_migrations; do
RETRIES=$((RETRIES-1)) RETRIES=$((RETRIES-1))
@@ -54,4 +53,4 @@ until run_migrations; do
done done
echo -e "\n====================== Spinning up Supervisor daemon... ====================== \n" echo -e "\n====================== Spinning up Supervisor daemon... ====================== \n"
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf exec supervisord -c /etc/supervisor/conf.d/supervisord.conf
+1 -1
View File
@@ -2,7 +2,7 @@ server {
listen 80; listen 80;
server_name _; server_name _;
root /var/www/app/public; root /var/app/public;
index index.php index.html index.htm; index index.php index.html index.htm;
location / { location / {