SSL
1.需用SSH 你的 vps/server
2.假設你用github, 你vps/server 要經ssh 可進入 github
建立ssh key可參考此文章前半部: https://skychoy.com/posts/175-%E7%94%9F%E6%88%90ssh-key-%E4%B8%A6%E7%AE%A1%E7%90%86server-%E6%88%96-vps%E4%B8%AD%E7%9A%84docker
Envoy 是什麼
Envoy 可理解為簡易版的CI/CD
Envoy是Laravel 開發的,用來佈署Laravel當然很適合
Envoy 用Blade語法,適合Laravel使用者
安裝 Envoy
composer require laravel/envoy --dev
參考文件:本機的 ~/.ssh/config
Host myserver
HostName 123.123.123.123. //ssh server
User root
IdentityFile ~/.ssh/key_name
我相信用SSH連server的朋友的會為不同server建立不同的ssh key?
如手動,每次都需要
ssh -i ~/.ssh/key_name your-username@your-server-ip
但如果按照上面的~/.ssh/config
做法
ssh myserver
//就等同於
ssh -i ~/.ssh/key_name root@123.123.123.123
如果這時候每次用 ssh myserver 都要密碼...
登入server 執行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
如果你可以直接免server密碼登入,那麼這一步可不執行
登入server建立並添加公鑰到 GitHub
先登入到server
ssh myserver
建立ssh key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
會彈出來名你建個名稱,假設名為github
copy公鑰
cat ~/.ssh/github.pub
1.將生成的公鑰(假設名為 ~/.ssh/github.pub)複製到 GitHub: 2.登錄到你的 GitHub 帳戶。 3.進入 Settings > SSH and GPG keys > New SSH key。 4.將公鑰粘貼到相應的欄位並保存。
文件參考:server上的 ~/.ssh/config
Host github.com
User git
IdentityFile ~/.ssh/github
完成上面設定後再執行一次
ssh -T git@github.com
之後輸入yes
執行
建立一次記錄在server上,否則直接執行Envoy
會無法驗證到github
參考文件 Envoy.blade.php
@servers(['web' => 'myserver'])
@setup
$repository = 'git@github.com:username/someone.git';
$app_dir = '/opt/apache/www/domain.com/public_html';
$docker_dir = '/www/domain.com/public_html';
$container_name = 'php8';
@endsetup
@story('deploy')
prepare_directory
clone_or_pull
install_dependencies
migrate
@endstory
@task('prepare_directory')
echo 'Preparing directory...'
mkdir -p {{ $app_dir }}
sudo chown -R root:root {{ $app_dir }}
@endtask
@task('clone_or_pull')
echo 'Cloning or pulling repository...'
if [ -d {{ $app_dir }}/.git ]; then
cd {{ $app_dir }}
git pull origin main
else
git clone {{ $repository }} {{ $app_dir }}
fi
@endtask
@task('install_dependencies')
echo 'Installing dependencies...'
docker exec -w {{ $docker_dir }} {{ $container_name }} composer install --no-interaction --prefer-dist
sudo chown -R www:www {{ $app_dir }}
@endtask
@task('migrate')
echo 'Running migrations...'
docker exec -w {{ $docker_dir }} {{ $container_name }} php artisan migrate --force
@endtask
解釋一下:
因為上一步~/.ssh/config
設定了連線,所以@servers(['web' => 'myserver'])
就足夠
$repository
填寫你的git 對應的帳號及git name
$app_dir
vps/server, 你網站的root path, 但要詳細的絕對路徑
$docker_dir
因為我的案例是用docker運作PHP,對docker而言,路徑訪問不出外層的,所以由/opt 開始的路徑好像去不了? 所以這樣填解決了我一個大坑
$container_name
如上,因為我是用docker,執行composer install
時需要經docker 去執行,所以需要知道docker中 PHP 的容器名稱
執行
cd laravel_project
php vendor/bin/envoy run deploy
常見問題
1.建立SSH key時不一定自動是放 ~/.ssh/
需要確定一下生成了在什麼位置,常見是應該存放在這
2.我是因為server中PHP經docker運作,所以composer
路徑是個大坑,要注意
3.SSH登入時一般用root登入,但是apache等網頁server一般情況下是執行不了文件為root擁有人的文件,所以在 Envoy.blade.php
的 install_dependencies
這一步我做了 sudo chown -R www:www {{ $app_dir }}
把整個目錄都還給原本的 apache使用者,不一定是www 視乎你server個別設定
4.如上問題 Envoy.blade.php
的prepare_directory
做了sudo chown -R root:root {{ $app_dir }}
把chown全設定為 登入者相同的名稱,比如root
,這樣才能繼續做下面的動作
5.建立ssh key時很多時都會設定個密碼短語,但如果在 Envoy 所用的SSH Key 我建議就不用設定,主要是因為...Envoy本來就是自動化佈署,但如果你的ssh key 有密碼短語,那麼你執行時幾乎每一步都要打一次密碼,一點也不自動,所以你自己可考慮一下是否需要短語
6.@task('xxxx')
至 @endtask
之間就是直接打 Linux command,所以需要對Linux command 有一定的基礎認知