And*_*yuk 29 haskell haskell-snap-framework
我已经在我的生产Ubuntu服务器上安装了Snap/Haskell(在EC2上),并检出了我的项目 - 但我该如何运行它?
我的意思是,在本地,我从命令行运行它:
project-name -p 8000
Run Code Online (Sandbox Code Playgroud)
snap是否带有它自己的web服务器(它看起来像它),如果是这样,我如何配置它作为某种守护进程运行?
有小费吗?
编辑2:
在维基上,他们说:
snap-server是一个HTTP服务器库,支持snap-core中定义的接口.
在这里,关于"你的haskell网络代码的部署/后端选项"的haskell wiki说Snap:
包括自己的服务器.请参阅Web /框架
但如何?我如何运行它自己的服务器?如果我对编程感兴趣,为什么我必须知道该死的东西的部署...
编辑:相关问题:部署使用Snap Framework的Haskell代码
And*_*yuk 25
将Snap应用程序编译为二进制文件,然后在upstart的帮助下将其作为服务运行.
编译您的webapp.为了这个例子,我们假设webapp位于/home/john/webapps/mysite:
$ cd /home/john/webapps/mysite
$ cabal install
...
Preprocessing executable 'mysite` for 'mysite-0.1'...
Installing executable(s) in /home/john/.cabal/bin
Run Code Online (Sandbox Code Playgroud)
我们可以看到,二进制文件被放入/home/john/.cabal/bin.你可以把它移到你喜欢的任何地方,但我们会把它留在那里.
在应用程序文件夹中创建一个日志,否则snap会抱怨:
$ mkdir /home/john/webapps/mysite/log
Run Code Online (Sandbox Code Playgroud)现在我们将创建一个运行我们的webapp的服务.为此,我们将使用名为upstart的 Ubuntu服务工具.
a)我们只需在/etc/init/目录中创建一个具有所需名称的conf文件来命名我们的服务.我们称之为mysite:
$ sudo vi /etc/init/mysite.conf
Run Code Online (Sandbox Code Playgroud)
b)现在让我们添加我们服务的描述:
start on startup
chdir /home/john/webapps/mysite
exec /home/john/.cabal/bin/mysite -p 80
Run Code Online (Sandbox Code Playgroud)
首先,我们说服务应该在系统启动(或启动)时运行.
其次,由于snap需要它snaplets和其他静态资源(比如我们之前创建的日志目录) - 我们告诉服务在我们项目的目录中运行.
最后,我们指定实际将作为服务运行的二进制文件:/home/john/.cabal/bin/mysite.我们将-p 80参数传递给snap webserver以使其在端口80上运行.(注意:您必须禁用所有apache和nginx服务器,以便它们不再占用该端口)
完成.您可以检查它是否正在运行并在需要时手动启动它:
initctl list | grep mysite
initctl start mysite
Run Code Online (Sandbox Code Playgroud)oza*_*man 17
是的,snap-server是它自己的服务器,这意味着你的Haskell/Snap应用程序的编译会为你留下一个可执行文件,你可以从命令行运行它来托管你的站点.就是这样,没有像apache或nginx这样的外部服务器.如果需要,您可以设置反向代理,但这取决于您.
以下是我对大部分严肃部署的处理方式:
cabal-dev/bin/myapp -p 8010 -e prod +RTS -A4M -qg1HUP需要重新启动就可以向应用程序发送信号,监控应用程序只会将其重新启动.希望这可以帮助.
既然它是Ubuntu,那么使用upstart来管理它几乎总是更好.
man 5 init
除此之外,它还允许您为服务设置依赖性层次结构."snapapp取决于mongodb,所以在mongodb运行之前不要启动snapapp" - 那种事情.
是的,snap是一个Web服务器,但我们几乎总是将nginx放在它们前面,而snap应用程序只监听localhost,并proxy_path指向服务器或其中的一组.
有趣的是,我们几乎完全转向使用Common Lisp进行$ work的新开发,设置完全相同.