我有一些web项目(网站),运行它自己的networking服务器(在我的情况下,我正在使用Haskell的快照服务器 – 但这是无关的这个问题的目的)。
我如何让它在系统的端口80上运行以向公众提供内容? 我特别感兴趣的是:
/var/blah ? 有没有在Linux的这个标准的地方? 任何帮助表示赞赏,或在正确的方向点。 谢谢!
PS:我使用Ubuntu 12.04 64位,如果有帮助。
你可以把它放在任何地方。 / usr / bin是服务器的标准位置; / var / www是网站内容或CGI的标准位置。
编写良好的服务将以root用户身份启动,并绑定到端口80,并将权限下放到权限较低的用户或任何人。 这是它如何使用特权端口。 如果它使用SSL证书,它也应该读取它们作为根,然后删除权限。 因此,您应该以root身份启动它。
webroot(通常是/ var / www)需要read + execute可用于你的守护进程放弃权限的用户。 无论如何,在networking上提供的东西,世界可读和全球执行都不是一个坏主意。
您可以使用init脚本自动启动它。 有一个C调用守护进程()(至less在GNU C)导致进程摆脱其terminal和忽略hups,这意味着它会运行后,你的SSH会话closures和tty消失。 如果不是这样写的,你可以用一个&符后缀命令让它在后台运行,并且在你的shell死后保持不变。
我使用Ubuntu的新贵来完成它。
/etc/init/mysite.conf (以root身份) 添加服务(工作)说明:
chdir /home/john/webapps/mysite exec /home/john/webapps/mysite/bin/snap-app -p 80
如果需要,请检查是否正在运行并手动启动:
initctl list | grep mysite initctl start mysite
请注意,在这里我使用了upstart的chdir指令来告诉它从该目录运行一个进程。 这是必要的,因为该目录包含二进制文件(在bin文件夹中)的所有必要模板(html等)。
该项目由用户john拥有,所以我认为这是确定的设置。
我也在Ubuntu 12.04上使用一个简单的服务器,我不知道如果“更好”,解决scheme可能会设置一个这样的cron工作。
sudo crontab -e
sudo如果你真的想在80端口,然后添加这一行
@reboot cd /home/path/yourapp; sudo /home/path/.cabal/bin/yourapp -p 80
Ctrl+x和yes或是保存(它是vi编辑器),你可以重新启动并查看。 实际重新启动是启动实例。 现在,如果不停止它,更改cron作业或closures计算机,这将在端口80上运行。
它也可能与项目的执行者一起工作,但是这是经过testing的。
Upstart版本也有效,但这是一个简单的。