4 个版本 (2 个破坏性版本)

0.2.1 2020年10月14日
0.2.0 2020年9月24日
0.1.2 2020年7月20日
0.0.1 2020年7月2日

#836 in HTTP服务器

MIT 许可证

47KB
1K SLoC

Subilo

Rust

🛳 自动部署代理

Subilo 是一个用于设置在没有外部集成(如物联网设备和VPS)的机器上运行的应用程序持续部署的工具。

工作原理

Subilo 代理是一个小型服务器,位于您的应用程序机器上,并监听安全的HTTP webhook。这些webhook包含有关要部署的应用程序的信息,这些信息与Subilo配置文件(.subilorc)匹配。文件还定义了成功部署应用程序应采取的步骤,例如:git pull 或拉取最新的Docker镜像,重启应用程序并发送通知。

基本示例

配置 (.subilorc)

[[projects]]
name = "foo-app"
path = "~/apps/foo-app"
commands = [
  "git pull",
  "./restart-serever.sh",
  "echo 'Pulled changes and restarted server successfully'",
]

Webhook:

这个webhook通常在测试通过后从CI运行中发送。

curl -X POST 'https://subilo.yourdomain.com/webhook' \
  -H 'Authorization: Bearer ********' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "foo-app" }'

然后可以在使用Subilo代理提供的URL和身份验证令牌的仪表板中查看这些部署的状态和日志。

安装

安装脚本

curl -s -L https://raw.githubusercontent.com/huemul/subilo/master/install.sh | bash

此命令运行安装脚本。该脚本下载最新的Subilo版本,并尝试将Subilo二进制路径添加到正确的配置文件中(~/.profile~/.bashrc~/.bash_profile~/.zshrc~/.config/fish/config.fish

Cargo

cargo install subilo

手动

下载最新的发布二进制文件并添加可执行权限

wget -O subilo "https://github.com/huemul/subilo/releases/download/v0.1.2/subilo-x86-64-linux"
chmod +x subilo

使用

命令行界面

现在Subilo可用后,可以通过运行help子命令来显示CLI信息。

subilo --help
subilo 0.0.1
Tiny deployment agent

USAGE:
    subilo [FLAGS] [OPTIONS] <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Makes Subilo verbose. Useful for debugging and seeing what's going on "under the hood"

OPTIONS:
    -s, --secret <secret>    Secret to generate and authenticate the token

SUBCOMMANDS:
    help     Prints this message or the help of the given subcommand(s)
    serve    Start subilo agent
    token    Create a token based on the secret to authorize agent connections

配置

创建一个包含所需配置的.subilorc文件。一个示例可以在这里找到。

启动

要启动代理,应使用serve命令,指定认证密钥、端口(可选)、配置文件和日志目录(可选)。

示例

subilo --secret super-secret serve --port 8089 --config /path/to/.subilorc

注意:目前,显示部署作业状态和日志的API基于这些日志文件。

认证

要访问代理端点,请在CLI中使用token命令创建认证令牌。

具有写入权限的令牌

此令牌用于访问POST /webhook端点,并使用.subilorc中的预定义命令部署应用程序。

示例

subilo --secret "super-secret" token --permissions "job:write"

仅具有读取权限的令牌

默认情况下,该令牌仅具有读取权限。换句话说,只能访问日志和信息端点。这些端点可以用来查看部署作业的状态和日志。它们是subilo.io网站的动力所在。

示例

subilo --secret "super-secret" token

Systemd配置(可选)

我们建议使用systemd运行Subilo以轻松管理。但这完全可选,您可以根据需要运行它。

创建具有以下属性的systemd服务文件(/etc/systemd/system/subilo.service

[Unit]
Description=Subilo

[Service]
ExecStart=/path/to/subilo -s super-secret-secret serve -l /path/to/subilo-logs -p 8080 -c /path/to/.subilorc

[Install]
WantedBy=multi-user.target

然后启用并启动Subilo服务

# Might require sudo
systemctl enable /etc/systemd/system/subilo.service
systemctl start subilo

要从systemctl读取日志并检查状态,可以使用以下命令

systemctl status subilo
journalctl -u subilo -b

设置部署webhook

一旦Subilo运行并暴露在互联网上,可以通过向/webhook端点发送包含应用程序名称的POST请求来触发部署作业。

curl -X POST 'https://subilo.yourdomain.com/webhook' \
  -H 'Authorization: Bearer ********' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "foo-app" }'

该名称将与.subilorc配置文件进行匹配,并运行指定的命令来部署应用程序。

CI

通常,此webhook由CI运行触发,因此当应用程序的测试通过后,可以安全部署。将令牌作为秘密存储在CI配置中,并添加curl命令以POST到/webhook端点来触发部署。

开发

运行

cargo run

# Watch mode
cargo watch -x run

# Setting CLI options
cargo run -- --port 9090 --logs-dir ./logs

测试

cargo test

# Watch mode
cargo watch -x test

许可

MIT License © Christian GillNicoals Del Valle

依赖项

~66MB
~1.5M SLoC