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$ {里面去

相关推荐
monkey_meng5 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马8 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng11 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
paopaokaka_luck5 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
码农小旋风6 小时前
详解K8S--声明式API
后端
Peter_chq6 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml47 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~7 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616887 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
追风林7 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker