systemctl 管理 golang 静态文件路径问题

2019-05-20 11:09:29 +08:00
 imherer

使用 gin 写了一个 http 服务器,其中静态文件使用如下方式实现:

r.Static("/index", "./public")

服务器上的目录结构如下:

├── ec2-user  // 根目录
│   ├── gm  // 二进制文件
│   └── public // 静态文件目录

现在通过直接运行gm这个二进制文件的方式,是能正常访问到静态文件的,即:````http://xxx.com/index``` 这样能正常访问到 public 下的静态文件

但是我通过 systemctl 管理 golang 进程之后静态文件就 404 了。 请问各位大佬这个文件路径应该如何配置?

贴一下我 systemctl .service 文件

[Unit]
Description=dm-gm

[Service]
Type=simple
Restart=always
RestartSec=5s
Environment=GIN_MODE=release
ExecStart=/home/ec2-user/gm

[Install]
WantedBy=multi-user.target
3099 次点击
所在节点    Go 编程语言
13 条回复
k9982874
2019-05-20 11:13:17 +08:00
working directory 了解一下
lihongjie0209
2019-05-20 11:15:26 +08:00
cwd 的问题, 你需要配置 systemd 的 current working directory
raysonx
2019-05-20 11:16:56 +08:00
当前目录啊,兄 dei。
你试试先 cd 到 /,再执行 /home/ec2-user/gm 还能不能找到静态文件吧
mritd
2019-05-20 11:20:42 +08:00
建议使用 packr2
reus
2019-05-20 11:26:22 +08:00
要么在 service file 里写明工作目录

要么在代码里用 os.Executable 取可执行文件的目录
imherer
2019-05-20 11:29:46 +08:00
@lihongjie0209
@k9982874
@reus
WorkingDirectory 有配置过,但是没起左右。尝试了各种路径配置都不行。 贴一下带 WorkingDirectory 的配置文件

[Unit]
Description=dm-gm

[Service]
Type=simple
Restart=always
RestartSec=5s
Environment=GIN_MODE=release
WorkingDirectory=/home/ec2-user
ExecStart=/home/ec2-user/gm

[Install]
WantedBy=multi-user.target
imherer
2019-05-20 11:30:41 +08:00
@raysonx 直接用 systemctl 管理的啊。如何 cd 到当前目录?
imherer
2019-05-20 11:31:13 +08:00
@mritd packr2 是什么? 和 systemctl 类似也是进程管理工具吗?
imherer
2019-05-20 11:35:01 +08:00
@k9982874
@lihongjie0209
@reus
谢谢,确实是 WorkingDirectory 的问题。 上面回复没生效是因为之前为测试修改了代码里的静态文件路径…… 😂
mritd
2019-05-20 11:37:06 +08:00
@imherer #8 将静态文件打包到 go 可执行文件中,实现单文件部署
imherer
2019-05-20 11:42:49 +08:00
@mritd 还可以这样啊?
https://github.com/gobuffalo/packr
是这个吗?
mritd
2019-05-20 11:46:53 +08:00
@imherer #11 对,你可用 v2 版本
imherer
2019-05-20 11:51:10 +08:00
@mritd 好的。非常感谢,我试试!

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

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

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

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

© 2021 V2EX