请教一个 Docker 和 Nginx 部署项目的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Dcynsd
V2EX    程序员

请教一个 Docker 和 Nginx 部署项目的问题?

  •  
  •   Dcynsd 2023-05-24 13:58:30 +08:00 2721 次点击
    这是一个创建于 952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目使用 PHP 开发,打包成镜像,部署到服务器后,接口使用都没什么问题,但是访问静态资源文件访问不了,在项目根目录下有个资源文件目录 resource,我的访问地址例如:xxx.com/resource/images/xxxx.png

    我在本地开发环境是可以访问成功资源文件,本地也是 Docker 运行的,只是是使用 Docker-compose 编排了 PHP 容器和 Nginx 容器。

    服务器上是直接运行了 PHP 容器,暴露 9000 端口。

    求大神们看看该怎么配置!!!

    Nginx 配置如下:

    server { listen 80; server_name xxx.com; root /var/www/app; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/app; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } } 
    15 条回复    2023-05-26 17:07:55 +08:00
    star7th
        1
    star7th  
       2023-05-24 14:04:45 +08:00
    你可以参数我的开源项目 showdoc 的 dockerfile https://github.com/star7th/showdoc/blob/master/Dockerfile

    我觉得,因为 php 无法单独运行,必须配合 nginx 类的运行中间件,所以,我建议的把 php 跟 nginx 封装到一个 docker 容器里。使用 webdevops/php-nginx:7.4-alpine 作为基础构建镜像就是不错的选择,我基本不用在环境基础问题上纠结什么的。去 dockerhub 搜索下 ,他们还提供不同版本的镜像,比如 webdevops/php-nginx:8.0-alpine
    cccssss
        2
    cccssss  
       2023-05-24 14:14:12 +08:00
    127.0.0.1:9000
    是访问了 nginx 容器内的 9000 端口
    如果 php9000 绑定了机器的 9000 端口
    ports:
    - 9000:9000
    那么就将
    127.0.0.1 换成宿主机的内网 ip 就行
    或者试试将 127.0.0.1 换成 php 容器的容器名
    Dcynsd
        3
    Dcynsd  
    OP
       2023-05-24 14:17:16 +08:00
    @star7th 感谢回复,我先去试一试
    chf007
        4
    chf007  
       2023-05-24 14:25:02 +08:00
    本地也是同样的 Nginx 配置文件么?看线上的配置是把所有的请求都转到 /index.php 上去了,要么把 /resource 单独转发处理一下,要么打包时静态资源发布另外一个独立静态资源域名上
    IdJoel
        5
    IdJoel  
       2023-05-24 14:28:41 +08:00
    不推荐你这种方法,不行上个 Roadrunner 或者上个 swoole ,打俩容器太麻烦了
    Dcynsd
        6
    Dcynsd  
    OP
       2023-05-24 14:58:19 +08:00
    @cccssss 这个连接的地址没问题,项目里面的其它接口都能访问,就只是静态文件访问不了
    Dcynsd
        7
    Dcynsd  
    OP
       2023-05-24 14:59:30 +08:00
    @chf007 本地是相同的 Nginx 配置,用 docker-compose 编排在一起
    tudou1514
        8
    tudou1514  
       2023-05-24 16:05:59 +08:00
    php 不建议玩 docker
    yinmin
        9
    yinmin  
       2023-05-24 16:06:50 +08:00
    location / 改成下面这个,再试试:

    location / {
    root /var/www/app;
    index index.php index.html index.htm;
    }
    Dcynsd
        10
    Dcynsd  
    OP
       2023-05-24 16:35:58 +08:00
    感谢大家的回复,根据 1L @star7th 的回答,我把 Nginx 和 PHP 封装在一个容器里,我的问题解决了
    ucando
        11
    ucando  
       2023-05-24 16:41:12 +08:00
    静态文件访问不了就说明你的静态文件对于 nginx 这个容器来说是不可达的. 如果你把整个项目代码, 包括静态资源, 都打包进了 php 的那个容器, 那就只有 php 的容器可以访问到这些文件, 除非你把这些静态资源独立出来, 通过挂载的方式分别挂给 nginx 和 php 的容器, 这样才能正常跑起来
    yprisoner
        12
    yprisoner  
       2023-05-24 17:38:30 +08:00
    看下我的项目: https://github.com/nekoimi/rafutaria-php 在 fpm 环境下,php 和 nginx 打包在一起
    skyrim61
        13
    skyrim61  
       2023-05-24 17:52:12 +08:00
    @tudou1514 为什么不建议呢? 请教下
    yumusb
        14
    yumusb  
       2023-05-24 18:57:32 +08:00   1
    location ~ \.php$ {
    fastcgi_pass php:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }



    version: '2'
    services:
    php:
    build: ./php/
    volumes:
    - ${PWD}/www/:/app
    restart: always
    db:
    image: mysql


    两个代码片段 够用了。
    tudou1514
        15
    tudou1514  
       2023-05-26 17:07:55 +08:00
    @skyrim61 其实我也没搞出来为啥,只是最后的结论和进程,线程有关系。我遇到很多次把 php 跑进容器,php 业务崩了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2440 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:59 PVG 21:59 LAX 05:59 JFK 08:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86