我想使用亚马逊网络服务部署一个使用Yesod制作的系统。但是我找不到一个好的教程或步骤来完成这个过程。
寻找能够处理Haskell的Web主机说Amazon EC2是最好的选择。但它没有说明如何操作或提供链接。
此外,它还有一个评论说我可以将我的S3链接到EC2。
wget -q -O- https://s3.amazonaws.com/download.fpcomplete.com/ubuntu/fpco.key | sudo apt-key add -
echo 'deb http://download.fpcomplete.com/ubuntu/trusty stable main'|sudo tee /etc/apt/sources.list.d/fpco.list
sudo apt-get update && sudo apt-get install stack -y
您可以使用stack ghci
来启动Haskell REPL。
stack new my-project yesod-sqlite && cd my-project
stack install yesod-bin cabal-install --install-ghc
stack build
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
stack exec -- yesod devel
您可以启动Web浏览器使用http://localhost:3000
检查。
根据http://www.yesodweb.com/book/deploying-your-webapp,我需要三个组件来部署到其他机器。
stack build
命令会给出可执行文件的位置:
my-project-0.0.0: install
Installing library in
/home/a/my-project/.stack-work/install/x86_64-linux/lts-3.13/7.10.2/lib/x86_64-linux-ghc-7.10.2/my-project-0.0.0-Khn8lQEgR1HARzYGStlvPe
Installing executable(s) in
/home/a/my-project/.stack-work/install/x86_64-linux/lts-3.13/7.10.2/bin
Registering my-project-0.0.0...
/home/a/my-project/.stack-work/install/x86_64-linux/lts-3.13/7.10.2/bin
。我可以将文件(可执行文件、静态文件和配置文件)复制到 ~/deployment
目录中检查 Yesod 是否正常工作。├── config
│ ├── client_session_key.aes
...
│ └── test-settings.yml
├── my-project
└── static
...
在 config/settings.yml 中更改端口号。
port: "_env:PORT:3002"
approot: "_env:APPROOT:http://localhost:3002"
./my_project settings.yml
。http://localhost:3002
。# the IP(s) on which your node server is running. I chose port 3000.
upstream yesod {
server 127.0.0.1:3002;
keepalive 8;
}
# the nginx server instance
server {
listen 0.0.0.0:80;
server_name yesod.example.com;
access_log /var/log/nginx/access_yesod.log;
error_log /var/log/nginx/error_yesod.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://yesod/;
proxy_redirect off;
}
location /excluded {
return 403;
}
}
Yesod的书中有一个完整的章节介绍如何部署你的Yesod应用http://www.yesodweb.com/book/deploying-your-webapp
在那里推荐使用Amazon,所以在Amazon上应该没有任何问题。如果你有关于keter的更具体问题,请将它们作为新问题发布。
sudo start mysite
操作时,出现了错误。这是怎么回事? - Ryan Monrealyesod keter
,然后会有一个 .keter
文件,你需要将其 scp
到你的亚马逊实例上。 - Konstantine Rybnikovconfig/keter.yml
文件放置在其中,其内容如下:https://gist.github.com/k-bx/056b07a85eec3e01ae8d(编辑您的主机名和IP),然后将其打包回.tar.gz文件,将该.tar.gz文件重命名为.keter。 - Konstantine Rybnikov
sudo apt-get install haskell-platform
来安装Haskell平台。之后,请按照http://www.yesodweb.com/page/quickstart进行操作。 - Tobias Brandt