「基本的な例」を参考にして、プロジェクトとGitリポジトリ を作成してください。
ここで説明している方法ですと、ローカルコンピューターの時刻ではなく、 サーバーに設定されている時刻が表示されます。
「wai-app」プロジェクト内の「src」ディレクトリの「Main.hs」を次のコードに 変更。
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run, Port)
import qualified Data.ByteString.Char8 as B8
import qualified Data.ByteString.Lazy.Char8 as LB8
import Data.CaseInsensitive (mk)
import Data.Time
import System.Environment (getEnvironment)
import Data.Maybe
app :: Application
app _ respond = do
time <- formatTime defaultTimeLocale "%Y/%m/%d/ %H:%M" <$>
getZonedTime
respond $ responseLBS
status200
[(mk $ B8.pack "Content-Type", B8.pack "text/plain")]
(LB8.pack time)
main :: IO ()
main = do
port <- getPort
run port app
getPort :: IO Port
getPort = getEnvironment >>= return . port
where
port = fromMaybe defaultPort . fmap read . lookup "PORT"
defaultPort :: Port
defaultPort = 80
「wai-app」プロジェクト内の「wai-app.cabal」の「build_depneds:」 を次のコードに変更。
build-depends: base >= 4.7 && < 5
, wai
, warp
, http-types
, case-insensitive
, bytestring
, time
ビルド
stack build
Git リポジトリにプロジェクト内のすべてのファイルを追加
git add .
追加したファイルをリポジトリに関連付ける
git commit -m "wai-app"
デプロイ
git push dokku master
初回デプロイはリモートリポジトリにHaskell環境をインストールするために時間が かかります。2回目からはそれほど時間はかかりません。
次のように表示されればデプロイは成功しています。
=====> Application deployed:
https://123.123.123.123:12345
To 123.134.134.123:wai-app
xxxxxxxxxxxxxx master -> master
「https://123.123.123.123:12345」がアプリのURLです。ブラウザで確認してください。
CentOSの場合は「https://123-123-123-123:12345」というハイフン区切りで表示されます ので、「https://123.123.123.123:12345」というドット区切りに直して確認してください。
リモートサーバーがCentOSの場合は、ファイアーウォールの設定をしなければサイトが 表示されません。
CentOSサーバにログインして次の作業をしてください。「12345」の部分は、
「:
」の後の5桁のポート番号です。この作業はUbuntuサーバーでは必要
ありません。
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --reload
デプロイに失敗する場合は次のことを試してみてください。
ファイルの記述に間違いがないか
プロジェクトはビルドしたか
.ssh/known_hosts
ファイルを削除する
次のコードを実行してリポジトリを削除して、またリポジトリを作り直す。
rm -rf .git
リモートサーバーでリポジトリを削除して、またリポジトリを作り直す。
ssh root@123.123.123.123
リモートサーバーのリポジトリを作り直した場合は、アプリケーションのポート番号が
変更されます。またリモートサーバーのリポジトリを作り直した後の、初回デプロイは、
時間がかかります。
su dokku
cd
dokku apps:destroy wai-app
wwai-app
dokku apps:create wai-app
dokku apps:list