Yesod是一个基于纯函数式编程语言Haskell的Web框架。它专为高效开发类型安全,RESTful和高性能Web应用程序而设计。本指南介绍了在Debian 7(Wheezy)上部署Yesod和Nginx Web服务器,MySQL数据库所需的过程。
注意本指南中所需的步骤需要root权限。请确保以root身份或使用sudo前缀运行以下步骤。有关权限的更多信息,请参阅我们的用户和组指南。
在开始安装和配置下述组件之前,请确保已按照“ 入门指南”中的说明设置主机名。这是检查方法。
由于Yesod是使用Haskell编程语言构建的,因此Haskell软件包是初步安装。Web框架Yesod需要来自Haskell平台的两个软件包。lib*-dev
Haskell模块需要这两个包mysql
。如果您想使用SQLite,那么您不需要安装它们。
apt-get install haskell-platform libpcre3-dev libmysqlclient-dev
Yesod是一个大型框架,它依赖于许多其他软件包。我们将使用cabal来管理所有这些。Cabal是Haskell社区中央包存档Hackage的包管理器。因为Hackage上的所有包都是由社区维护的,所以依赖关系没有得到很好的保护。所以你可能会遇到所谓的cabal依赖地狱问题。
为了避免这个问题,Yesod的维护者创建了一个名为yesod-platform的元数据包。它的依赖项的版本号是固定的,所以你不会遇到“阴谋集团”。另一方面,固定版本号可能会导致其他问题,尤其是当您还使用cabal管理其他大型项目时(例如pandoc,用于转换标记格式的Haskell库)。解决此问题的方法非常简单:如果要管理多个大型项目,请为每个项目创建新用户,然后将其安装到用户的主文件夹中。
.cabal
在yesod的主文件夹中找到一个新文件夹。安装的cabal
所有程序,所有库及其所有文档的配置文件都cabal
将放在此文件夹中。特别是,安装了新的程序$HOME/.cabal/bin
。要使用它们,您可以将此文件夹添加到yesod的PATH:
echo PATH=\$HOME/.cabal/bin:\$PATH >> .bashrc source .bashrcyesod-platform
和yesod-bin
包:
cabal install --reorder-goals --max-backjumps=-1 yesod-platform yesod-bin
该yesod-bin
软件包为您提供了脚手架,开发服务器和一些简单的代码生成助手yesod-platform
。我们将在下一节中使用它来构建新站点的脚手架。
该标志--reorder-goals
试图根据某些启发式重新排序目标。它可能使回溯更快。如果你不添加这个标志,cabal
可能会进入某些“坏”搜索分支,并在这里浪费大量的时间和内存。如果您的计算机没有足够的内存,甚至可能cabal
无法解决依赖关系,并会给您一条错误消息。
该参数--max-backjumps
设置最大跳回次数。默认值为200.我们将其设置为-1,这意味着无限制的回溯。如果您不添加此参数,cabal
可能会失败,如果它无法在200步回溯中找到解决方案。
在Linode 1G上构建yesod-platform
和yesod-bin
打包需要大约20分钟。要开始开发Yesod网站,首先要构建一个脚手架。在开发中,scaffold是占位符或示例集,它由所选框架或编译器的默认值构成。然后开发人员可以覆盖脚手架网站。
$HOME/myblog/cabal.sandbox.config
,并在其中创建本地cabal环境$HOME/myblog/.cabal-sandbox
。yesod-platform
可能比我们在上一节中安装的版本更新,因为在沙箱中,cabal
在较小的树上搜索解决方案,因此结果可能会更好。如果您想构建另一个站点,只需返回$HOME
文件夹,然后yesod init
再次发布。由于沙盒机制,不同的站点不会相互影响。
在测试站点的脚手架之前,您需要在MySQL中创建一个用户和几个数据库。“yesod”命令为MySQL生成了一个配置文件,位于$HOME/myblog/config/mysql.yml
。看一看。
$ HOME / myblog /配置/ mysql.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Default: &defaults user: myblog password: myblog host: localhost port: 3306 database: myblog poolsize: 10 ... Production: database: myblog_production poolsize: 100 <<: *defaults |
---|
您的站点可以在不同的环境中启动,例如开发,测试,分段和生产,您可以为它们提供不同的配置。本Default
节给出了四种不同环境的配置。您可以使用自己的主机,端口,用户名,密码,数据库等修改此部分。例如,如果在生产环境中需要不同的设置,则可以Production
先在该部分中编写新设置,然后再导入默认设置<<: *defaults
。
我们不需要修改此配置文件,它是可以接受的。因此,您只需要创建一个密码为“myblog”的用户“myblog”,以及四个数据库“myblog”,“myblog_testing”,“myblog_staging”和“myblog_production”。请记住将“myblog”替换为项目名称。
www.yoursite.com
的FQDN 在哪里。要停止它,只需按Enter
。如果您的Linode有防火墙,3000
则可能无法从外部访问该端口,因此您将无法在http://www.yoursite.com:3000/上看到您的站点。此端口仅用于测试或开发,因此请勿在防火墙上打开它。相反,您可以在Linode上设置SSH隧道,并通过此隧道在http://www.yoursite.com:3000/上查看您的站点。有关详细信息,请检查使用您的Linode设置SSH隧道以进行安全浏览。
您可能已经注意到我们还没有配置Nginx。实际上,Yesod应用程序包含一个名为Warp的http服务器,它使用Haskell编写,运行时间非常快。如果没有安装Apache或Nginx等http服务器,您可以运行独立的Yesod应用程序。此功能类似于Node.js上的Express框架。
您的第一个Yesod网站的初始设置已完成。要开始Yesod网站的更高级开发,请阅读Yesod Book以获取更多详细信息。
Warp是一个快速的http服务器,但它缺少一些高级功能,如虚拟主机,负载平衡器或SSL代理,因此我们需要Nginx更灵活地为我们的站点提供服务。在本节中,我们将介绍一种将您的站点部署到Nginx的方法。
$HOME/myblog
:
cabal clean cabal configure cabal build
您可以将它们视为make distclean && ./configure && make
从源代码构建Unix包的标准方法。但是不要跑到cabal install
这里!此命令将您的应用程序安装到其沙箱中,这不是我们想要的。cabal build
,您的应用程序(myblog)将被构建并放入$HOME/myblog/dist/build/myblog/
。这是我们要部署的程序。您可以将目录移动到任何位置。
您还需要将两个文件$HOME/myblog/config
,并$HOME/myblog/static
在同一目录。
让我们创建一个文件夹/var
来部署这些文件。您需要root权限才能发出以下命令:
mkdir /var/myblog chmod 755 /var/myblog/ chown yesod.yesod /var/myblog
然后复制文件:
cp $HOME/myblog/dist/build/myblog/myblog /var/myblog cp -R $HOME/myblog/config /var/myblog cp -R $HOME/myblog/static /var/myblog/var/myblog/config/settings.yml
。此文件具有与之相同的结构mysql.yml
。Default
各种环境都有一节和其他四节。我们只会/var/myblog
在Production
环境中运行,所以我们只需要修改这个设置文件的最后三行:
/var/myblog/config/settings.yml1 2 3
Production: approot: "http://www.yoursite.com" <<: *defaults这里www.yoursite.com应该被您的FQDN取代。您也可以在此处使用其他虚拟主机名,例如myblog.yoursite.com。只需确保它与在步骤5中传递给Nginx的那个相同。/var/opt/myblog/log/myblog.log
。
如果您需要在启动时运行站点,请发出以下命令将其添加到Debian系统的默认运行级别:
update-rc.d myblog defaults创建文件/etc/nginx/sites-available/myblog
:
在/ etc / nginx的/网站可用/ myblog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | server { listen 80; server_name www.yoursite.com; location / { proxy_pass http://127.0.0.1:3000; } location /static { root /var/myblog; expires max; } } |
---|
本server_name
应该是你的FQDN,或者你在写的虚拟主机名/var/myblog/config/settings.yml
。该位置/static
告诉Nginx在哪里查找带有url的文件http://server_name/static/*
。强烈建议的优化是从单独的域名提供静态文件,从而绕过cookie传输开销。您可以在部署Yesod Book的Webapp一章中找到有关此优化的更多详细信息。
将上述文件链接到/etc/nginx/sites-enabled
,然后重新启动nginx
:
ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled
service nginx restart
您可以在http://www.yoursite.com查看。
使用Nginx和MySQL的Yesod的安装和配置已经完成。
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。