Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: ensure storage path permissions are set in entry script #59

Merged
merged 1 commit into from
Jan 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
21 changes: 10 additions & 11 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Expand Down
41 changes: 20 additions & 21 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -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() {
Expand All @@ -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))
Expand All @@ -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
exec supervisord -c /etc/supervisor/conf.d/supervisord.conf
2 changes: 1 addition & 1 deletion docker/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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 / {
Expand Down