我有一台服务器,想要部署我的Yesod应用程序,而无需安装GHC和Cabal。我不确定是否可能:老师告诉我,我必须首先在我的机器中编译Keter,然后在服务器上放置keter
可执行文件,但我不知道该怎么做。
答案 0 :(得分:2)
要构建Keter,首先您需要克隆其GitHub repository中的源代码。然后,您需要设置Haskell构建环境并使用cabal build
或cabal install
来构建源。就个人而言,我使用基于以下Dockerfile
的图像派生的Docker容器:
FROM haskell:7.10.2
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
ENTRYPOINT /bin/bash
这是一张图片,其中包含在特定版本中检出的Keter源代码,其中包含构建所有内容所需的最小GHC工具链。 cabal
命令行拉下所有项目的依赖项并编译整个项目。完成此操作后,您可以从keter
获取~/.cabal/bin/keter
可执行文件。
即使您选择不使用Docker,此文件也会让您大致了解如何设置环境。
现在你已经编译了Keter,你可以在另一个Docker容器中运行它。这里大致了解相应图像的Dockerfile
可能是什么样的:
FROM debian
RUN apt-get update && apt-get install -y \
libgmp-dev \
nano \
postgresql
COPY keter /opt/keter/bin/
COPY keter-config.yaml /opt/keter/etc/
EXPOSE 80
CMD ["/opt/keter/bin/keter", "/opt/keter/etc/keter-config.yaml"]
这将采用基本的Debian映像并在其上安装一组最小的包。然后,它将keter
可执行文件和配置文件复制到映像中。如果您随后从生成的图像中运行容器,它将启动keter
可执行文件。
公平警告:整个过程非常复杂。我还在努力调整确切的细节。祝你好运!