Docker部署Laravel项目

本次主要通过Docker运行php-fpm 8.3,部署laravel项目,而web服务nginx运行在宿主机,mysql和redis,memcache也都运行在宿主机上。

废话不多说,直接上代码。

1、dockerfile

bash 复制代码
# 第一阶段:构建阶段
FROM php:8.3-fpm-alpine AS builder

# 安装构建依赖
RUN apk add --no-cache \
    autoconf \
    g++ \
    make \
    libzip-dev \
    postgresql-dev \
    libmemcached-dev \
    rabbitmq-c-dev \
    hiredis-dev \
    brotli-dev

# 安装 PHP 扩展
RUN docker-php-ext-install -j$(nproc) \
    pdo_mysql \
    pdo_pgsql

# 安装 PECL 扩展
RUN pecl install \
    swoole \
    amqp \
    redis \
    memcached \
    && docker-php-ext-enable \
    amqp \
    redis \
    memcached

# 手动启用 swoole 扩展
RUN echo "extension=swoole.so" > /usr/local/etc/php/conf.d/swoole.ini

# 第二阶段:最终镜像
FROM php:8.3-fpm-alpine

# 从构建阶段复制已编译的扩展
COPY --from=builder /usr/local/lib/php/extensions/no-debug-non-zts-20230831/ /usr/local/lib/php/extensions/no-debug-non-zts-20230831/
COPY --from=builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/

# 安装运行时依赖
RUN apk add --no-cache \
    libpq \
    libzip \
    libmemcached \
    rabbitmq-c \
    hiredis \
    brotli

# 修改 php-fpm 配置文件,监听所有端口
RUN sed -i 's/listen = 127.0.0.1:9000/listen = 9000/g' /usr/local/etc/php-fpm.d/www.conf

# 设置工作目录
WORKDIR /var/www/html

# 设置目录权限
RUN chown -R www-data:www-data /var/www/html

# 暴露端口
EXPOSE 9000

# 启动 php-fpm
CMD ["php-fpm"]

这里额外添加了swoole,redis,amqp,memcahced扩展。

编译镜像:

bash 复制代码
docker build -t php-fpm:8.3 .

耗时特别长,耐心等待完成。

部署laravel代码:

bash 复制代码
docker run -itd --name=my-laravel -v /YOUR/LARAVEL/CODE/DIR:/var/www/html -p 9001:9000 php-fpm:8.3

用docker ps -a看下容器有没有成功运行。

如果没运行,使用docker logs my-laravel查看容器日志。

2、配置nginx

bash 复制代码
server {
    listen       80;
    server_name  www.you-web.com;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    charset utf-8;


    location / {
        root /var/www/laravel-example/public;
        index index.php index.html;
        try_files $uri $uri/ /index.php?$query_string;
    }


    #access_log  /var/log/nginx/host.access.log  main;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page  404              /index.php;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # 这里是前端代码
    location /adminui {
        alias /var/www/laravel-admin-ui;
        index  index.html;
        try_files $uri $uri/index.html /admin/index.html;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    # 
    location ~ \.php$ {
        root /var/www/html/public; # 这里要填容器中的目录位置
        include fastcgi_params;
        fastcgi_pass 172.34.296.51:9001; # 这里是宿主机的IP:Port
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }


    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.(?!well-know).* {
        deny  all;
    }

}

到这里,php-fpm,nginx部署配置完成。mysql,redis,memcached的请自行安装这里就不讲了。

最后就是配置laravel,在.env文件中,各个服务的主机地址要填你服务所安装的机器的IP,并且要允许被远程访问。

到这里部署完成。

-完-

相关推荐
小陈运维26 分钟前
使用kubeadm初始化IPV4/IPV6集群
linux·docker·云原生·容器·kubernetes
Wang's Blog33 分钟前
Java 项目部署之 Docker工具快速入门: 容器命令练习:创建、改文件、重启到删除的完整闭环
java·开发语言·docker
JaguarJack34 分钟前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
后端·php·laravel·服务端
小锋学长生活大爆炸1 小时前
【工具】在 Android 手机上运行 Docker
android·docker·智能手机
吴声子夜歌1 小时前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
JavaPub-rodert1 小时前
服务器不能访问 Docker Hub,镜像怎么搬过去?讲透 docker save、load、export、import 与离线镜像分发
运维·服务器·docker
m0_6464299710 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
吴声子夜歌13 小时前
Docker入门与实战——实战案例(Web服务与应用)
docker·容器
Wang's Blog13 小时前
Java 项目部署之 Docker工具快速入门: Docker 架构拆解:镜像、容器、守护进程与 Registry
java·docker·架构
java_logo13 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
数据库·人工智能·docker·agent·火山引擎·openviking·轩辕镜像