使用 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';
- 你需要创建一个 .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 协议》,转载必须注明作者和本文链接
推荐文章: