使用 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 協議》,轉載必須註明作者和本文連結