<?php
ubuntu + nginx + Coding 自动部署的详细步骤
网上参考了一大堆,自己试着写一下教程
 
1.生成公钥
公钥有两个:1. git用户公钥,2. 部署公钥:
 
chown -R www-data:www-data www/
git用户公钥
ssh-keygen -t rsa
执行一遍:
sudo -Hu www-data git config --global credential.helper store # 永久保存
sudo -Hu www-data git config --global  "xxx"
sudo -Hu www-data git config --global user.email "xxx" # 邮箱请与conding上一致
# 注:如果报权限不足,执行一下 chown -R www-data:www-data /var/www/
 
# 然后一直回车就行
# 生成的文件通常是 /root/.ssh/id_rsa
 
部署公钥
ftp
sudo apt-get install vsftpd
sudo -Hu www-data ssh-keygen -t rsa
 
 
2. 准备钩子文件
创建和修改目录权限:
# 创建目录
mkdir /var/www/webhook
# 修改目录权限
chown -R www-data:www-data webhook/
# 创建钩子文件
chown -R www-data:www-data touch index.php
 
# 写入钩子文件内容
<?php
error_reporting(1);
 
$target = $_GET['target']; // 生产环境web目录=如果只适用于一个项目地址可以直接固定,否则手动传入
if (!$target) {
exit('error target');
}
$token = 'ytt'; // 自定义,如果设置在coding中记得传入
$wwwUser = 'www-data'; // 用户组=ubuntu是www-data, centos是www
$wwwGroup = 'www-data';
 
// coding post请求会测试这个接口是否有效
$json = json_decode(file_get_contents('php://input'), true);
 
// 如果没有token 这个判断就没有必要
if (empty($json['token']) || $json['token'] !== $token) {
exit('error request');
}
 
// 2>&1 译: 标准错误输出重定向到标准输出(无论标准出错在哪里,都将标准出错重定向到标准输出中)
$cmd = "cd $target && git pull 2>&1 && chown -R $wwwUser:$wwwGroup $target/";
 
echo shell_exec($cmd);
 
为钩子准备一个域名,要保证能访问到 /var/www/webhook/index.php
 
nginx配置,说实话:不想写...
想了想还是写一下(有始有终):cd /etc/nginx/sites-available/
vim (名字自己起)
 
server {
listen 80;
root /var/www/webhook;
index index.html index.php;
server_name xxx(域名);
client_max_body_size 100m;
 
location / {
try_files $uri $uri/ /index.php?$query_string;
}
 
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
 
}
 
给这个配置搞一个软连接: cd /etc/nginx/sites-enabled/
 
sudo ln -s /etc/nginx/sites-available/ xxx.
 
记得重启一下nginx: nginx -s reload
在网页上输入这个域名看看能不能访问,不行就自己检查下
 
 
配置Coding的webhook
1.添加用户公钥
复制 vim .ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可 (https://coding.net/user/account/setting/keys)
 
2.添加部署公钥
复制 vim /var/www/.ssh/id_rsa.pub 的内容并添加到部署公钥:
 
 
3.添加hook
选择项目 > 设置 > WebHook > 新建hook > 对应要求设置值;
URL: 为钩子配置的域名地址,如果是手动传入项目地址记得在后面拼上项目地址
令牌: 钩子文件中如果设置的有,建议加上
保存记得ping一下,状态如果是绿色的钩,代表接口是正常的
 
 
服务器项目初始化
1.我们需要先在服务器上clone一次,以后都可以实现自动部署了:
sudo -Hu www-data git clone xxx -项目地址 -- 初始化clone必须要用www-data用户
 
2、exit();