我尝试使用Keter将Yesod应用程序部署到Ubuntu服务器。到目前为止,这就是我所做的:
wget -O - https://raw.github.com/snoyberg/keter/master/setup-keter.sh | bash
yesod keter
在我的开发机器上创建一个捆绑包(运行OS X Mavericks)scp
将*.keter
文件放入服务器上的/opt/keter/incoming
此时,我认为我应该可以访问我的域并让应用程序正常运行,但我看到了#34;欢迎使用nginx"而是页面。此外,/opt/keter/log/keter/current.log
中的所有内容都是:
2014-05-10 18:21:01.48: Unpacking bundle '/opt/keter/etc/../incoming/DoDeployTest.keter'
我认为我应该对启动流程和加载应用程序有所了解。
使用Keter部署Yesod需要做什么?是否有一个很好的教程涵盖了这一点(到目前为止,很多我阅读的内容似乎有点过时,因为没有提到有用的东西,如yesod keter
;很难说但是。)
我对Haskell / Yesod / Keter / Sysadmin工作很陌生,所以感谢任何帮助。
附录:
Yesod项目的 Github repo(其香草yesod init
w / postgres +配置keter.yaml
文件)
Keter.yaml文件:
exec: ../dist/build/DoDeployTest/DoDeployTest
args:
- production
host: "http://www.yesodonrails.com"
postgres: true
root: ../static
答案 0 :(得分:4)
为了确保最大程度的成功,我强烈建议您在同一平台上编译和运行Keter和Yesod应用程序。建议还要在与您部署的计算机不同的计算机上编译应用程序,因为GHC编译非常耗费资源。看起来你已经在做这个了(尽管在OS X上进行编译并在Ubuntu服务器上进行部署,这不会起作用,如回复你自己的答案所述)。
我的建议是使用Docker容器来确保一致的环境。我有一个GitHub project包含了一些Dockerfiles
我一直在努力解决这个问题,我将大致描述他们在这里所做的事情。请注意,这个GitHub项目仍在进行中,我还没有完美的一切。这也与我给this question的答案相似。
FROM haskell:latest
RUN apt-get update && apt-get install -y \
git
RUN mkdir /src
RUN cd src && \
git clone https://github.com/snoyberg/keter && \
cd keter && \
git checkout e8b5a3fd5e14dfca466f8acff2a02f0415fceeb0
WORKDIR /src/keter
RUN cabal update
RUN cabal install keter
这将配置一个容器,该容器可用于在Keter GitHub项目的给定修订版本中构建keter
二进制文件。
FROM debian
RUN apt-get update && apt-get install -y \
ca-certificates \
libgmp-dev \
nano \
postgresql
COPY artifacts/keter /opt/keter/bin/
COPY artifacts/keter-config.yaml /opt/keter/etc/
EXPOSE 80
CMD ["/opt/keter/bin/keter", "/opt/keter/etc/keter-config.yaml"]
此容器是一个独立的Keter主机。您应确保keter
容器中内置的keter-build
二进制文件在artifacts
目录中可用,以便COPY artifacts/keter /opt/keter/bin/
指令将其复制到映像中。
FROM haskell:latest
RUN apt-get update && apt-get install -y \
ca-certificates \
git \
nano \
wget
RUN echo 'deb http://download.fpcomplete.com/debian/jessie stable main' > /etc/apt/sources.list.d/fpco.list
RUN wget -q -O- https://s3.amazonaws.com/download.fpcomplete.com/debian/fpco.key | apt-key add -
RUN apt-get update && apt-get install -y \
stack
这是用于构建Yesod应用程序的容器。请注意,此Dockerfile
不完整,并且还没有克隆应用程序的源代码并构建它。但是,这可能会让你开始。
请注意,所有三个容器最终都基于相同的debian
Docker基础映像,因此每个容器中生成的二进制文件很有可能在其他容器中有效。我的一些作品受到thoughtbot设计的Dockerfiles的启发。
答案 1 :(得分:2)
啊,基于blog post introducing Keter的建议,我试图手动在*.keter
文件中运行可执行文件。这样做产生了“无法执行二进制文件”的消息。我怀疑这是因为我最初在Mac上进行编译,并部署到Ubuntu实例(我在尝试部署到Heroku时遇到同样的问题)。
发现这个的过程(可能稍微不准确):
cp /opt/keter/incoming/DoDeployTest.keter /tmp
cd /tmp
mv DoDeployTest.keter DoDeployTest.tar.gz
gunzip DoDeployTest.tar.gz
tar xvf DoDeployTest.tar
# run executable
/dist/build/appname/appname