2014-05-10 40 views
2

我正在嘗試使用Keter將Yesod應用程序部署到Ubuntu服務器。到目前爲止,這是我做了什麼:如何使用Keter部署Yesod?

  1. 使用所提供的安裝腳本
    • wget -O - https://raw.github.com/snoyberg/keter/master/setup-keter.sh | bash
  2. 運行yesod keter創建我的dev的機器捆綁在服務器上安裝海科特(運行OS X小牛)
  3. scp*.keter文件到/opt/keter/incoming服務器上

在這一點上,我認爲我應該可以進入我的域並讓應用程序正常工作,但是我看到的是「Welcome to nginx」頁面。此外,所有我在/opt/keter/log/keter/current.log是:

2014-05-10 18:21:01.48: Unpacking bundle '/opt/keter/etc/../incoming/DoDeployTest.keter' 

而且我覺得我應該有創業的過程和加載應用程序行。

我需要做什麼來部署Yesod與Keter?有沒有一個很好的教程涵蓋了這個(到目前爲止,我讀的很多人似乎有點過時,因爲沒有提到像yesod keter這樣的有用的東西,但很難說)。

我很新的Haskell/Yesod/Keter/Sysadmin的工作,所以任何幫助表示讚賞。

附錄

的耶索德項目Github repo(其香草yesod init瓦特/ + Postgres的配置keter.yaml文件)

Keter.yaml文件:

exec: ../dist/build/DoDeployTest/DoDeployTest 
args: 
    - production 
host: "http://www.yesodonrails.com" 
postgres: true 
root: ../static 

回答

2

啊,所以根據blog post introducing 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 
+0

是的。 Haskell通常編譯爲本機代碼,所以在OS X上生成的二進制文件不會在Linux上運行。 –

4

爲了確保能夠成功的最高水平,我會強烈建議您編譯並在同一平臺上同時運行海科特和你耶索德應用。由於GHC編譯是非常耗費資源的,因此建議還應在與您部署的應用程序不同的機器上編譯應用程序。看起來你已經在這麼做了(雖然在OS X上編譯並在Ubuntu服務器上部署,這是不會起作用的,正如迴應你自己的回答所描述的那樣)。

我的建議是使用Docker容器來確保一致的環境。我有一個GitHub project包含Dockerfiles號碼我一直在努力解決這個問題,我會大致描述他們在這裏做的。請注意,這個GitHub項目仍在進行中,我還沒有完美的一切。這也與我給this question的回答相似。

keter-build

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 

此配置,可用於在從海科特GitHub的項目給定的修訂打造keter二進制的容器。

keter-host

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"] 

此容器是一個自包含海科特主機。您應該確保在artifacts目錄中提供內置在keter-build容器中的keter二進制文件,以便COPY artifacts/keter /opt/keter/bin/指令將其複製到映像中。

yesod-env

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 

這是建立耶索德應用的容器。請注意,這Dockerfile是不完整的,並沒有得到它克隆應用程序的源代碼,並建立它。但是,這可能會讓你開始。

請注意,所有三個容器最終都基於相同的Docker基礎映像,因此每個容器中生成的二進制文件在其他容器中都有效。我的一些作品受到thoughtbot設計的Dockerfiles的啓發。

+0

我看到yesod-env已從回購中刪除。什麼是替代方案。如果你也可以分享你爲了獲得Keter包而運行的命令(例如,如何從我的Mac上使用它來最終在Ubuntu上運行它) – amitaibu

相關問題