运行 没有 GHC 和 cabal 的 Keter

Run Keter without GHC and cabal

我有一台服务器,想在不安装 GHC 和 Cabal 的情况下部署我的 Yesod 应用程序。我不确定是否可行:一位老师告诉我,我必须先在我的机器上编译 Keter,然后,将 keter 可执行文件放在服务器上,但我不确定该怎么做。

要构建 Keter,首先您需要从基于以下 Dockerfile:

的映像派生的 GitHub repository. Then you'll need to set up a Haskell build environment and use cabal build or cabal install to build the sources. Personally, I use a 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 命令行拉下项目的所有依赖项并编译整个项目。完成后,您可以从 ~/.cabal/bin/keter.

获取 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 可执行文件。

公平警告:整个过程相当复杂。我仍在努力自己调整确切的细节。祝你好运!