使用 win10 子系统开发心得 Laravel envoy 简单使用

使用 win10 子系统开发心得 Laravel envoy 简单使用

最近开发摒弃了 homestead ,转战 windows 子系统。在使用 windows 子系统的开发过程中,我发现一个有趣的问题 子系统没有权限操作本地文件的权限 在 win10 经常出现权限问题(为了方便开发,我将本地代码软链到了子系统中)。这样一来当我们要上传图片,或者新建文件夹等操作的时候就会出现权限不足的问题。

我采用了一个笨办法,在子系统中再独立部署一套代码,本地开发中要用到上传图片等功能的时候,使用子系统的这一套代码。这样一来有个问题,就是每次都要 push pull 代码非常麻烦。没有方法能更简单方便的同步代码到 子系统吗? 答案是肯定的,而且不止一种。

这里推几两种方式:

1.Laravel Envoy (本篇文章要介绍的)

2.@yuanshang 的文章 PhpStorm 实现远程代码同步更新

3.git hooks 实现自动项目部署


为什么不用 hometead ,它是 laravel 官方推荐的开发环境?

首先是我用的机器不给力,使用 homestead 经常出现 cpu , 内存 使用率过高的问题。而且 homestead 的启动也是感觉缓慢,同时 homestead 环境部署也是比较麻烦,要装很多软件过程中还会有各种不可预知的问题。

相对来说 windows 子系统,安装更加简单。启动速度更快,使用中也不会出现 cpu , 内存 使用率过高的问题


前面说了那么前戏,现在来到正题:如何用 Laravel Envoy
我们使用基于 nickfan/envoy-deployscript 写的脚本。

1.注意你的本地部署服务器和你的远程目标服务器之间配置基于ssh公钥模式的认证设置

假设要登录的机器为192.168.1.100,当前登录的机器为192.168.1.101。

首先在101的机器上生成密钥(如果已经生成可以跳过):

$ ssh-keygen -t rsa

然后在将生成的公钥复制到机器100上的~/.ssh/authorized_keys中,使用如下命令:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100

root为需要登录到机器 100 上的身份,需要替换成需要的用户名。

如果不设置后面运行任务的时候会多次请求你运程主机的密码。

2.你的本地部署服务器/工作站/笔记本 必须通过 composer 全局安装过 Laravel 的 Envoy 工具 Envoy

composer global require laravel/envoy

export PATH=$PATH:~/.config/composer/vendor/bin

3.下载或在克隆 nickfan/envoy-deployscript

git clone https://github.com/nickfan/envoy-deployscript.git

4.拷贝 envoy.config.example.php 和 Envoy.blade.php 到你的本地 laravel 项目根路径,重命名 envoy.config.example.php 到 envoy.config.php.

cp envoy.config.example.php /var/www/your_project/envoy.config.php

cp  Envoy.blade.php /var/www/your_project/Envoy.blade.php

5.设置 envoy.config.php 文件,主要修改 $app_name(你项目项目名称) , $server_connections (你的远程主机配置),$source_repo(你的 git 项目地址),$deploy_basepath(你的远程主机项目存放地址)

envoy.config.php

/**
 * Envoy deployment script config file
 */
/**
 * application name
 */
$app_name = 'your app name';

/**
 * server settings
 * conn : remote server connection string
 * owner : (optional) remote server service user/owner(group) that run the php-fpm/nginx and the application files permissions.
 * @example row set: 'webserver1'=>['conn'=>'-p 2222 vagrant@127.0.0.1','owner'=>'vagrant'],
 * @example row set: 'webserver2'=>['user@191.168.1.10 -p2222','user'],
 * @example row set: 'root@example.com',
 */
$server_connections = [
    'webserver'=>['user@191.168.1.10 -p2222','user'],
    //    'webserver1'=>['conn'=>'-p 2222 vagrant@127.0.0.1','owner'=>'vagrant'],
    //    'webserver2'=>['user@191.168.1.10 -p2222','user'],
    //    'root@example.com',
];

/**
 * @notice http/https protocol might be ask for password for your private repos
 *  and that will break the git clone progress,use git protocol instead
 * @example 'git@localhost:user/myrepo.git'
 */
$source_repo = 'your git project';
/**
 * deployment base path
 * @example '/var/www'
 */
$deploy_basepath = '/var/www/html';
  1. 你需要创建一个 .env.production 的环境变量文件在你的 laravel 项目的根路径中(参考 .env.example ) 这个文件将被当做环境文件部署到远程服务器上去.

6.初始化 envoy


 envoy run deploy_init

 envoy run deploy_init --branch=develop --env=development

7.执行部署:


envoy run deploy
envoy run deploy --branch=develop --env=development

到这里,就可以使用 envoy run deploy 一键同步代码到子系统了。


如果对安装 homestead 环境有疑问的可以参考下我的另一篇文章 在 Windows10 系统中安装 Homestead 本地开发环境

如果对 windows 子系统有兴趣的可以参考下 win10 系统下安装 wsl + Laravel 开发环境 Ubuntu16.04LTS + WIN10


本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

wsl如果出现权限问题,重新挂载代码所在盘符一下,就可以了

5年前 评论

@dreamfish https://blogs.msdn.microsoft.com/commandli... 建议参考一下这个,我在使用 laravel-admin的时候 遇到的这个问题,

5年前 评论
snowlyg (楼主) 4年前

@月殇 没有尝试重载,初步判断母系统 D 盘文件权限是 root 用户组的,wsl 子系统内部 php 的权限为 www-data 用户组。所以上传文件 php 需要 在母系统 创建文件夹/文件,自然会有权限不足问题。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!