Golang Go语言中 systemctl 管理静态文件路径问题
Golang Go语言中 systemctl 管理静态文件路径问题
使用 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
更多关于Golang Go语言中 systemctl 管理静态文件路径问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
cwd 的问题, 你需要配置 systemd 的 current working directory
当前目录啊,兄 dei。
你试试先 cd 到 /,再执行 /home/ec2-user/gm 还能不能找到静态文件吧
建议使用 packr2
要么在 service file 里写明工作目录
要么在代码里用 os.Executable 取可执行文件的目录
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
直接用 systemctl 管理的啊。如何 cd 到当前目录?
packr2 是什么? 和 systemctl 类似也是进程管理工具吗?
谢谢,确实是 WorkingDirectory 的问题。 上面回复没生效是因为之前为测试修改了代码里的静态文件路径…… 😂
#8 将静态文件打包到 go 可执行文件中,实现单文件部署
还可以这样啊?
https://github.com/gobuffalo/packr
是这个吗?
#11 对,你可用 v2 版本
好的。非常感谢,我试试!
在Golang中,虽然语言本身并不直接涉及systemctl
或系统服务管理,但你可以通过编写服务单元文件(.service)来使用systemctl
来管理你的Go应用程序,并配置静态文件路径。
如果你的Go应用程序需要访问静态文件(如HTML、CSS、JavaScript等),通常这些文件会被打包在应用程序的二进制文件旁边,或者通过配置指定路径来访问。
要在systemctl
中管理这些路径,你需要在你的.service
文件中正确设置工作目录(WorkingDirectory
)或环境变量(Environment
)。例如:
[Unit]
Description=My Go Application
[Service]
ExecStart=/path/to/your/go-application
WorkingDirectory=/path/to/your/static/files
Environment=STATIC_FILES_PATH=/path/to/your/static/files
[Install]
WantedBy=multi-user.target
在这个例子中,WorkingDirectory
设置了应用程序的工作目录,你可以在此目录中访问静态文件。同时,通过Environment
变量,你可以将静态文件路径传递给你的Go应用程序,以便在运行时使用。
请确保你的Go应用程序能够正确读取这些环境变量或工作目录,并在需要时访问静态文件。此外,还要确保.service
文件的路径和权限设置正确,以便systemctl
能够正确加载和管理你的服务。
总之,虽然Golang不直接管理systemctl
,但通过适当的配置,你可以使用systemctl
来启动和管理你的Go应用程序,并正确设置静态文件路径。