最近的新项目框架选择了Swoft,开发环境部署在Docker中。每次修改代码后,执行http restart都需要4~5秒钟重新加载代码。本来觉得耗时久是正常现象,只能忍耐。但是部署测试服务器(Centos 7.6)的时候发现仅耗时0.x秒,查询后发现是Docker在mac上的固有问题,使用 Docker-sync 可以解决以上问题。
安装 docker-sync 和 unison 策略支持:
~ gem install docker-sync # 可能需要先执行 brew install gem
~ brew install unison
~ brew install eugenmayer/dockersync/unox
在项目根目录创建配置文件docker-sync.yml
version: '2'
options:
verbose: false
syncs:
lookrobot-api-sync:
# 需要挂载的目录
src: './'
# 同步策略 macOS 推荐 native_osx,Windows 配置为 unison
sync_strategy: native_osx
# 这里的用户 ID 为 1000,请确认你的 php-fpm 为同一个用户
sync_userid: 1000
# 忽略的文件
sync_excludes: [
'.gitignore',
'.git/',
'.DS_Store',
]
修改docker-compose.yml文件
这里我选择复制一个
compose文件,在up || down时需要加-f参数
version: '3.4'
volumes:
lookrobot-api-sync:
external: true
services:
swoft:
image: swoft/swoft
# for local develop
command: php -S 127.0.0.1:13300
container_name: swoft-srv
environment:
- APP_ENV=dev
- TIMEZONE=Asia/Shanghai
- REDIS_HOST=redis-srv
- REDIS_PORT=16379
- MYSQL_HOST=mysql-srv
- MYSQL_PORT=3306
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=123456
- EMQ_HOST=emqx-srv
restart: always
depends_on:
- mysql
- redis
- emqx
ports:
- "18306:18306"
- "18307:18307"
- "18308:18308"
volumes:
- lookrobot-api-sync:/var/www/swoft
# - ./runtime/ng-conf:/etc/nginx
# - ./runtime/logs:/var/log
启动同步容器及重新启动服务
$ docker-compose down
$ docker-compose -f docker-compose-withsync.yml build
$ docker-sync clean
$ docker-sync start
$ docker-compose -f docker-compose-withsync.yml up -d
注意事项
- 执行
composer update后要再次执行docker-sync clean 及 start重新同步文件。 - 更新
MacOS Catalina后可能需要再次安装docker-sync——sudo gem install docker-sync