先來設定一下使用者預設的 home 目錄裡面要有哪些東西,把 .bashrc, .vim 這些都丟進去,這樣建立新使用者時就不用再設定一次了
sudo cp .bashrc /etc/skel/.bashrc
sudo cp .bash_logout /etc/skel/.bash_logout
sudo cp .profile /etc/skel/.profile
sudo cp -r .vim /etc/skel/.vim
sudo cp .vimrc /etc/skel/.vimrc
檢查一下有沒有放成功
sudo ls -al /etc/skel/
開始建立 github 使用者,並且將它加入 2023ironman 群組中,以便修改網站程式
sudo useradd github -m -d /home/github -s /bin/bash -G 2023ironman
查看一下群組列表確認是否建立成功
cat /etc/group
切換使用者到 github,並且開始設定金鑰
sudo su github
先回到家目錄,使用者是 github 卻在 admin 家感覺就怪怪的
cd ~/
建立第一組金鑰,這是為了在正式環境用 git pull
ssh-keygen -t ed25519 -C "github@2023ironman"
把公鑰讀取出來
cat /home/github/.ssh/id_ed25519.pub
並且設定到專案的 deploy
建立第二組金鑰,這是為了讓 Github Actions 用 SSH 連進正式環境用的
ssh-keygen -t ed25519 -C "github@deploy"
把公鑰放到 authorized_keys 檔案中,這樣才能從外面登入到這個使用者
cat /home/github/.ssh/deploy.pub >> ~/.ssh/authorized_keys
這次是取出私鑰
cat /home/github/.ssh/deploy
在專案設定中點開 Secrets > Actions,建立一個 secret
把剛剛的私鑰貼到裡面,並且命名成 ssh_key (大小寫沒差)
在開發環境(自己電腦)把正式環境的伺服器公鑰複製起來
cat ~/.ssh/known_hosts
新增一個 secrets 叫做 known_hosts,並且把剛剛的公鑰貼進去,為了讓 Github Actions 不要卡在確認指紋,所以先搬過去
還有一個 user_host,為了不讓人知道用了哪個使用者和 IP 部屬
這樣就設定完成了
現在是在正式環境,先移動到網站的資料夾中
cd /var/www/html/
輸入從 github 把程式拉下來的指令
git pull
看來要先加入信任的資料夾
git config --global --add safe.directory /var/www/html
再試一次,這次可以了,確認指紋後輸入 yes
git pull
看來什麼都沒有拉下來呢,因為我們還沒修改程式嘛
現在回到開發環境,在專案中新增兩層資料夾 .github/workflows/
還有在裡面新增一個 .yml 檔案,檔名可以自己取
這裡會跳出要不要裝擴充,裝都裝
把這段設定貼到剛剛的檔案中
name: Deploy
on:
push:
branches:
- "main"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 設定私鑰,為了 SSH 連線進正式環境
- uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.SSH_KEY }}
# 設定 known_hosts,避免要確認指紋
- run: echo "${{ secrets.KNOWN_HOSTS }}" >> ~/.ssh/known_hosts
# 連線進正式環境,並且更新程式
- run: ssh ${{ secrets.USER_HOST }} 'cd /var/www/html && git pull'
最後一步 commit
還有 push
然後到 github 等待結果,亮綠燈就是成功囉,如果失敗就從自己電腦用那個私鑰連看看,還有就是 secrets 多貼幾次看看
檔案也確實更新到正式環境了呢