如何正确配置 Web 服务(ubuntu 12.04)?

如何正确配置 Web 服务(ubuntu 12.04)?

我有一些网络项目(网站)运行它自己的网络服务器(在我的情况下,我使用 Haskell 的 snap 服务器 - 但这对于这个问题的目的无关)。

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

  1. 我应该把它放在系统的哪里??/var/blahLinux 中是否有一个标准位置?
  2. 服务应以哪个用户和/或组的身份运行?我知道要在 80 上运行,您必须是 root。
  3. 该文件夹(在步骤 1 中)需要具有什么样的权限/所有权?
  4. 如何自动启动我的服务,并在退出 ssh 连接后保持其运行?(例如,在 Windows 中,可以使用以下命令完成此操作:执行程序

任何帮助或指明正确方向的帮助都值得感激。谢谢!

PS:如果有帮助的话,我正在使用 Ubuntu 12.04 64位。

答案1

您可以将其放在任何地方。/usr/bin 是服务器的标准位置;/var/www 是站点内容或 CGI 的标准位置。

编写良好的服务将以 root 身份启动,绑定到端口 80,并将权限授予权限较低的用户或无人。这就是它使用特权端口的方式。如果它使用 SSL 证书,它也应该以 root 身份读取它们,然后放弃权限。因此,您应该以 root 身份启动它。

webroot(通常是 /var/www)需要为守护进程放弃权限的任何用户提供读取和执行权限。无论如何,对于您在网络上提供的内容而言,全球可读和全球可执行通常不是一个坏主意。

您可以使用 init 脚本自动启动它。有一个 C 调用 daemon()(至少在 GNU C 中),它会导致进程关闭其终端并忽略 hups,这意味着它将在您的 ssh 会话关闭并且 tty 消失后运行。如果不是这样写的,您可以在命令后加上一个与号 (&) 以使其在后台运行,并且它将在您的 shell 死机后继续运行。

答案2

我使用 Ubuntu 的 upstart 来完成它。

  1. 创建/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,因此我认为这是可以的设置。

答案3

我也在 Ubuntu 12.04 上使用 snap 服务器,一个简单的,我不知道是否“更好”,解决方案可能是设置这样的 cron 作业。

sudo crontab -e

sudo如果你确实想要在端口 80 上,那么添加此行

@reboot cd /home/path/yourapp; sudo /home/path/.cabal/bin/yourapp -p  80

Ctrl+x并按yesy保存它(它是 vi 编辑器),然后您可以重新启动并查看。实际的重新启动是启动实例。现在,如果您不停止它、更改 cron 作业或关闭计算机,它将在端口 80 上运行。

它可能也适用于项目的执行,但这已经过测试。

Upstart 版本也可以使用,但是比较简单。

相关内容