使用Bitbucket托管網站源碼項目,同時通過git部署到阿裡雲網站伺服器
一、注冊Bitbucket賬号,對比國内的源碼托管企業(https://gitee.com/enterprises),Bitbucket相當大方,無限制源碼項目數目,檔案大小,項目總檔案大小。
二、在Bitbucket上建立一個項目,用來托管網站源碼,比如mywebsite.com。
三、通過Bitbucket提供的SourceTree工具(登入賬号密碼或者ssh),Git拉取一份到本地,這樣本地電腦可以上傳/下載下傳源碼了。
以上都是源碼托管項目建立過程,已有的可以跳過,沒有的可以百度搜尋Bitbucket使用方法,本文的重點是如何通過git部署到阿裡雲網站伺服器。
四、如何通過git部署到阿裡雲網站伺服器?
部署前準備:阿裡雲Linux伺服器已經安裝了git服務,請百度自行安裝。
1. 進入項目的設定頁面,找到access keys設定,去綁定一個公鑰ssh key.
阿裡雲Linux或者其他系統,可參考Bitbucket提供方法來生成私有密鑰,公鑰,并綁定到裝置賬号.
https://support.atlassian.com/bitbucket-cloud/docs/add-access-keys/

Bitbucket ssh deployment key
2. 綁定成功後,在阿裡雲SSH終端上,通過這個指令來測試阿裡雲是否能夠正常通路Bitbucket。
$ ssh -T [email protected]
authenticated via a deploy key.
You can use git to connect to Bitbucket. Shell access is disabled.
This deploy key has read access to the following repositories:
webmaster.com
3. 之後你就可以在阿裡雲SSH終端上通過git clone指令,下載下傳拉取托管在Bitbucket的源碼了。
本地電腦 <======(上傳/下載下傳)==========> Bitbucket雲源碼托管 =========(釋出更新)=========> 某個網站(阿裡雲伺服器)
如果使用
特别注意的是:
Bitbucket ssh account key 就是有開發者賬戶下面所有托管項目的可寫可讀權限,一般用在開發者的電腦某個git軟體上面,目的是替代輸入賬号密碼,來實作上傳/下載下傳管理遠端源碼功能;
Bitbucket ssh deployment key 隻能讀取綁定的幾個托管項目,一般用在網站釋出,比如阿裡雲伺服器上面的幾個網站項目,都可以通過ssh git pull方式拉取直接遠端下載下傳到伺服器上面,替代了傳統ftp上傳網站源碼檔案。
在阿裡雲SSH終端上生成了密鑰,公鑰後,看你是想将公鑰綁定到哪裡:
如果綁定到Bitbucket賬号下,終端的Git權限就是所有項目可寫可讀;如果綁定到一個或者多個源碼項目下,終端的Git權限隻能讀取;同一個ssh pub key可以綁定多個Bitbucket項目,但是隻能綁定一個Bitbucket賬号。
Bitbucket ssh account key
注意事項:
1. 阿裡雲SSH終端上面按照提示生成的密鑰對一般是root使用者或者system級别的密鑰,并不能給其他使用者使用,無通路權限,通過chown、chmod修改權限是無效的。
[[email protected] .ssh]# cd ~/.ssh/
[[email protected] .ssh]# ll
total 16
-rw-------. 1 root root 0 Dec 25 15:04 authorized_keys
-rw-r--r-- 1 root root 57 May 12 17:46 config
-rw-r--r-- 1 root root 1679 May 12 17:13 id_rsa
-rw-r--r-- 1 root root 410 May 12 17:13 id_rsa.pub
-rw-r--r-- 1 root root 409 Dec 29 14:52 known_hosts
2. root使用者的公鑰添加到了bitbucket,但是我的網站源碼裡面有PHP通過sh指令調用git pull拉取更新,這裡httpd的使用者是apache,需要給apache使用者也建立一個密鑰對,可添加到Bitbucket多個網站項目,這樣php才有權限能調用到ssh密鑰。
[Echo]Start git pull origin master...
cd /beecenter.cn
[Echo][git status]...
# On branch master
# Your branch is ahead of 'origin/master' by 355 commits.
# (use "git push" to publish your local commits)
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# init/
nothing added to commit but untracked files present (use "git add" to track)
[Echo][git pull origin master]...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[Echo]Finished Updating.
[Echo]Start git pull origin master...
cd /beecenter.cn
[Echo][git status]...
# On branch master
# Your branch is ahead of 'origin/master' by 355 commits.
# (use "git push" to publish your local commits)
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# init/
nothing added to commit but untracked files present (use "git add" to track)
[Echo][git pull origin master]...
Unauthorized
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[Echo]Finished Updating.
上面是git通路權限不通過,下面是生成 PHP/apache可用執行的使用者ssh密鑰對,并需要再次手動添加到Bitbucket.
[[email protected] www]# cd /usr/share/httpd/.ssh/
[[email protected] .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[[email protected] .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC45licBh8dO3sRmPBQiivLg4NzzU/3TdaYtlneY1iLIgkrm/ZBbws+TwfiAsGhEjRroul9d//TkeFIYgExF28np3Zlf5i2fWNiJbPEoE3TPVxWJ4lTM+3njPSOGX7Ug91u1MVPbfZU68ltP+DWZ6/A3VVLYu63gD45qTdUVpXGNlsqE4OevFLzLVGZssYZmdLimRk4pmHGkrn+y3IhaI6C5ZTry3vYffYNfT2sfsKhli7ZGZTK9iHhGSKdoIf7SgJjoOHHPeMFdZye8ShOf8+1Q9QDs3GDIZH9nWGRs2MY0bJi9sYXpE0PLE0D4OCFTiDxmhymPp2cO79Jt2q6hLSX [email protected]
[[email protected] .ssh]# ll
total 12
-rw------- 1 apache root 0 Dec 30 16:34 authorized_keys
-rw------- 1 apache root 1675 Dec 30 16:33 id_rsa
-rw-r--r-- 1 apache root 410 Dec 30 16:33 id_rsa.pub
-rw-r--r-- 1 apache root 409 Dec 30 16:34 known_hosts
以上是再次完成添加apache使用者,下面是我們網站的系統手動Git更新:
總結
上面我建立了兩份ssh key,都是用來釋出網站更新,
一個是阿裡雲ssh終端root使用者,可以通過在ssh終端界面輸入git指令手動更新,
另外一個是apache/www使用者,可以通過編寫網站源碼調用sh指令,進而執行git指令來手動共享,我覺得網站指令更友善直接一些。