سلام دوستان ✌??
چند مدت پیش برای داکرایز پروژه لاراولی ایمیج ساختم و خیلی کمکم کرد و دوستان هم استفاده از این ایمیج براشون راحت بوده و راضی بودن. دوست داشتم با شما هم به اشتراک بزارم. ✍️
پکیج های نصب شده و کانفیگ های این ایمیج:
OS: amd64/ubuntu:20.04 TimeZone: Asia/Tehran Php: 8.0 Composer: latest Node: 16 Npm: latest Pm2: latest Postgres-Client: 14 OS Packages: nano wget curl net-tools iputils-ping supervisor sqlite3 zip unzip git htop jpegoptim optipng pngquant gifsicle Php Extensions: swoole pgsql sqlite3 gd curl memcached imap mbstring xml zip bcmath soap readline intl pcov msgpack ldap igbinary redis pear Php Customize ini: post_max_size=100M upload_max_filesize=100M variables_order=EGPCS Aliases: art = php artisan
شما برای استفاده از این ایمیج نیاز به ایجاد ۵ فایل در پروژه خود دارید.
این فایل همان env ای خواهد بود که در cotainer شما ایجاد میشود. میتوانید برای ادرس دادن به ای پی بیرون از کانتینر (سروری ک دارید روش کار میکنید) از host.docker.internal استفاده کنید.
APP_NAME=Laravel APP_ENV=production APP_KEY= APP_DEBUG=false APP_URL=http://lcalhost LOG_CHANNEL=daily LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=pgsql DB_HOST=host.docker.internal DB_PORT=5432 DB_DATABASE=laravel DB_USERNAME=postgres DB_PASSWORD=postgres BROADCAST_DRIVER=log CACHE_DRIVER=redis FILESYSTEM_DISK=local QUEUE_CONNECTION=database SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=host.docker.internal REDIS_PASSWORD= REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_USERNAME= MAIL_PASSWORD= MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS= MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_HOST= PUSHER_PORT=443 PUSHER_SCHEME=https PUSHER_APP_CLUSTER=mt1 VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
version: '3' services: app: container_name: 'laravel' restart: always build: context: . dockerfile: Dockerfile tty: true extra_hosts: - 'host.docker.internal:host-gateway' ports: - '0.0.0.0:80:8000'
FROM jalallinux/laravel-9:php-80 COPY . /app WORKDIR /app COPY start-container /usr/local/bin/start-container COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN chmod +x /usr/local/bin/start-container COPY .env.docker .env RUN composer install EXPOSE 8000 ENTRYPOINT ["start-container"]
#!/usr/bin/env bash if [ ! -z "$WWWUSER" ]; then usermod -u $WWWUSER root 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
این فایل supervisor است برای ران کردن و نگه داشتن پروسس ها. که در این مثال دستور serv پروژه و pm2 رو ران کردیم.
[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 /app/artisan serve --host=0.0.0.0 --port=8000 command=/usr/bin/php -d variables_order=EGPCS /app/artisan octane:start --host=0.0.0.0 --port=8000 user=root stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:pm2] command=/usr/bin/pm2 start user=root autorestart=false
این فایل مربوط به pm2 است و باید پروسس هایی که میخواهید ران باشن رو در این لیست اضافه کنید. در این مثال یک scheduler و چهار صف لاراول را ران کردیم. برای اطلاعات بیشتر به داکیومنت pm2 مراجعه کنید.
module.exports = { apps: [ { namespace: "laravel", name: "scheduler", interpreter: "php", script: "artisan", exec_mode: "fork", instances: 1, autorestart: true, cron_restart: "* * * * *", max_memory_restart: "50M", watch: false, args: [ "schedule:work", ], }, { namespace: "laravel", name: "queue", interpreter: "php", script: "artisan", exec_mode: "fork", instances: 4, autorestart: true, cron_restart: "5 * * * *", max_memory_restart: "50M", watch: false, args: [ "queue:work", "database", "--queue=default", "--tries=3", ], }, ] }
در آخر هم میتونید با دستور زیر پروژه خود را با داکر اجرا کنید.
docker-compose up -d --build
امیدوار مفید واقع شده باشه ?