Mac环境下Docker运行Laravel项目
Mac环境下Docker运行Laravel项目
一直拖了好久,昨晚终于有时间开始尝试在自己的工作本部署运行Laravel项目,中间也遇到一些坑,网上也翻看了不少的资料,最终成功运行,并且尝试运行多站点,最终也成功,特意记录下来跟大家分享这个过程。
一、拉取镜像
在这里我暂时需要用到mysql、php、nginx,我们根据自己所需版本进行拉取
// 获取mysql镜像 docker pull mysql // 获取php7.3镜像 docker pull php:7.3-fpm // 拉取nginx镜像 docker pull nginx
因为Laravel项目对PHP最低要求是7.3,所以我特意指定版本,mysql跟nginx没有指定版本,按最新的拉取。
二、准备项目代码
本次要运行的laravel项目是公司的项目,我已经专门创建了一个目录用来存放,目前存放于/word下,大家根据自己项目代码存放目录而定,我在这个目录下放了两个项目,截图如下:
三、创建运行容器
创建3个容器:注意先后顺序,先mysql,再php,最后nginx
# 创建mysql容器 docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql /* 参数解释: -p:端口映射,映射容器的3306. 例如:3307:3306:将容器的3306端口映射到主机的3307端口 -e:MYSQL_ROOT_PASSWORD=123456 初始化root用户的密码 -it:运行交互式的容器,让docker运行的容器实现"对话"的能力 -d:后台运行容器,并返回容器ID --name:命名容器 */ -------------------------------------------------------- # 创建PHPfpm容器 docker run -d -v /word:/var/www/html -p 9000:9000 --link mysql-test:mysql --name dpp-php php:7.3-fpm /* 参数解释: -v 前面是主机的目录(刚刚我们准备的laravel项目目录):映射容器的目录,这里需要和nginx容器中一致 --link:挂上msyql。因为php需挂载mysql,所以mysql需要在php之前。 */ -------------------------------------------------------- # 创建nginx容器 docker run -d -p 9191:80 --name dpp-nginx -v /Users/hongzhuangxian/nginx/conf/conf.d:/etc/nginx/conf.d -v /word:/var/www/html --link dpp-php:phpfpm --name dpp-nginx nginx /* 参数解释: -p:映射80端口,这里我映射了9191端口 -v:/word:/var/www/html 这个目录和php容器中一致。 -v /Users/hongzhuangxian/nginx/conf/conf.d:/etc/nginx/conf.d 映射nginx配置目录 --name:容器名 --link:跟PHP关联,所以nginx容器创建要在php容器创建之后。 */
四、PHP安装相关扩展
# 进入到PHP容器 (可以用name也可以用容器id) docker exec -it dpp-php /bin/bash # php安装pdo_mysql,不走这一步,laravel会报 can not find driver 错误 docker-php-ext-install pdo_mysql(curl ...) # 要安装php-redis的话,需要另外下载,执行下面这个命令就可以了,有问就no或者空格就好 pecl install redis && docker-php-ext-enable redis # 安装后 php-m 发现就都有了哦
五、配置nginx配置
我们在/Users/hongzhuangxian/nginx/conf/conf.d目录下创建一个default.conf文件,内容如下:
server { listen 80; server_name dpp.test.com; #charset koi8-r; location / { root /var/www/html/dpp/public; index index.php index.html index.htm; # 如果没有以下4行,laravel将只能访问首页,其他页面都是404 try_files $uri $uri/ /index.php?$query_string; if (!-e $request_filename){ rewrite ^/(.*) /index.php last; } # 如果没有以上4行,laravel将只能访问首页,其他页面都是404 } #error_page 404 /404.html; # 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; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # # location ~ \.php$ { # proxy_pass http://127.0.0.1; # } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /var/www/html/dpp/public; index index.php index.html; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_pass dpp-php:9000; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_index index.php; # 下面这行也改了 中间的$document_root fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } server { listen 80; server_name portal.test.com; #charset koi8-r; location / { root /var/www/html/portal/public; index index.php index.html index.htm; # 如果没有以下4行,laravel将只能访问首页,其他页面都是404 try_files $uri $uri/ /index.php?$query_string; if (!-e $request_filename){ rewrite ^/(.*) /index.php last; } # 如果没有以上4行,laravel将只能访问首页,其他页面都是404 } #error_page 404 /404.html; # 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; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # # location ~ \.php$ { # proxy_pass http://127.0.0.1; # } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /var/www/html/portal/public; index index.php index.html; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_pass dpp-php:9000; # 坑在这里,需将原有的127.0.0.1:9000替换成phpfpm:9000 fastcgi_index index.php; # 下面这行也改了 中间的$document_root fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
保存之后退出,然后输入以下命令进入到nginx容器进行重启
docker exec -it dpp-nginx /bin/bash nginx -s reload
六,修改host文件
由于我在nginx配置文件中使用了dpp.test.com跟portal.test.com来指向不同的项目,所以需要修改host文件,我们直接在终端输入以下命令
sudo vim /etc/hosts
往配置文件添加两条规则
127.0.0.1 portal.test.com 127.0.0.1 dpp.test.com
七、运行检验效果
完成以上操作后,我们直接浏览器分别输入以下地址看看是否成功
http://dpp.test.com:9191
http://portal.test.com:9191
如果成功运行项目就可以了。
0条评论