登录
首页 >  Golang >  Go问答

将 Golang 作为 www-data 运行

来源:Golang技术栈

时间:2023-04-18 14:59:44 462浏览 收藏

golang学习网今天将给大家带来《将 Golang 作为 www-data 运行》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到golang等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

当我运行 Node HTTP 服务器应用程序时,我通常会调用自定义函数

function runAsWWW()
{
 try 
 {
  process.setgid('www-data');
  process.setuid('www-data');
 } catch (err) 
 {
  console.error('Cowardly refusal to keep the process alive as root.');
  process.exit(1);
 }
}

server.listen(8080,'localhost',null,runAsWWW);

所以服务器实际上是以www-data用户身份运行的,以提供更好的安全性。当我通过发布启动 Golang Web 服务器时,我可以做类似的事情go run index.go吗?

正确答案

扩展@ JimB 的答案:

使用进程主管以特定用户身份运行您的应用程序(并处理重启/崩溃、日志重定向等)。setuid并且setgid对于多线程应用程序来说是普遍的坏主意。

使用您的操作系统的进程管理器(Upstart、systemd、sysvinit)或独立的进程管理器(Supervisor、runit、monit 等)。

这是主管的示例:

[program:yourapp]
command=/home/yourappuser/bin/yourapp # the location of your app
autostart=true
autorestart=true
startretries=10
user=yourappuser # the user your app should run as (i.e. *not* root!)
directory=/srv/www/yourapp.com/ # where your application runs from
environment=APP_SETTINGS="/srv/www/yourapp.com/prod.toml" # environmental variables
redirect_stderr=true
stdout_logfile=/var/log/supervisor/yourapp.log # the name of the log file.
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10

进一步:如果您不是反向代理并且您的 Go 应用程序需要绑定到端口 setcap - 例如:setcap cap_net_bind_service=+ep /home/yourappuser/bin/yourapp

PS:我写[了一篇](http://elithrar.github.io/article/running-go-applications-in-the- background/)关于如何使用 Supervisor 运行 Go 应用的小文章(从“我没有安装 Supervisor”开始)。

到这里,我们也就讲完了《将 Golang 作为 www-data 运行》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>