diff --git a/.env.docker b/.env.docker index 91aac2b04..58f5da060 100644 --- a/.env.docker +++ b/.env.docker @@ -1,3 +1,3 @@ APP_KEY= -DB_DATABASE=database.sqlite +DB_DATABASE=docker/database.sqlite diff --git a/.github/docker/entrypoint.sh b/.github/docker/entrypoint.sh index 20fe6b8c6..d3b891de6 100644 --- a/.github/docker/entrypoint.sh +++ b/.github/docker/entrypoint.sh @@ -2,12 +2,40 @@ #mkdir -p /var/log/supervisord/ /var/log/php8/ \ -## Make sure the app key is set -php artisan key:generate +## check for .env file and generate app keys if missing +if [ -f /pelican-data/.env ]; then + echo "external vars exist." + rm -rf /var/www/html/.env +else + echo "external vars don't exist." + rm -rf /var/www/html/.env + touch /pelican-data/.env + + ## manually generate a key because key generate --force fails + if [ -z $APP_KEY ]; then + echo -e "Generating key." + APP_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) + echo -e "Generated app key: $APP_KEY" + echo -e "APP_KEY=$APP_KEY" > /pelican-data/.env + else + echo -e "APP_KEY exists in environment, using that." + echo -e "APP_KEY=$APP_KEY" > /pelican-data/.env + fi +fi + +ln -s /pelican-data/.env /var/www/html/ + +touch /pelican-data/database.sqlite + +if ! grep -q "APP_KEY=" .env || grep -q "APP_KEY=$" .env; then + echo "Generating APP_KEY..." + php artisan key:generate --force +else + echo "APP_KEY is already set." +fi ## make sure the db is set up echo -e "Migrating and Seeding Database" -touch database/database.sqlite php artisan migrate --force ## start cronjobs for the queue diff --git a/Caddyfile b/Caddyfile index f3b65899f..1c835bf05 100644 --- a/Caddyfile +++ b/Caddyfile @@ -3,8 +3,9 @@ } {$APP_URL} { - root * /srv/public + root * /var/www/html/public encode gzip - php_fastcgi panel:9000 + + php_fastcgi 127.0.0.1:9000 file_server } diff --git a/Dockerfile b/Dockerfile index 31e840f07..57d388812 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,10 +20,11 @@ WORKDIR /var/www/html RUN apk update && apk add --no-cache \ libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev icu-dev \ zip unzip curl \ - ca-certificates supervisor + caddy ca-certificates supervisor \ + && docker-php-ext-install bcmath gd intl zip opcache pcntl posix -# Additional PHP Extensions -RUN docker-php-ext-install bcmath gd intl zip opcache pcntl posix +# Copy the Caddyfile to the container +COPY Caddyfile /etc/caddy/Caddyfile # Copy the application code to the container COPY . . @@ -43,10 +44,13 @@ RUN chmod -R 755 /var/www/html/storage \ HEALTHCHECK --interval=5m --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost/up || exit 1 +EXPOSE 80:2019 +EXPOSE 443 + VOLUME /pelican-data # Start PHP-FPM -CMD ["sh", "-c", "php-fpm"] +CMD ["sh", "-c", "php-fpm & caddy run --config /etc/caddy/Caddyfile --adapter caddyfile"] ENTRYPOINT [ "/bin/ash", ".github/docker/entrypoint.sh" ] # CMD [ "supervisord", "-n", "-c", "/etc/supervisord.conf" ] diff --git a/compose.yml b/compose.yml index 38e48035a..c4737d755 100644 --- a/compose.yml +++ b/compose.yml @@ -30,47 +30,22 @@ x-common: services: panel: image: panel - restart: unless-stopped + restart: always + ports: + - "80:2019" + - "443:443" extra_hosts: - "host.docker.internal:host-gateway" volumes: - pelican-data:/pelican-data - - .:/srv + - pelican-logs:/var/www/html/storage/logs environment: <<: [*panel-environment, *mail-environment] - working_dir: /srv - - caddy: - image: caddy:2-alpine - restart: unless-stopped - volumes: - - ./Caddyfile:/etc/caddy/Caddyfile - - caddy-data:/data - - caddy-config:/config - - .:/srv - ports: - - 80:80 - - 443:443 - env_file: - - ./.env.docker - environment: - <<: [ *panel-environment, *mail-environment ] XDG_DATA_HOME: /pelican-data - logging: - driver: "json-file" - options: - max-size: "1M" - max-file: "10" - command: - - /bin/sh - - -c - - | - caddy run --config /etc/caddy/Caddyfile --adapter caddyfile volumes: pelican-data: - caddy-data: - caddy-config: + pelican-logs: networks: default: