安装仓库
一开始我以为的上传代码然后服务器自动更新是因为当push代码到仓库中,然后服务器找到这个仓库的文件路径,执行脚本更新 但是自己操作后发现仓库中只有这些文件
drwxrwxr-x 2 gitea gitea 4096 Mar 20 10:49 branches/
-rw-rw-r-- 1 gitea gitea 66 Mar 20 10:49 config
-rw-rw-r-- 1 gitea gitea 73 Mar 20 10:49 description
-rw-rw-r-- 1 gitea gitea 23 Mar 20 10:49 HEAD
drwxrwxr-x 5 gitea gitea 4096 Mar 20 10:49 hooks/
drwxrwxr-x 2 gitea gitea 4096 Mar 20 11:01 info/
drwxrwxr-x 12 gitea gitea 4096 Mar 20 11:01 objects/
drwxrwxr-x 4 gitea gitea 4096 Mar 20 10:49 refs/
后面查资料发现在服务器上的代码也需要在仓库中pull,达到更新的效果
所以记录下这篇安装仓库及使用webhook更新代码的过程
Gitea 依赖于 Git,因此需要先安装 Git
sudo apt update
sudo apt install git
安装 MySQL:
sudo apt install mysql-server
sudo mysql_secure_installation```
建表
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
下载并安装 Gitea
赋予执行权限
chmod +x gitea
移动 Gitea 到系统目录
sudo mv gitea /usr/local/bin/gitea
创建 Gitea 用户
创建一个专用用户来运行 Gitea:
sudo adduser --system --group --disabled-password --home /var/lib/gitea gitea
创建 Gitea 工作目录
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R gitea:gitea /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea
配置 Gitea 配置文件
生成默认配置文件:
sudo -u gitea gitea web -c /etc/gitea/app.ini
编辑配置文件:
sudo vim /etc/gitea/app.ini
运行 Gitea
以 Gitea 用户身份运行:
sudo -u gitea gitea web -c /etc/gitea/app.ini
配置为系统服务
创建 systemd 服务文件:
sudo nano /etc/systemd/system/gitea.service
添加以下内容:
[Unit]
Description=Gitea
After=syslog.target
After=network.target
[Service]
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
[Install]
WantedBy=multi-user.target
保存并退出,然后启用并启动服务:
sudo systemctl enable gitea
sudo systemctl start gitea
在安装过程中出现最多的问题是很多的文件一定要以gitea用户运行 以及在配置gitea过程中主机地址要写0.0.0.0,不然会立即报错 在配置过程中会在mysql中新建一个gitea表,要记得密码和账号
tips
由于gitea不能使用root账号来运行,所以当使用gitea user来运行gitea时候,很多文件夹会没有权限那可以使用
sudo chown -R gitea:gitea /var/lib/gitea
很多问题就对应解决
自动化部署脚本
由于在本地更新代码之后,push到仓库,服务器上的代码不会更新,所以写一个自动化脚本
vim /home/xiaogang/deploy.sh
#!/bin/bash
# 进入项目目录
cd /home/xiaogang
# 拉取最新代码
git pull origin master
sudo systemctl restart xiaogang
echo "Deployment completed and service restarted."
在拉取代码过程中会出现需要输入账号密码,使用这行command,只需要第一次输入密码
git config --global credential.helper store
chmod +x /path/to/your/project/deploy.sh
使用 Webhook 自动触发部署
为了进一步自动化,可以在 Gitea 中设置 Webhook,当代码推送到仓库时,自动触发服务器上的部署脚本。
-
在服务器上设置 Webhook 接收端
-
安装一个 Webhook 接收工具,例如 webhook。
apt install webhook
- 创建一个 Webhook 配置文件,例如
hooks.json:
[
{
"id": "deploy",
"execute-command": "/home/xiaogangdeploy.sh",
"command-working-directory": "/home/xiaogang"
}
]
- 启动 webhook 服务:
webhook -hooks hooks.json -verbose
- 在 Gitea 中配置 Webhook
登录 Gitea,进入你的仓库。 点击“设置” -> “Webhooks” -> “添加 Webhook”。 填写 Webhook 信息: 目标 URL:http://0.0.0.0:9000/hooks/deploy(假设 webhook 服务运行在 9000 端口)。 触发事件:选择“推送事件”。 点击“添加 Webhook”。
后台运行webhook.
nohup /usr/local/bin/webhook -hooks /path/to/hooks.json -verbose > webhook.log 2>&1 &
将webhook写进系统服务中总是会有意想不到的错误,所以后台运行就好
测试
在本地更改代码,push到仓库,发现线上运行的程序自动更新,nice!!!!