安装仓库

一开始我以为的上传代码然后服务器自动更新是因为当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!!!!