feat(examples): add FreeBSD deployment examples

This commit is contained in:
xfy 2026-06-05 17:21:26 +08:00
parent c847f6036d
commit a04dadbe16
2 changed files with 203 additions and 0 deletions

View File

@ -0,0 +1,141 @@
# 部署到 FreeBSD
本示例演示如何将 Lolly 交叉编译并部署到 FreeBSD 服务器。
## 前置条件
- 本地开发机已安装 Go 1.26+
- 目标 FreeBSD 服务器可通过 SSH 访问
- 本地已配置 SSH 密钥登录(免密码)
## 部署步骤
### 1. 交叉编译
```bash
make build-freebsd
# 输出: bin/lolly-freebsd-amd64
```
### 2. 上传到服务器
```bash
scp -P 29888 bin/lolly-freebsd-amd64 root@192.168.1.15:/tmp/
```
### 3. 安装
SSH 登录到 FreeBSD 服务器执行:
```bash
# 创建目录
mkdir -p /usr/local/etc/lolly
mkdir -p /var/log/lolly
mkdir -p /var/db/lolly
mkdir -p /var/www/lolly
# 安装二进制
mv /tmp/lolly-freebsd-amd64 /usr/local/sbin/lolly
chmod 755 /usr/local/sbin/lolly
# 复制配置文件
cp /path/to/your/lolly.yaml /usr/local/etc/lolly/lolly.yaml
# 安装启动脚本
cp examples/deploy-freebsd/lolly.rc.d /usr/local/etc/rc.d/lolly
chmod 755 /usr/local/etc/rc.d/lolly
# 启用开机启动
sysrc lolly_enable="YES"
# 启动服务
service lolly start
```
## 服务管理
| 命令 | 说明 |
|------|------|
| `service lolly start` | 启动 |
| `service lolly stop` | 停止 |
| `service lolly restart` | 重启 |
| `service lolly status` | 查看状态 |
| `service lolly reload` | 热重载配置 (HUP) |
| `service lolly rotate` | 重新打开日志 (USR1) |
## 目录结构
| 路径 | 用途 |
|------|------|
| `/usr/local/sbin/lolly` | 二进制程序 |
| `/usr/local/etc/lolly/lolly.yaml` | 配置文件 |
| `/usr/local/etc/rc.d/lolly` | 启动脚本 |
| `/var/log/lolly/` | 日志目录 |
| `/var/db/lolly/` | 数据目录 |
| `/var/www/lolly/` | Web 根目录 |
| `/var/run/lolly.pid` | PID 文件 |
## 配置文件示例
最小可用配置:
```yaml
servers:
- listen: ":8080"
name: "localhost"
static:
- path: "/"
root: "/var/www/lolly"
index:
- "index.html"
logging:
format: "text"
access:
path: "/var/log/lolly/access.log"
error:
path: "/var/log/lolly/error.log"
level: "info"
```
## 故障排查
### 检查服务状态
```bash
service lolly status
ps aux | grep lolly
sockstat -4 -l | grep 8080
```
### 查看日志
```bash
tail -f /var/log/lolly/error.log
tail -f /var/log/lolly/access.log
```
### 测试配置
```bash
/usr/local/sbin/lolly -c /usr/local/etc/lolly/lolly.yaml
# 前台运行Ctrl+C 停止
```
### 权限问题
如果启动失败提示 Permission denied
```bash
# 确保配置文件可读
chmod 644 /usr/local/etc/lolly/lolly.yaml
chown root:wheel /usr/local/etc/lolly/lolly.yaml
# 确保日志目录存在且可写
chown -R root:wheel /var/log/lolly
```
## 参考
- [FreeBSD Handbook - Init System](https://docs.freebsd.org/en/books/handbook/boot/)
- [rc.d 脚本规范](https://docs.freebsd.org/en/articles/rc-scripting/)

View File

@ -0,0 +1,62 @@
#!/bin/sh
#
# lolly - High Performance HTTP Server and Reverse Proxy
#
# PROVIDE: lolly
# REQUIRE: LOGIN
# KEYWORD: shutdown
. /etc/rc.subr
name="lolly"
rcvar="lolly_enable"
load_rc_config $name
: ${lolly_enable:="NO"}
: ${lolly_config:="/usr/local/etc/lolly/lolly.yaml"}
: ${lolly_pidfile:="/var/run/lolly.pid"}
command="/usr/sbin/daemon"
pidfile="${lolly_pidfile}"
procname="/usr/local/sbin/lolly"
start_precmd="lolly_prestart"
lolly_prestart()
{
[ -d /var/log/lolly ] || mkdir -p /var/log/lolly
[ -d /var/db/lolly ] || mkdir -p /var/db/lolly
[ -d /var/www/lolly ] || mkdir -p /var/www/lolly
rm -f "${lolly_pidfile}"
}
command_args="-c -f -p ${lolly_pidfile} /usr/local/sbin/lolly -c ${lolly_config}"
extra_commands="reload rotate"
reload_cmd="lolly_reload"
rotate_cmd="lolly_rotate"
lolly_reload()
{
if [ -f "${lolly_pidfile}" ]; then
echo "Reloading lolly configuration..."
kill -HUP $(cat "${lolly_pidfile}")
else
echo "lolly is not running"
return 1
fi
}
lolly_rotate()
{
if [ -f "${lolly_pidfile}" ]; then
echo "Rotating lolly logs..."
kill -USR1 $(cat "${lolly_pidfile}")
else
echo "lolly is not running"
return 1
fi
}
run_rc_command "$1"