使用 docker 打包部署Laravel 应用

Laravel是目前最流行的PHP框架,特点是开发速度快,当然部署也麻烦。

传统部署流程:

  • Composer安装依赖
  • 使用Apache/Nginx进行部署Laravel的Web接口
  • 使用Supervisor作为Laravel队列服务的进程守护
  • 设置crontab定期执行Laravel的定时任务

看起来,每次部署Laravel还是挺麻烦的,有了Docker后,我们可以使用Docker的特性来集成基本的部署操作,并且由于容器的特性,还可以使得应用跑的时候更加安全。

使用Apache打包基础镜像

这里我们使用的基础镜像为: php:7.1-apache,之后可以使用docker-php-ext-install安装我们需要的PHP扩展。

完整的Apache基础镜像Dockerfile参见Github.

使用Composer安装依赖

# 拷贝代码到html目录
COPY . /var/www/html

# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 安装依赖
ONBUILD RUN cd /var/www/html && composer install --no-scripts

用Supervisor跑Queue,Crontab以及Web

与传统部署方式不同的是,Docker有入口点的概念,当入口点改为Supervisor后,作为Web的apache将不会启动,所以,这里我们也需要用Supervisor以及cronjob.

使用bash来模拟cronjob:

#!/usr/bin/env bash
# Run scheduler
while [ true ]
do
  php /var/www/html/artisan schedule:run --verbose --no-interaction
  sleep 60
done

完成的Supervisor配置参见Github.

在Docker里安装Supervisor:

# Install Supervisor.
RUN \
  apt-get update && \
  apt-get install -y supervisor git && \
  rm -rf /var/lib/apt/lists/* && \
  sed -i 's/^\(\[supervisord\]\)$/\1\nnodaemon=true/' /etc/supervisor/supervisord.conf

# Define working directory.
WORKDIR /etc/supervisor/conf.d


RUN mkdir -p /var/log/supervisor && mkdir -p /etc/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
VOLUME /var/log/supervisor

入口点修改

首先, 打包的时候,进行Laravel的cache以提高性能。

php artisan route:cache && php artisan view:clear

Dockerfile里修改入口点:

ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Define default command.


CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]

完整的Dockerfile见[Github](https://github.com/orvice/laravel-docker).

## 在自己的Laravel项目中快速打包

使用Docker的ONBUILD特性,我做了个基础镜像,只需要在自己的Laravel项目的Dockerfile中改为:

FROM orvice/laravel-base

即可快速方便的构造Docker镜像!


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker部署Laravel应用程序,你可以使用以下步骤: 1. 首先,在你的Laravel项目根目录下创建一个名为`Dockerfile`的文件,并添加以下内容: ``` # 使用官方的PHP镜像作为基础镜像 FROM php:7.4-fpm # 安装一些必要的依赖 RUN apt-get update && apt-get install -y \ git \ unzip \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ curl # 安装Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # 设置工作目录 WORKDIR /var/www # 复制项目文件到工作目录 COPY . /var/www # 安装项目依赖 RUN composer install --no-interaction --optimize-autoloader # 设置文件夹权限 RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache # 生成应用密钥 RUN php artisan key:generate # Expose port 9000 and start php-fpm server EXPOSE 9000 CMD ["php-fpm"] ``` 2. 创建一个名为`docker-compose.yml`的文件,并添加以下内容: ``` version: '3' services: app: build: context: . dockerfile: Dockerfile image: laravel-app container_name: laravel-app restart: unless-stopped ports: - 8000:9000 volumes: - .:/var/www networks: - laravel nginx: image: nginx:latest container_name: laravel-nginx restart: unless-stopped ports: - 80:80 volumes: - .:/var/www - ./nginx.conf:/etc/nginx/conf.d/default.conf networks: - laravel networks: laravel: ``` 3. 在你的Laravel项目根目录下创建一个名为`nginx.conf`的文件,并添加以下内容: ``` server { listen 80; index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass app:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } } ``` 4. 确保你的Laravel项目根目录下有一个`.env`文件,其中包含正确的数据库连接和其他配置。 5. 在项目根目录中运行以下命令以构建和启动容器: ``` docker-compose up -d --build ``` 这将构建并启动包含Laravel应用程序和Nginx服务器的Docker容器。 6. 在浏览器中访问`http://localhost`,你应该能够看到你的Laravel应用程序运行在Docker容器中。 这就是在Docker部署Laravel应用程序的基本步骤。你可以根据需要进行修改和调整。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值