diff --git a/.env-sail b/.env-sail index 489c495a7..8762d0ffa 100644 --- a/.env-sail +++ b/.env-sail @@ -16,3 +16,6 @@ ADMIN_EMAIL=admin@example.com ADMIN_PASSWORD=admin APP_LOCALE=en APP_TIMEZONE=UTC +REDIS_CLIENT=phpredis +REDIS_HOST=redis +REDIS_PORT=6379 diff --git a/composer.json b/composer.json index a936f1070..e248962f9 100644 --- a/composer.json +++ b/composer.json @@ -104,7 +104,8 @@ "fzaninotto/faker": "~1.4", "symfony/css-selector": "3.1.*", "symfony/dom-crawler": "3.1.*", - "anomaly/installer-module": "~2.4.0" + "anomaly/installer-module": "~2.4.0", + "laravel/sail": "^1.14" }, "repositories": [ { diff --git a/config/database.php b/config/database.php index 147e74194..6f4da9de8 100644 --- a/config/database.php +++ b/config/database.php @@ -108,14 +108,21 @@ return [ 'redis' => [ 'cluster' => false, + 'client' => env('REDIS_CLIENT', 'phpredis'), 'default' => [ - 'host' => env('REDIS_HOST', 'localhost'), - 'password' => env('REDIS_PASSWORD', null), - 'port' => env('REDIS_PORT', 6379), - 'database' => 0, + 'host' => env('REDIS_HOST', 'redis'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DB', 0), ], + 'cache' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_CACHE_DB', 1), + ], ], ]; diff --git a/docker-compose.yml b/docker-compose.yml index c527fefa7..b94e54e5a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,11 +3,11 @@ version: '3' services: laravel.test: build: - context: ./vendor/laravel/sail/runtimes/8.1 + context: ./docker/7.4 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' - image: sail-8.1/app + image: sail-7.4/openclassify extra_hosts: - 'host.docker.internal:host-gateway' ports: @@ -22,9 +22,6 @@ services: - '.:/var/www/html' networks: - sail - depends_on: - - mysql - - redis phpmyadmin: image: 'phpmyadmin:latest' ports: diff --git a/docker/7.4/Dockerfile b/docker/7.4/Dockerfile new file mode 100644 index 000000000..f70e75270 --- /dev/null +++ b/docker/7.4/Dockerfile @@ -0,0 +1,68 @@ +FROM ubuntu:21.10 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu impish main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php7.4-cli php7.4-dev \ + php7.4-pgsql php7.4-sqlite3 php7.4-gd \ + php7.4-curl php7.4-memcached \ + php7.4-imap php7.4-mysql php7.4-mbstring \ + php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \ + php7.4-intl php7.4-readline php7.4-pcov \ + php7.4-msgpack php7.4-igbinary php7.4-ldap \ + php7.4-redis php7.4-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt impish-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get update \ + && apt-get install -y cron \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +COPY scheduler /etc/cron.d/scheduler +RUN chmod 0644 /etc/cron.d/scheduler +RUN crontab /etc/cron.d/scheduler + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/7.4/php.ini b/docker/7.4/php.ini new file mode 100644 index 000000000..66d04d5be --- /dev/null +++ b/docker/7.4/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/7.4/scheduler b/docker/7.4/scheduler new file mode 100644 index 000000000..69e95f100 --- /dev/null +++ b/docker/7.4/scheduler @@ -0,0 +1 @@ +* * * * * root cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1 diff --git a/docker/7.4/start-container b/docker/7.4/start-container new file mode 100644 index 000000000..b86439907 --- /dev/null +++ b/docker/7.4/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/7.4/supervisord.conf b/docker/7.4/supervisord.conf new file mode 100644 index 000000000..a3b42f623 --- /dev/null +++ b/docker/7.4/supervisord.conf @@ -0,0 +1,17 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 + +[include] +files=/var/www/html/supervisord/*.conf \ No newline at end of file diff --git a/supervisord/cron.conf b/supervisord/cron.conf new file mode 100644 index 000000000..1d1bbba5d --- /dev/null +++ b/supervisord/cron.conf @@ -0,0 +1,5 @@ +[program:cron] +command=/usr/sbin/cron -f -l 8 +autostart=true +stdout_logfile=/var/log/cron.out.log +stderr_logfile=/var/log/cron.err.log