├── README.md ├── acm.sh ├── cron-run.sh ├── crontab ├── docker-php-entrypoint.sh ├── fpm ├── Dockerfile └── docker-run-fpm.sh ├── supervisord-queue.conf └── swoole ├── Dockerfile └── docker-run-swoole.sh /README.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | 3 | 可以批量部署的的 docker php 版本环境,方便你放入 k8s 或者通过服务器的 docker 进行部署。 4 | 5 | 数据库、文件存储和 redis 缓存采用外部服务提供。允许容器无服务化快速扩容,缩容。 6 | 7 | 8 | ## 添加部署相关程序 9 | 10 | ``` 11 | git subtree add -P deploy/docker/ https://github.com/mouyong/docker-php.git master 12 | 13 | # fpm 镜像构建 14 | cp deploy/docker/fpm/Dockerfile . 15 | # 环境变量 16 | cp deploy/docker/acm.sh . 17 | # 定时任务 18 | cp deploy/docker/crontab . 19 | ``` 20 | 21 | ## 构建镜像 22 | 23 | ``` 24 | docker build -t laravel . 25 | ``` 26 | 27 | ## 检查构建出来的镜像 28 | 29 | ``` 30 | docker image ls 31 | ``` 32 | 33 | ## 启动镜像 34 | 35 | ``` 36 | docker run -itd --name app -P 80:80 laravel:latest 37 | ``` 38 | -------------------------------------------------------------------------------- /acm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## config param 4 | endpoint=acm.aliyun.com 5 | namespace=$namespace 6 | accessKey=$accessKey 7 | secretKey=$secretKey 8 | dataId=$dataId 9 | group=${group:-production} 10 | ## config param end 11 | 12 | ## get serverIp from address server 13 | serverIp=`curl $endpoint:8080/diamond-server/diamond -s | awk '{a[NR]=$0}END{srand();i=int(rand()*NR+1);print a[i]}'` 14 | 15 | ## config sign 16 | timestamp=`echo $[$(date +%s%N)/1000000]` 17 | signStr=$namespace+$group+$timestamp 18 | signContent=`echo -n $signStr | openssl dgst -hmac $secretKey -sha1 -binary | base64` 19 | 20 | ## request 21 | curl -H "Spas-AccessKey:"$accessKey -H "timeStamp:"$timestamp -H "Spas-Signature:"$signContent "http://"$serverIp":8080/diamond-server/config.co?dataId="$dataId"&group="$group"&tenant="$namespace -v 22 | -------------------------------------------------------------------------------- /cron-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | if [ -f /var/www/html/crontab ]; then 4 | crontab -u www-data /var/www/html/crontab 5 | fi; 6 | -------------------------------------------------------------------------------- /crontab: -------------------------------------------------------------------------------- 1 | # Edit this file to introduce tasks to be run by cron. 2 | # 3 | # Each task to run has to be defined through a single line 4 | # indicating with different fields when the task will be run 5 | # and what command to run for the task 6 | # 7 | # To define the time you can provide concrete values for 8 | # minute (m), hour (h), day of month (dom), month (mon), 9 | # and day of week (dow) or use '*' in these fields (for 'any').# 10 | # Notice that tasks will be started based on the cron's system 11 | # daemon's notion of time and timezones. 12 | # 13 | # Output of the crontab jobs (including errors) is sent through 14 | # email to the user the crontab file belongs to (unless redirected). 15 | # 16 | # For example, you can run a backup of all your user accounts 17 | # at 5 a.m every week with: 18 | # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 19 | # 20 | # For more information see the manual pages of crontab(5) and cron(8) 21 | # 22 | # m h dom mon dow command 23 | PATH=$PATH:/usr/local/bin 24 | 25 | * * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1 26 | -------------------------------------------------------------------------------- /docker-php-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -ex 3 | 4 | case $PLATFORM in \ 5 | "serverless") \ 6 | echo "run in $PLATFORM" \ 7 | mv /etc/supervisor/conf.d/queue.conf queue.conf.back && \ 8 | mv /var/www/html/crontab crontab.back\ 9 | ;; \ 10 | "vpc") \ 11 | echo "run in $PLATFORM" \ 12 | ;; \ 13 | "*") \ 14 | echo "unknown platform $PLATFORM" \ 15 | ;; 16 | esac 17 | 18 | cron 19 | /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf 20 | su - www-data -s /bin/bash -c "docker-run" 21 | # first arg is `-f` or `--some-option` 22 | if [ "${1#-}" != "$1" ]; then 23 | set -- php-fpm "$@" 24 | fi 25 | exec "$@" 26 | -------------------------------------------------------------------------------- /fpm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.cn-shenzhen.aliyuncs.com/mouyong-base/php8.0-composer:1.0.0 as composer 2 | 3 | COPY database/ /app/database/ 4 | COPY packages/ /app/packages/ 5 | 6 | COPY composer.json composer.lock /app/ 7 | 8 | RUN cd /app \ 9 | && composer install \ 10 | --optimize-autoloader \ 11 | --ignore-platform-reqs \ 12 | --prefer-dist \ 13 | --no-interaction \ 14 | --no-plugins \ 15 | --no-scripts \ 16 | --no-suggest \ 17 | --no-dev 18 | 19 | FROM registry.cn-shenzhen.aliyuncs.com/mouyong-base/php8.0-fpm:1.0.0 20 | 21 | COPY . /var/www/html 22 | 23 | COPY --from=composer /app/vendor/ /var/www/html/vendor/ 24 | 25 | COPY ./deploy/docker/supervisord-queue.conf /etc/supervisor/conf.d/queue.conf 26 | 27 | COPY ./deploy/docker/cron-run.sh /usr/local/bin/cron-run 28 | COPY ./deploy/docker/fpm/docker-run-fpm.sh /usr/local/bin/docker-run 29 | 30 | RUN chown -R www-data:www-data /var/www && \ 31 | chmod 0777 -R /var/www/html/bootstrap/cache /var/www/html/storage && \ 32 | chmod +x /usr/local/bin/docker-run /usr/local/bin/cron-run /usr/local/bin/docker-php-entrypoint 33 | -------------------------------------------------------------------------------- /fpm/docker-run-fpm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 执行数据表迁移 4 | /usr/local/bin/php /var/www/html/artisan migrate --force 5 | # 缓存路由 6 | /usr/local/bin/php /var/www/html/artisan route:cache 7 | # 缓存配置 8 | /usr/local/bin/php /var/www/html/artisan config:cache 9 | # 定时任务 10 | cron-run -------------------------------------------------------------------------------- /supervisord-queue.conf: -------------------------------------------------------------------------------- 1 | [program:api-queue] 2 | process_name=%(program_name)s_%(process_num)02d 3 | command=php /var/www/html/artisan queue:work --tries=3 --timeout=60 4 | autostart=true 5 | autorestart=true 6 | user=www-data 7 | numprocs=10 8 | redirect_stderr=true 9 | stdout_logfile=/var/www/html/storage/logs/api-queue.log 10 | stopwaitsecs=3600 11 | -------------------------------------------------------------------------------- /swoole/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.cn-shenzhen.aliyuncs.com/mouyong-base/php7.4-composer:1.0.0 as composer 2 | 3 | COPY database/ /app/database/ 4 | COPY packages/ /app/packages/ 5 | 6 | COPY composer.json composer.lock /app/ 7 | 8 | RUN cd /app \ 9 | && composer install \ 10 | --optimize-autoloader \ 11 | --ignore-platform-reqs \ 12 | --prefer-dist \ 13 | --no-interaction \ 14 | --no-plugins \ 15 | --no-scripts \ 16 | --no-suggest \ 17 | --no-dev 18 | 19 | FROM registry.cn-shenzhen.aliyuncs.com/mouyong-base/php7.4-swoole:2.2.0 20 | 21 | COPY . /var/www/html 22 | 23 | COPY --from=composer /app/vendor/ /var/www/html/vendor/ 24 | 25 | COPY ./deploy/docker/supervisord-queue.conf /etc/supervisor/conf.d/api-queue.conf 26 | 27 | COPY ./deploy/docker/cron-run.sh /usr/local/bin/cron-run 28 | COPY ./deploy/docker/swoole/docker-run-swoole.sh /usr/local/bin/docker-run 29 | 30 | RUN chown -R www-data:www-data /var/www && \ 31 | chmod 0777 -R /var/www/html/bootstrap/cache /var/www/html/storage && \ 32 | chmod +x /usr/local/bin/docker-run /usr/local/bin/cron-run /usr/local/bin/docker-php-entrypoint 33 | -------------------------------------------------------------------------------- /swoole/docker-run-swoole.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 执行数据表迁移 4 | /usr/local/bin/php /var/www/html/artisan migrate --force 5 | # 缓存路由 6 | /usr/local/bin/php /var/www/html/artisan route:cache 7 | # 缓存配置 8 | /usr/local/bin/php /var/www/html/artisan config:cache 9 | # 启动框架 10 | /usr/local/bin/php /var/www/html/artisan swoole:http start 11 | # 定时任务 12 | cron-run --------------------------------------------------------------------------------