前言
作者使用 win 进行 PHP 代码化开发,真香。但是容易出现各种场景下出现一些因为系统不一样而导致的掉头发的问题。所以今天就来解决环境不一致的问题
系统说明
本地 : win10 + vscode + vmware 16 pro (此处无影响,仅供参考)
linux : ubuntu 18.04
docker 20.10.8(此处无影响,仅供参考)
docker 容器里面的 php 版本为 7.4 (此处无影响,仅供参考)
docker 容器内 nginx 为 1.21 (此处无影响,仅供参考)
最终目标环境
作者需要在 win 本地同步修改 php 文件,文件实时同步到 docker 目录下,并且作者可以实时刷新 web 页面看到修改后的页面效果。
整体实现逻辑
使用 vmware 的目录共享功能将 win本地的目录同步到 vm 下的 linux 内,然后 docker 启动并挂载相对应的目录。
具体操作流程
将 vmware 的共享目录设置为本地对应的代码目录。(如下图:设置>选项>共享文件夹>总是启动>添加>确认)
此时,windos 方面的目录配置已经完成。
安装 vmtoos。首先可以确认一下自己的 linux 环境是否安装了 vmtools 。命令为:
which vmhgfs-fuse
。如果有这个命令,则可以直接进行第 3 步。如果没有这个命令,则需要通过 vmware 菜单栏进行安装。
如果您还是无法正常安装的话,建议本文附录的链接进行安装。
将共享目录挂载到 linux 。请将 下文中的 您的目录 替换为 您的 linux 环境的对应目录, 您的用户id和用户组 id 建议为 docker 的 id, 如果不知道那就使用 root 。umask 对应的权限为 00 表示为 0777
vmhgfs-fuse .host:/ /您的目录 -o allow_other -o uid=您的用户id -o gid=您的用户组id -o nonempty -o umask=00
- 配置 nginx 里面对应网站的配置(主要是修改目录指向,指向对应目录),如下图:给的截图仅供参考,注:我把 app 目录映射到 docker 里面了,所以我直接 app/mount/ ,您需要改成您的 docker 映射的载入的目录。
- 启动 docker 容器,载入对应的映射配置。
- 打开浏览器,即可正常访问 。
附录
- 出现无法解压的问题 :https://blog.csdn.net/maureen226/article/details/78947859
- VMware 上 Linux 虚拟机和 Windows 共享文件夹 :https://www.cnblogs.com/jixiaohua/p/11774240.html
- 开机重启后挂载丢失:https://blog.csdn.net/JinlonW5/article/details/102790900?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-102790900.nonecase
- 用 vmhgfs-fuse .host:/ /mnt/hgfs 挂载后需要超级用户才能 ls hgfs :https://bbs.csdn.net/topics/392053153
- vmware 官方文档:https://docs.vmware.com/cn/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-AB5C80FE-9B8A-4899-8186-3DB8201B1758.html
- 解决 VMware 中共享文件夹 hgfs 的权限问题 https://jarviswwong.com/ubuntu-vmware-hgfs-permissions-problem.html
- umark 详解: http://c.biancheng.net/view/764.html
其它问题
下列的问题第一次遇到了,但是我的解决方案是确认权限问题,而网上给的是如下的解决方案。并未测试,自行判断
最后加载网站的时候可能会出现 file not found 之类的错误
打开文件: usr/local/php/etc/php.ini,修改以下配置
把cgi.fix_pathinfo=0 改为 cgi.fix_pathinfo=1
把 ;cgi.force_redirect=1 改为 cgi.force_redirect=0
修改php-fpm.conf里面的user和group都为root,
然后执行命令php-fpm -R 就ok
最后 & 鸣谢
感谢所有写文章的大佬给了我解决方案
yum remove open-vm-tools 把自动装上的open-vmtools给卸掉,
vmhgfs-fuse .host:/ /root/dnmp -o allow_other -o uid=1000 -o gid=1000 -o nonempty -o umask=00
#一键生成新的nginx 配置
./lnmp-docker nginx-config http /root/dnmp/dlnmp/app/newtest newtest.cc
问题描述:
遇到一个新的bug,如果重启vm后,出现 win 未挂载的情况,然后通过 web 应用直接访问挂载的应用的话,就会出现提示 file not found.
此时如果直接挂载目录的话,再次访问,毫无效果。
解决方案:
需要重启 nginx 和 PHP 容器
如果不能用,注意看看容器里面的权限
vmhgfs-fuse .host:/ /home/che/docker/lnmp/app/mount -o allow_other -o uid=1000 -o gid=1000 -o nonempty -o umask=00