🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

在 Docker 本地开发环境上极快地运行 Drupal

这个方法只在 macOS 上测试过,抱歉啊 :)

在本地,我们可以使用 Docker for Windows 或者 Docker for Mac 作为应用的开发环境。不过如果你打算使用 Docker 的数据卷存储应用的代码,特别是应用的文件比较多,比如 Drupal ,在运行它的时候你会觉得特别慢。这是因为 Docker for Windows 与 Docker for Mac 都使用了本地化的虚拟技术,这是为了给我们提供一个更顺流的体验,但是数据卷的性能是个暂时没能解决的问题。我找到了一个解决方法,就是使用 Unison 同步文件,暂时只在 macOS 上测试过。

安装 Unison 与必备

在 macOS 上安装了 Homebrew 以后,可以很容易用它安装 Unison 。另外你还需要让 Unison 可以监视文件的变化,当有变化时就去执行同步的动作,这些再安装一下 unison-fsmonitor 。

# 安装 unison
brew install unison

# 安装 unox 的依赖
pip install MacFSEvents

# unox 是在 macOS 上用的 unison-fsmonitor 脚本
curl -o /usr/local/bin/unison-fsmonitor -L https://raw.githubusercontent.com/hnsl/unox/master/unox.py
chmod +x /usr/local/bin/unison-fsmonitor

运行 Drupal

我在 github 上有个叫 nest 的仓库,它是 Docker Compose 的一个可以运行一般的 PHP 应用的环境,它的 use-unison-sync-app-files 分支上测试了使用 Unison 同步应用文件的方法。

1 - 克隆仓库

git clone -b use-unison-sync-app-files git@github.com:ninghao/nest.git

2 - 构建与启动服务

cd nest

# 构建 Compose 里用的镜像
docker-compose build

# 启动 Compose 里描述的服务
docker-compose up -d

3 - 下载 Drupal

# 进入带 drush 工具的容器
docker-compose exec console bash

# 下载 Drupal
drush dl drupal
mv drupal* drupal

# 修改一下权限,不然 Drupal 不能写文件
chown -R www-data drupal/sites

4 - 配置一下 nginx

# 文件:services/nginx/config/default.conf
# 修改一下配置文件里的 root 指令的值,改成下面这个样子:

root                 /mnt/app/drupal;

5 - 重启 web 服务

# 直接在本地上执行
docker-compose restart web

6 - 使用 unison 同步文件

# 直接在本地上执行

# 先同步一下 Drupal 的文件
unison ./app/drupal socket://127.0.0.1:5000/drupal -auto -batch

# 监视文件的变化
unison ./app/drupal socket://127.0.0.1:5000/drupal -repeat watch -auto -batch

7 - 安装 Drupal

# 在浏览器打开
http://localhost:8080

8 - 感受极快的运行速度 :)

Docker

评论

服务器上还是用ssh更安全一些吧?

这个性能问题是出现本地,在服务器上,你的应用应该复制到容器里去,而且服务器用的操作系统是 Linux,数据卷应该也不存在性能问题。

好的,明白了,谢谢。

每次执行到redis 哪一步,都会报/usr/local/etc/php/ext/redis 目录找不到,不知道为啥

我也是!我用的是 Docker for Windows

要不要在 github 上提个 issue 。

已经提 issue 了。

重新设置了下载 phpredis 的方法。

可以了,浩哥V5

皓哥,不好意思,敲错字了

木事 :)

能不能把 build 的时候的日志贴到咱们的论坛上。

刚刚我用 Docker for Mac 重新 build 了一下,没有发错这个问题。

王老师,在第6步,使用 unison 同步文件时,提示“Fatal error: Failed to connect to the server on host 127.0.0.1:5000”,我要怎么起动这个服务呢? 我去百度了下,没找到答案-_-!

还有一个问题就是:在工具容器里,用Drush下载了Drupal后,权限命令“chown -R www-data drupal/sites”执行后,我发现目录的拥有者始终是 1000 staff ,在浏览器中安装Drupal的时候,提示各种不能写入文件.

还有一个问题就是:在工具容器里,用Drush下载了Drupal后,权限命令“chown -R www-data drupal/sites”执行后,我发现目录的拥有者始终是 1000 staff ,在浏览器中安装Drupal的时候,提示各种不能写入文件.

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点