一、注册Bitbucket账号,对比国内的源码托管企业(https://gitee.com/enterprises),Bitbucket相当大方,无限制源码项目数目,文件大小,项目总文件大小。
二、在Bitbucket上创建一个项目,用来托管网站源码,比如mywebsite.com。
三、通过Bitbucket提供的SourceTree工具(登录账号密码或者ssh),Git拉取一份到本地,这样本地电脑可以上传/下载源码了。
以上都是源码托管项目创建过程,已有的可以跳过,没有的可以百度搜索Bitbucket使用方法,本文的重点是如何通过git部署到阿里云网站服务器。
部署前准备:阿里云Linux服务器已经安装了git服务,请百度自行安装。
1. 进入项目的设置页面,找到access keys设置,去绑定一个公钥ssh key.
阿里云Linux或者其他系统,可参考Bitbucket提供方法来生成私有密钥,公钥,并绑定到设备账号.
https://support.atlassian.com/bitbucket-cloud/docs/add-access-keys/
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账号。
注意事项:
1. 阿里云SSH终端上面按照提示生成的密钥对一般是root用户或者system级别的密钥,并不能给其他用户使用,无访问权限,通过chown、chmod修改权限是无效的。
[root@iZ2ze4xswj2tx7u75dxcbsZ .ssh]# cd ~/.ssh/
[root@iZ2ze4xswj2tx7u75dxcbsZ .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 ..." 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 ..." 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.
[root@iZ2ze4xswj2tx7u75dxcbsZ www]# cd /usr/share/httpd/.ssh/
[root@iZ2ze4xswj2tx7u75dxcbsZ .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@iZ2ze4xswj2tx7u75dxcbsZ .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC45licBh8dO3sRmPBQiivLg4NzzU/3TdaYtlneY1iLIgkrm/ZBbws+TwfiAsGhEjRroul9d//TkeFIYgExF28np3Zlf5i2fWNiJbPEoE3TPVxWJ4lTM+3njPSOGX7Ug91u1MVPbfZU68ltP+DWZ6/A3VVLYu63gD45qTdUVpXGNlsqE4OevFLzLVGZssYZmdLimRk4pmHGkrn+y3IhaI6C5ZTry3vYffYNfT2sfsKhli7ZGZTK9iHhGSKdoIf7SgJjoOHHPeMFdZye8ShOf8+1Q9QDs3GDIZH9nWGRs2MY0bJi9sYXpE0PLE0D4OCFTiDxmhymPp2cO79Jt2q6hLSX root@iZ2ze4xswj2tx7u75dxcbsZ
[root@iZ2ze4xswj2tx7u75dxcbsZ .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命令来手动共享,我觉得网站命令更方便直接一些。