[求助]Go Web 部署 Systemd 启动后路径问题, 找不到静态资源

2022-11-11 09:31:33 +08:00
 anviod

目前一些 Web 框架 比如 Gin fiber 等 都支持 HTTP 服务,可以使用静态资源

func main() {
	app := fiber.New()

	app.Static("/", "./home.html")
    .....
    }

例如 fiber 示例代码

将打包编译的二进制文件 与 html 静态资源文件放置在一起 "/usr/local/bin/", 想通过创建 systemd 服务来管理进程

[Unit]
Description=GoWeb Server
After=network.target ntp.service

[Service]
PrivateTmp=true
Type=simple
ExecStart=/usr/local/bin/goweb
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s SIGINT $MAINPID
User=root
Group=root

[Install]
WantedBy=multi-user.target

程序启动后发现调用的 "app.Static("/", "./home.html")" 相对路径找不到资源, 发现 systemd 启动的环境变量可能不对? 而手动启动 /usr/local/bin/goweb 能找到资源

[root@VM-16-10-~]# systemctl start goweb
查看状态
[root@VM-16-10-~]# systemctl status goweb
ctrls.service - GoWeb Server
Loaded: loaded (/etc/systemd/system/go-web.service, enabled)
Active: active (running)

在此想咨询一下有没有办法解决? 难道讲资源路径硬编码写死吗? 多谢各位

1621 次点击
所在节点    Go 编程语言
11 条回复
tairan2006
2022-11-11 09:39:14 +08:00
你没配置 WorkingDirectory…
anviod
2022-11-11 09:51:51 +08:00
@tairan2006
```
WorkingDirectory=/usr/local/bin/
```
我去加上 试试看
Great233
2022-11-11 09:57:36 +08:00
静态资源可以用 embed 包嵌入到 build 之后的 go 程序里面去
Great233
2022-11-11 09:57:48 +08:00
anviod
2022-11-11 10:17:21 +08:00
@Great233 也是个解决办法 可以解决,分发更加容易了
julyclyde
2022-11-11 11:42:11 +08:00
像你这么上进的人不多
很少有考虑在 systemd 环境里运行的一些细节的
anviod
2022-11-11 13:12:03 +08:00
@julyclyde systemd 管理进程挺好的,省的再开发守护进程了, 虽然 systemd 很复杂,但是用起来还是很好的, 怪自己之前没详细看 systemd 文档.
yin1999
2022-11-12 13:18:07 +08:00
可以使用 dynamicUser ,直接 root 有点粗暴
anviod
2022-11-16 14:45:40 +08:00
@yin1999 嗯 需要创建一个 nologin 用户, 给部分执行权限
sibowen
2022-12-16 11:36:58 +08:00
程序静态文件目录,可以考虑用配置,或者环境变量来传入吧,这么搞改动起来比较费劲的。
anviod
2022-12-30 17:26:11 +08:00
@sibowen
```
有没有尝试过多平台发布统一升级, 比如基于 goreleaser 打包成 rpm deb 针对平台 Linux arm/X86_64/AMD64 系列
可以 例用 rpm/dnf/yum/apt 之类的软件进行升级 只要系统支持 systemd 都能很好的管理.
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX