1、首先安装git 参考我之前的文章
2、创建文件夹,比如git_test 不创建也可以,git clone 的时候会把服务器上的整个文件夹带下来。
3、拉取服务器上的文件 git clone git@gitee.com:XXXX/XXXX.git,后面的地址换为自己的项目地址,我目前使用的是gitee上创建的项目,如果出现错误
需要在服务器上生成public key 然后在gitee中 配置
一般会在 /root 路径下面生成,l. 或 ls -al 能够查看隐藏的文件
如果没有就新建,如果有,建议删除再新建
rm -rf .ssh
然后新生成SSH-key【替换成你自己的邮箱】
生成key的方法 ssh-keygen -t rsa -C "email@qq.com"
键入命令后,会让你输入密码用来保护你的密钥等,总共三次需要输入的,你都直接三次回车就好!!
-C 是给你的密钥设置注释,你不想设置为邮箱,设置成别的也行
生成后,会在/root目录下,也就是当前用户的目录下,生成一个.ssh隐藏目录,目录中会有【id_rsa】和【id_rsa.pub】两个文件,一个是私钥,一个是公钥。你现在就可以复制使用了
设置好之后再次回到目录进行git clone 输入 yes 即可拉取成功
配置自动同步git项目文件
需要配置一个外网能访问的控制器文件,在这里我使用的是PHP文件
<?php
//本地路径
$local = '/www/test/git_test/test';
//仓库地址
$remote = 'git@gitee.com:zsxslx/test.git';
//密码
$password = '123456';
//获取请求参数
$request = file_get_contents('php://input');
if (empty($request)) {
die('request is empty');
}
//验证密码是否正确
$data = json_decode($request, true);
if ($data['password'] != $password) {
die('password is error');
}
echo shell_exec("cd {$local} && git pull {$remote} 2>&1");
die('done ' . date('Y-m-d H:i:s', time()));
然后在gitee上项目管理里面添加WebHooks配置
测试提交报错
Warning: shell_exec() has been disabled for security reasons in
解决。打开宝塔,找到php配置文件,搜索 disable_functions
去除 shell_exec 方法、然后保存重启即可。
判断是否有权限读取
<?php echo shell_exec('ls -la')
在通过浏览器访问这个文件,能够输出目录结构说明PHP可以运行系统命令
测试报错
将PHP代码倒数第二行改为
echo shell_exec("cd {$local} && /usr/local/git/bin/git pull {$remote} 2>&1");
测试报错
是因为我服务器上运行php 的用户为www 所以修改www权限访问,并配置www生成的公钥就可以了
参考:https://www.bbsmax.com/A/1O5E36gbz7/
登陆线上服务器,为用户生成 SSH 秘钥,并配置码云或GitHub的项目公钥。
配置公钥主要的作用是免去每次 git 操作时需要输入密码。
注意,这里,我们要为 www 用户或 nobody 用户生成 ssh 秘钥,别搞错了。webhook 调用时,是 php 脚本当前执行的用户。
具体是哪个用户可以通过 echo shell_exec('id -a'); 来查看。
注:也可以xshell下执行 "ps aux|grep php-fpm"
去找你php-fpm的配置文件,看图
查看这个文件,查看用户和组名称
sudo mkdir -p /home/www/.ssh
sudo chown -R www.www /home/www/.ssh
sudo -Hu www ssh-keygen -t rsa
一路回车,直到结束,系统会在用户的home目录,生成 id_rsa 和 id_rsa.pub 两个文件,即 id_rsa 密钥 和 id_rsa.pub 公钥。
cat /home/www/.ssh/id_rsa.pub
然后在 码云 项目管理 -> 公钥管理 -> 添加公钥 ,把 id_rsa.pub 中的内容添加。
然后测试运行
完美解决,本地提交文件会自动同步至服务器。
附录ssh-keygen命令参数解释
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。
附录 简单实用git命令
git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git commit -am "init" 提交并且加注释
git remote add origin git@192.168.1.119:ndshow
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
还没有人发表评论