Hoe publiceer ik mijn applicatie op de server?
Het uitrollen van een applicatie op het Elixify platform kan gedaan worden door gebruik te maken van edeliver.
- Edeliver en distillery installeren
-
Verwerk onderstaande code in mix.exs en voer
mix deps.get
uit.mix.exsdef application, do: [ applications: [ ... # Add edeliver to the END of the list :edeliver ] ] defp deps do [ ... {:edeliver, "~> 1.4.0"}, {:distillery, ">= 0.8.0", warn_missing: false}, # or :exrm ] end
- prod.secret.exs
-
Plaats prod.secret.exs in ~/private/ van de build server en configureer daarin onder andere de database:
private/prod.secret.exs (op de server)config :example_website, ExampleWebsite.Repo, adapter: Ecto.Adapters.Postgres, username: "example_production", password: "...", database: "example_production", hostname: "localhost"
Zorg er voor dat in config/prod.exs de regel 'import_config "prod.secret.exs"' aangezet wordt.
- .deliver/config
-
Maak een .deliver/config en gebruik onderstaand template. De details zijn afhankelijk van de configuratie van het hostingpakket.
.deliver/configAPP="example_website" AUTO_VERSION=git-revision USING_DISTILLERY=true BUILD_HOST="build.example.com" BUILD_USER="build_user" BUILD_AT="/tmp/example_website/builds/" STAGING_HOSTS="staging.example.com" STAGING_USER="staging_user" TEST_AT="/var/www/vhosts/staging.example.com/" PRODUCTION_HOSTS="example.com" PRODUCTION_USER="example" DELIVER_TO="/var/www/vhosts/example.com/" pre_erlang_get_and_update_deps() { symlink_secrets } pre_erlang_clean_compile() { compile_assets } post_erlang_deployed_update() { symlink_vm_args } post_erlang_update() { symlink_static } post_upgrade_release() { symlink_static } symlink_secrets() { status "Creating symlinks for secrets" __sync_remote " ln -sfn '~/.private/prod.secret.exs' '$BUILD_AT/config/prod.secret.exs' " } compile_assets() { status "Preparing assets with: brunch build and phoenix.digest" __sync_remote " # runs the commands on the build host [ -f ~/.profile ] && source ~/.profile # load profile (optional) # fail if any command fails (recommended) set -e # enter the build directory on the build host (required) cd '$BUILD_AT' mkdir -p priv/static # required by the phoenix.digest task # installing npm dependencies npm install # building brunch node_modules/brunch/bin/brunch build --production # run your custom task APP='$APP' MIX_ENV='$TARGET_MIX_ENV' $MIX_CMD phoenix.digest $SILENCE " } symlink_static() { status "Creating symlinks for static assets" __remote " ln -sfn $DELIVER_TO$APP/lib/$APP$RELEASE-$VERSION/priv/static $DELIVER_TO$APP/static " } symlink_vm_args() { if [ "$TARGET_MIX_ENV" = "staging" ]; then status "Creating symlinks for staging vm.args" __remote " ln -sfn ~/private/staging.vm.args $DELIVER_TO$APP/vm.args " fi }
- .gitignore
-
Voeg .deliver/releases/ toe aan .gitignore
- release.init
-
Voer een
mix release.init
uit. - Staging
-
Voeg in
rel/config.exs
een :staging environment-blok toe. De inhoud van dit blok mag gelijk zijn aan dat van :production. Maak daarnaast ook eenconfig/staging.exs
aan, met inhoud overeenkomend aanconfig/prod.exs
. - Uitrollen
-
Uitrollen is nu mogelijk met een commando zoals onderstaand. Meer informatie is beschikbaar in de documentatie van edeliver.
$ mix edeliver update production --branch=production --mix-env=prod $ mix edeliver restart production $ mix edeliver migrate production