/yesod-blog

Code for "Building a Blog in Haskell with Yesod"

Primary LanguageHaskell

Deploy

Configure NGINX

root /path/to/yesod;
location / {
  proxy_pass http://127.0.0.1:3000/;
}

Create a service /etc/systemd/system/yesod.service

[Unit]
Description=Yesod App
After=nginx.service
After=syslog.target
After=network.target

[Service]
type=simple
Restart=always
ExecStart=/path/to/yesod/yesod-blog
WorkingDirectory=/path/to/yesod/
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=yesod
User=my_user

[Install]
WantedBy=multi-user.target

and enable it

systemctl enable yesod

Build the Docker image to compile the Yesod application

docker build -t yesod-blog .

Run the deploy script

USER=my_user HOSTNAME=my_hostname ./deploy.sh

Haskell Setup

  1. If you haven't already, install Stack
    • On POSIX systems, this is usually curl -sSL https://get.haskellstack.org/ | sh
  2. Install the yesod command line tool: stack install yesod-bin --install-ghc
  3. Build libraries: stack build

If you have trouble, refer to the Yesod Quickstart guide for additional detail.

Development

Start a development server with:

stack exec -- yesod devel

As your code changes, your site will be automatically recompiled and redeployed to localhost.

Tests

stack test --flag yesod-blog:library-only --flag yesod-blog:dev

(Because yesod devel passes the library-only and dev flags, matching those flags means you don't need to recompile between tests and development, and it disables optimization to speed up your test compile times).

Documentation

  • Read the Yesod Book online for free
  • Check Stackage for documentation on the packages in your LTS Haskell version, or search it using Hoogle. Tip: Your LTS version is in your stack.yaml file.
  • For local documentation, use:
    • stack haddock --open to generate Haddock documentation for your dependencies, and open that documentation in a browser
    • stack hoogle <function, module or type signature> to generate a Hoogle database and search for your query
  • The Yesod cookbook has sample code for various needs

Getting Help