docker(三) - 装个php-laravel环境吧

有预感,这是一篇阅读点赞评论都极低的文章,怎么办呢,那该写也得写啊

接上篇搭好的环境继续装

一、用上期搭好的负载均衡继续装这个环境

常规拉镜像并启动,我用的7.4,版本自行更改哈

复制代码
docker pull php:7.4-fpm
ruby 复制代码
docker run --name php7.4 --network network -v ~/repo:/usr/share/repo:rw -d php:7.4-fpm

--name 自定义的容器名

-d 后台运行

--network network 将容器加到network这个网络中

-v 挂载,将宿主机目录~/repo挂载到docker中 /usr/share/repo,比如项目代码文件夹都在repo下面,我就把这个目录挂进来,后面好能访问通项目。

clone个项目进来

把PHP的项目克隆进来,把项目的配置文件都配好,方便后面更好的看效果

bash 复制代码
cd ~/repo
git clone git@github.com.......

装个composer

bash 复制代码
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
cd /usr/share/repo/你的项目名/
composer install
改nginx从服务器配置

进到nginx容器中,新建个conf文件,按之前nginx负载均衡的方式,先在两个从服务器中新建nginx配置文件

bash 复制代码
vi /etc/nginx/conf.d/php.conf
ini 复制代码
server {
    server_name laravel.test.com;
    index index.php;
    
    error_log /var/log/nginx/laravel.error.log;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        root /usr/share/repo/test/public; # root写在这里,他就会去php的容器里取这个文件夹
        fastcgi_pass php7.4:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

nginx -t没问题之后重启,由于配了域名,重启后需要在hosts文件里加上对应的映射

bash 复制代码
docker exec -it nginx-2 bash
vi /etc/hosts
curl 127.0.0.1/index.php # 能获取到你的项目页就ok
改nginx主服务器配置
bash 复制代码
docker exec -it nginx-1 bash
vi /etc/nginx/conf.d/php.conf
ini 复制代码
upstream backend { 
    server nginx-2; 
    server nginx-3; 
}
server {
    server_name laravel.test.com;
    error_log /var/log/nginx/laravel.error.log;
    
    location / {
        proxy_pass http://backend;
    }
}

退出容器重启容器

复制代码
docker restart nginx-1

在host加个servername的映射(如果你写localhost就不用加)

问题合集

1.docker host not found in upstream "php7.4" in /etc/nginx/conf.d nginx 配好之后测试发现,连不到php7.4

css 复制代码
fastcgi_pass php7.4:9000;

是因为php7.4这个容器和nginx这个容器不在同一个网络里,相互之间不能通信,还是按照上篇文章的方式,在宿主机将php7.4也加到这个我们自定义的网络里就好了

arduino 复制代码
docker network connect network php7.4

如果之前没创建过网络的呢,就在宿主机执行下面的命令

sql 复制代码
docker network create mynetwork
docker network connect mynetwork php7.4
docker network connect mynetwork 你的nginx容器名

2.docker挂载宿主机的文件目录又没权限了

于是我去把/root/repo/的文件夹换了用户和用户组为www-data,重启之后在访问了一下又报了下面的错

3. 怎么就一直404了呢

在多次确认了文件夹路径都是对的的情况下,可以看看以下两种情况:

可能性一:/root/***文件夹的问题

在尝试了多次之后,我觉得是我挂载过来的这个/root/repo文件夹的问题,/root下的文件就是访问不到,即使我把/root/repo的所属用户组换了也好,于是我重启了个容器换了挂载的文件夹就好了

可能性二:nginx配置问题

最开始我把root /usr/...写在了sever层,也就是这样

ini 复制代码
server {
    server_name localhost;
    index index.php;
    root /usr/share/repo/test/public;
    
    error_log /var/log/nginx/laravel.error.log;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_pass php7.4:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

可不就是访问不到,他去访问nginx容器里这个路径了,我应该让他去访问php容器里的这个路径才对,解决方案就是,把root这行挪到location ~ \.php$ {里面去

相关推荐
念何架构之路10 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x10 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn12 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈13 小时前
AI 读你的提示词,其实很没耐心
后端
用户83562907805113 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我1234513 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒13 小时前
Java性能优化完全指南
前端·人工智能·后端
TTATTC14 小时前
单体应用如何支撑千所机构独立测评?拆解 sg-exam 行级多租户隔离与动态组卷内核
docker·开源
电子IT笔记14 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk5987814 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端