#eidolon

##Introduction

A image gallery service written in Haskell as a yesod webapp.

Visit the test instance at [eidolon.nek0.eu][eidolon]

##Installation

###Dependencies

####Build dependencies

A working Haskell capable environment. For that you will need `haskell-stack`
and `cabal-install`, which you can install with:

```bash
sudo apt-get install haskell-stack
```

Shouldn't stack be available through your package repositories you can get it
[here][stack].

Now you can set up your stack with `stack setup` and follow its instructions.
This will install the latest GHC Haskell compiler on your system.

Additionally to Haskell and its dependencies you will need the following
software and libraries:

* alex
* happy
* libmagick++-dev
* libpq-dev
* postgresql
* libfftw3-dev

which can be installed through

```bash
sudo apt-get install alex happy libmagick++-dev libpq-dev postgresql libmagickwand-dev
```

####Elasticsearch dependencies

Since version 0.0.5 there is an Elasticsearch integration for Eidolon. To Be
able to run eidolon , you need to install `elasticsearch` additionally with:

```bash
sudo apt-get install elasticsearch
```
On how to configure your elasticsearch server, look into the
[elasticsearch documentation][elasticdocu].

###Building

get the source with

```bash
git clone https://github.com/nek0/eidolon.git
```

build the source with

```bash
stack build
```

Everything should work automagically from there.

##Deploying

After compiling you will find an executable called `eidolon` in
`.stack-work/dist/<arch>/Cabal-<version>/build/eidolon/`, where `<arch>` is
your system architecture and `<version>` your current cabal version. Copy or
link it anywhere you want. The executable needs to be accompanied by the
folders `config` and `static` and their contents. It's best to copy them to your
desired destination.

Also check `config/settings.yml` and set the values there accrding to your
configuration. Especially the settings for elasticsearch are vital.

It may also be necessery to create a reverse proxy to your gallery. I would
recommend using [nginx](http://nginx.org/).

##Customizing

Unfortunately the gallery is not highly customizable, but you can change most of
its appearance by changing the files `static/css/style-*.css`. Especially the
default background image can be changed by replacing `static/css/img/bg.jpg`.

##Starting

You can start the gallery now by running the executable. You need to provide a
settings file as argument, normally found in `config/settings.yml`

Since eidolon will block your console, I recommend wrapping a init-script around
it. how you can do that is written in my
[blog](http://nek0.eu/posts/2014-10-23-Daemonize-a-yesod-app.html).

##Migrations

###0.0.3-0.0.4

* do not start or restart your eidolon service before migration
* run migration script from your run location (where your `static` folder with
all the images is located)
	* if you are building in a sandbox run
`runghc -package-db/full/path/to/sandbox/XXX-ghc-version-packages.conf.d
/path/to/eidolon/Migrations/0.0.3-0.0.4/Migration.hs`
		* Note: No space between the option `-package-db` and its argument
	* without sandbox: `runghc /path/to/eidolon/Migrations/0.0.3-0.0.4/Migration.hs`
* start or restart your eidolon service

###0.0.4-0.0.5

* run migration script from your run location (where your `static` folder with
all the images is located)
	* if you are building in a sandbox run `runghc
-package-db/full/path/to/sandbox/XXX-ghc-version-packages.conf.d
/path/to/eidolon/Migrations/0.0.4-0.0.5/Migration.hs`
		* Note: No space between the option `-package-db` and its argument
	* without sandbox: `runghc /path/to/eidolon/Migrations/0.0.4-0.0.5/Migration.hs`
* start or restart your eidolon service

##Acknowledgements:

* This software uses the web Framework "Yesod" by Michael Snoyman. See more at:
<http://www.yesodweb.com/>

* This software uses parts of the template "Parallelism" by n33co. see more at: <http://html5up.net/>

[eidolon]: http://eidolon.nek0.eu
[stack]: https://github.com/commercialhaskell/stack/releases
[elasticdocu]: https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html
