具体创建 egg 项目这里就不做过多叙述…请查看官网文档,本篇建立与已有 egg 仓库,宝塔的基础上。

添加站点

进入宝塔面板,点击添加站点

例如:我的 egg 项目目录就是 www/wwwroot/egg,域名是 api.xmeta.love

image-20220115204007394

webhooks 自动部署

  1. 宝塔面板的软件商店搜索安装宝塔 webhook

  2. 打开设置,点击添加,输入名称,先随便输入脚本,点击提交

  3. 点击查看密钥,记录下密钥

  4. 打开项目仓库,例如我的是 gitee,进入仓库页面,点击管理 => 部署公钥管理 => 添加公钥,添加完成后,后面别的仓库都可以共用这个公钥,无需再次创建,直接添加该公钥即可。

    查看公钥命令:

    1
    cat ~/.ssh/id_rsa.pub

    如果电脑上没有公钥,请创建公钥,具体参考git 常用命令篇

  5. 仓库页面,点击管理 => WebHooks => 添加 webhook,输入刚才查看密钥里的 post 地址

    image-20220115205333936

⚠️ 注意:params 后的参数就是下面脚本里的$1,请按需修改成自己的

  1. 编辑脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
#git项目路径
gitPath="/www/wwwroot/$1"
#git 网址
gitHttp="git@gitee.com:huoyou/$1.git"

echo "Web站点路径:$gitPath"

#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的项目文件
git reset --hard origin/master

echo "开始拉取代码"
sudo git pull
echo "拉取完成"

#按需开启npm 部署命令
sudo npm install --production

echo "开始重启"
sudo npm run stop
sudo npm run tsc
sudo npm run start
echo "重启完成"

#设置目录权限
chown -R www:www $gitPath
echo "End"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi

做完这些,就可以实现提交代码,webhook 自动部署 egg 了。

设置反向代理,通过域名访问

egg 部署完之后,只能通过你的服务器 IP 访问,例如:http://114.112.112.50:7001, 但我们肯定不想调用这样的接口吧,这样太 low 了。。。

所以,我们需要设置反向代理,实现通过域名调用接口。

进入宝塔面板,点击 egg 站点的 设置=>反向代理=>添加反向代理

image-20220115211707102

来,瞅瞅效果,输入 api.xmeta.love

image-20220115212113418