Slide 1

Slide 1 text

DEPLOYING ELIXIR BY TETIANA DUSHENKIVSKA

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

HEROKU VS USING RELEASES

Slide 4

Slide 4 text

DEPLOYING USING RELEASES

Slide 5

Slide 5 text

PICK RELEASE MANAGER EXRM DISTILLERY REBAR3

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

WHERE SHOULD WE BUILD A RELEASE?

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

CREATING A RELEASE OF OTP APP WITH DISTILLERY

Slide 11

Slide 11 text

ADD DISTILLERY DEPS TO MIX.EXS {:distillery, "~> 1.0"}

Slide 12

Slide 12 text

FETCH DEPS $ mix deps.get

Slide 13

Slide 13 text

RELEASE IT! $ mix release ==> You are missing a release config file. Run the release.init task first

Slide 14

Slide 14 text

DO AS DISTILLERY TOLD YOU $ mix release.init

Slide 15

Slide 15 text

GENERATED REL/CONFIG.EXS

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

REL/CONFIG.EXS #/rel/config file content ... include_ertc: false #needs to have erlang installed. ... release :app_name do set version: current_version(:app_name) end

Slide 18

Slide 18 text

PRODUCE A RELEASE MIX_ENV=prod mix compile mix release --env=prod --verbose option for more info

Slide 19

Slide 19 text

YOU CAN FIND YOUR RELEASES AT _BUILD/PROD/REL/APP_NAME/RELEASES/0.0.1/

Slide 20

Slide 20 text

AND TARBALL IS PRODUCED! .TAR.GZ

Slide 21

Slide 21 text

AND YOU HAVE BUILT YOUR RELEASE!

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

...BUT SOMETIMES THINGS GO WRONG

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

SOLUTION 1 SHORTEN LONG MODULE NAMES $ find . -type f -print| awk -F/ ' length($NF) > 99 '

Slide 27

Slide 27 text

SOLUTION 2 PRODUCE TARBAL MANUALLY MIX_ENV=prod mix compile mix release --env=prod --no-tar cd /my_app/_build/prod tar -cvzf my_app.tar.gz

Slide 28

Slide 28 text

GOT IT SORTED!

Slide 29

Slide 29 text

DEPLOYING

Slide 30

Slide 30 text

POSSIBILITY 1 MANUALLY COPY .TAR.GZ TO THE PROD SERVER # copy release to prod server $ scp -i _build/prod/rel/my_app/releases/0.0.1\ /my_app.tar.gz user_name@server_name:/home/my_app/releases/0.0. my_app.tar.gz

Slide 31

Slide 31 text

UNTAR IT # ssh to the server ssh user_name@server_name # untar your release on prod server tar -xzf ~/my_app.tar.gz

Slide 32

Slide 32 text

CHECK IT'S WORKING # start it on prod server my_app/bin/my_app console # you should see the logs # start it as a daemon on prod server my_app/bin/my_app start my_app/bin/my_app ping # > pong

Slide 33

Slide 33 text

A BIT OF AUTOMATION

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

GET TO KNOW YOUR SERVER

Slide 36

Slide 36 text

.TAR.GZ VS .DEB?

Slide 37

Slide 37 text

.DEB CONTAIN DEBIAN-BINARY CONTROL.TAR.GZ DATA.TAR.GZ

Slide 38

Slide 38 text

DEBIAN-BINARY 2.0/n

Slide 39

Slide 39 text

CONTROL.TAR.GZ ARCHIVED CONTROL FILE Package: my.app Version: 1.0.0 Architecture: amd64 Maintainer: Inflowmatix Priority: optional Description: Packaged on debian server

Slide 40

Slide 40 text

DATA.TAR.GZ THIS IS WHERE OUR APP BINARIES GO (FROM _BUILD DIR)

Slide 41

Slide 41 text

LET'S SEE THE EXAMPLE

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

CIRCLECI(2.0) BUILD RELEASE(NO TAR) cd my_app if [ "${CIRCLE_BRANCH}" == "master" ]; then MIX_ENV=prod mix compile mix release --env=prod --no-tar --verbose ...

Slide 44

Slide 44 text

PREPARE DATA.TAR.GZ ... cd /my_app chmod 755 _build/prod/rel/my_app/bin/my_app ... mkdir -p /my_app/package/ cd /my_app/_build/prod/ tar --xform="s%^%/home/my_app/%"\ -cvzf /my_app/package/data.tar.gz rel/

Slide 45

Slide 45 text

PREPARE DEBIAN-BINARY ... echo "2.0" >> package/debian-binary

Slide 46

Slide 46 text

PREPARE CONTROL.TAR.GZ ... mkdir -p package/control cd package/control printf "Package: ..." >> control; tar -zcf /my_app/package/control.tar.gz .

Slide 47

Slide 47 text

CREATE .DEB PACKAGE ... cd /my_app/ version=$(git describe | sed 's/v//'); mkdir releases ar -rc releases/my_app_$version.deb\ package/debian-binary package/control.tar.gz\ package/data.tar.gz rm -rf package/ fi

Slide 48

Slide 48 text

STORE .DEB IN ARTIFACTS(CIRCLECI) - type: artifacts-store path: /my_app/releases destination: releases

Slide 49

Slide 49 text

DOWNLOAD RELEASE SSH TO THE SERVER $dpkg my_app_0.0.1.deb $/home/my_app/bin/my_app start

Slide 50

Slide 50 text

SUMMARY LOT'S OF OPTIONS 3 PIECES NEEDED TO PRODUCE .DEB PACKAGE COULD BE FRUSTRATING, BUT DON'T GIVE UP! CHECK WHERE YOU ARE BUILDING A RELEASE