V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imherer
V2EX  ›  Go 编程语言

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

  •  
  •   imherer · 2019-05-20 11:09:29 +08:00 · 3196 次点击
    这是一个创建于 2015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 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
    
    13 条回复    2019-05-20 11:51:10 +08:00
    k9982874
        1
    k9982874  
       2019-05-20 11:13:17 +08:00 via iPhone
    working directory 了解一下
    lihongjie0209
        2
    lihongjie0209  
       2019-05-20 11:15:26 +08:00
    cwd 的问题, 你需要配置 systemd 的 current working directory
    raysonx
        3
    raysonx  
       2019-05-20 11:16:56 +08:00 via Android
    当前目录啊,兄 dei。
    你试试先 cd 到 /,再执行 /home/ec2-user/gm 还能不能找到静态文件吧
    mritd
        4
    mritd  
       2019-05-20 11:20:42 +08:00 via iPhone
    建议使用 packr2
    reus
        5
    reus  
       2019-05-20 11:26:22 +08:00
    要么在 service file 里写明工作目录

    要么在代码里用 os.Executable 取可执行文件的目录
    imherer
        6
    imherer  
    OP
       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
        7
    imherer  
    OP
       2019-05-20 11:30:41 +08:00
    @raysonx 直接用 systemctl 管理的啊。如何 cd 到当前目录?
    imherer
        8
    imherer  
    OP
       2019-05-20 11:31:13 +08:00
    @mritd packr2 是什么? 和 systemctl 类似也是进程管理工具吗?
    imherer
        9
    imherer  
    OP
       2019-05-20 11:35:01 +08:00
    @k9982874
    @lihongjie0209
    @reus
    谢谢,确实是 WorkingDirectory 的问题。 上面回复没生效是因为之前为测试修改了代码里的静态文件路径…… 😂
    mritd
        10
    mritd  
       2019-05-20 11:37:06 +08:00 via iPhone
    @imherer #8 将静态文件打包到 go 可执行文件中,实现单文件部署
    imherer
        11
    imherer  
    OP
       2019-05-20 11:42:49 +08:00
    @mritd 还可以这样啊?
    https://github.com/gobuffalo/packr
    是这个吗?
    mritd
        12
    mritd  
       2019-05-20 11:46:53 +08:00 via iPhone
    @imherer #11 对,你可用 v2 版本
    imherer
        13
    imherer  
    OP
       2019-05-20 11:51:10 +08:00
    @mritd 好的。非常感谢,我试试!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.