diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..4110ddf9c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git +node_modules +vendor +storage/debugbar/*.json +storage/logs/*.log +storage/framework/cache/data/* +storage/framework/sessions/* +storage/framework/testing +storage/framework/views/*.php diff --git a/.env.docker b/.env.docker new file mode 100644 index 000000000..485b23d45 --- /dev/null +++ b/.env.docker @@ -0,0 +1,6 @@ +APP_ENV=production +APP_DEBUG=true +APP_KEY= +APP_URL=http://panel.test + +SESSION_DRIVER=file diff --git a/.github/docker/entrypoint.sh b/.github/docker/entrypoint.sh index 7f4de80cd..27e146303 100644 --- a/.github/docker/entrypoint.sh +++ b/.github/docker/entrypoint.sh @@ -1,77 +1,22 @@ #!/bin/ash -e -cd /app -mkdir -p /var/log/panel/logs/ /var/log/supervisord/ /var/log/nginx/ /var/log/php8/ \ - && chmod 777 /var/log/panel/logs/ \ - && ln -s /app/storage/logs/ /var/log/panel/ +#mkdir -p /var/log/supervisord/ /var/log/php8/ \ -## check for .env file and generate app keys if missing -if [ -f /app/var/.env ]; then - echo "external vars exist." - rm -rf /app/.env - ln -s /app/var/.env /app/ +cd /var/www/html + +#chmod -R 775 storage/* bootstrap/cache/ +#chown -R caddy:caddy . + +if ! grep -q "APP_KEY=" .env || grep -q "APP_KEY=$" .env; then + echo "Generating APP_KEY..." + php artisan key:generate --force else - echo "external vars don't exist." - rm -rf /app/.env - touch /app/var/.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" > /app/var/.env - else - echo -e "APP_KEY exists in environment, using that." - echo -e "APP_KEY=$APP_KEY" > /app/var/.env - fi - - ln -s /app/var/.env /app/ + echo "APP_KEY is already set." fi -echo "Checking if https is required." -if [ -f /etc/nginx/http.d/panel.conf ]; then - echo "Using nginx config already in place." - if [ $LE_EMAIL ]; then - echo "Checking for cert update" - certbot certonly -d $(echo $APP_URL | sed 's~http[s]*://~~g') --standalone -m $LE_EMAIL --agree-tos -n - else - echo "No letsencrypt email is set" - fi -else - echo "Checking if letsencrypt email is set." - if [ -z $LE_EMAIL ]; then - echo "No letsencrypt email is set using http config." - cp .github/docker/default.conf /etc/nginx/http.d/panel.conf - else - echo "writing ssl config" - cp .github/docker/default_ssl.conf /etc/nginx/http.d/panel.conf - echo "updating ssl config for domain" - sed -i "s||$(echo $APP_URL | sed 's~http[s]*://~~g')|g" /etc/nginx/http.d/panel.conf - echo "generating certs" - certbot certonly -d $(echo $APP_URL | sed 's~http[s]*://~~g') --standalone -m $LE_EMAIL --agree-tos -n - fi - echo "Removing the default nginx config" - rm -rf /etc/nginx/http.d/default.conf -fi - -if [[ -z $DB_PORT ]]; then - echo -e "DB_PORT not specified, defaulting to 3306" - DB_PORT=3306 -fi - -## check for DB up before starting the panel -echo "Checking database status." -until nc -z -v -w30 $DB_HOST $DB_PORT -do - echo "Waiting for database connection..." - # wait for 1 seconds before check again - sleep 1 -done - ## make sure the db is set up -echo -e "Migrating and Seeding D.B" -php artisan migrate --seed --force +echo -e "Migrating and Seeding Database" +php artisan migrate --force ## start cronjobs for the queue echo -e "Starting cron jobs." diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 000000000..fb8d83eae --- /dev/null +++ b/Caddyfile @@ -0,0 +1,7 @@ +:80 { + root * /var/www/html/public + encode gzip + + php_fastcgi 127.0.0.1:9000 + file_server +} diff --git a/better.Dockerfile b/better.Dockerfile new file mode 100644 index 000000000..53a45d306 --- /dev/null +++ b/better.Dockerfile @@ -0,0 +1,64 @@ +# Pelican Production Dockerfile + +FROM node:20-alpine AS yarn +WORKDIR /app + +#FROM --platform=$TARGETOS/$TARGETARCH node:20-alpine AS yarn + +COPY . ./ + +RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn install --frozen-lockfile && yarn run build:production + +FROM php:8.3-fpm-alpine +# FROM --platform=$TARGETOS/$TARGETARCH php:8.3-fpm-alpine + +COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer + +# Set working directory +WORKDIR /var/www/html + +# Install dependencies +RUN apk update && apk add --no-cache \ + libpng-dev \ + libjpeg-turbo-dev \ + freetype-dev \ + libzip-dev \ + icu-dev \ + zip \ + unzip \ + caddy \ + #&& docker-php-ext-configure zip \ + #&& docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install bcmath gd intl zip opcache pcntl posix + +# ca-certificates dcron curl git supervisor tar libxml2-dev + +# Copy the Caddyfile to the container +COPY Caddyfile /etc/caddy/Caddyfile + +# Copy the application code to the container +COPY . . + +COPY --from=yarn /app/public/assets ./public/assets + +RUN cp .env.docker .env + +RUN composer install --no-dev --optimize-autoloader + +# Set file permissions +RUN chown -R www-data:www-data /var/www/html \ + && chmod -R 755 /var/www/html/storage \ + && chmod -R 755 /var/www/html/bootstrap/cache + +#RUN rm /usr/local/etc/php-fpm.conf \ +# && echo "* * * * * /usr/local/bin/php /app/artisan schedule:run >> /dev/null 2>&1" >> /var/spool/cron/crontabs/root \ +# && mkdir -p /var/run/php + +EXPOSE 80 +EXPOSE 443 + +# Start 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/composer.json b/composer.json index 7e8ac8a0c..8907db6e7 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,6 @@ "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*", - "ext-pdo_mysql": "*", "ext-zip": "*", "abdelhamiderrahmouni/filament-monaco-editor": "0.2.1", "aws/aws-sdk-php": "~3.288.1", diff --git a/composer.lock b/composer.lock index c8e3fa55a..79bdc5db9 100644 --- a/composer.lock +++ b/composer.lock @@ -13554,7 +13554,6 @@ "ext-json": "*", "ext-mbstring": "*", "ext-pdo": "*", - "ext-pdo_mysql": "*", "ext-zip": "*" }, "platform-dev": [],