如何正确configurationWeb服务(Ubuntu 12.04)?

我有一些web项目(网站),运行它自己的networking服务器(在我的情况下,我正在使用Haskell的快照服务器 – 但这是无关的这个问题的目的)。

我如何让它在系统的端口80上运行以向公众提供内容? 我特别感兴趣的是:

  1. 系统中的哪个位置放? /var/blah ? 有没有在Linux的这个标准的地方?
  2. 什么用户和/或组应该运行? 我知道在80年代你必须成为根。
  3. 该文件夹(步骤1)需要具备哪种权限/所有权?
  4. 如何自动启动我的服务,并保持它运行后,我退出我的SSH连接? (例如,在Windows中,这是用sc.exe完成的)

任何帮助表示赞赏,或在正确的方向点。 谢谢!

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的新贵来完成它。

  1. 创build/etc/init/mysite.conf (以root身份)
  2. 添加服务(工作)说明:

     chdir /home/john/webapps/mysite exec /home/john/webapps/mysite/bin/snap-app -p 80 
  3. 如果需要,请检查是否正在运行并手动启动:

     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+xyes或是保存(它是vi编辑器),你可以重新启动并查看。 实际重新启动是启动实例。 现在,如果不停止它,更改cron作业或closures计算机,这将在端口80上运行。

它也可能与项目的执行者一起工作,但是这是经过testing的。

Upstart版本也有效,但这是一个简单的。