Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir Deployment
Search
tetiana12345678
January 29, 2017
Programming
4
390
Elixir Deployment
Talk given at Elixir London meetup 2017.
tetiana12345678
January 29, 2017
Tweet
Share
More Decks by tetiana12345678
See All by tetiana12345678
Types in Elixir
tetiana12345678
0
47
The Age of Elixir
tetiana12345678
1
440
Building "learn to touch type" glove with Elixir and Arduino
tetiana12345678
1
1.4k
Using effective learning technique to learn Elixir.
tetiana12345678
1
140
elixir flashcards
tetiana12345678
1
290
Other Decks in Programming
See All in Programming
JaSST 24 九州:ワークショップ(は除く)実践!マインドマップを活用したソフトウェアテスト+活用事例
satohiroyuki
0
260
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
390
色々なIaCツールを実際に触って比較してみる
iriikeita
0
270
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
140
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
350
WEBエンジニア向けAI活用入門
sutetotanuki
0
300
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
480
Server Driven Compose With Firebase
skydoves
0
400
Macとオーディオ再生 2024/11/02
yusukeito
0
190
Realtime API 入門
riofujimon
0
110
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.3k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
How to train your dragon (web standard)
notwaldorf
88
5.7k
A Philosophy of Restraint
colly
203
16k
Facilitating Awesome Meetings
lara
49
6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
YesSQL, Process and Tooling at Scale
rocio
167
14k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
We Have a Design System, Now What?
morganepeng
50
7.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
14
1.9k
Transcript
DEPLOYING ELIXIR BY TETIANA DUSHENKIVSKA
None
HEROKU VS USING RELEASES
DEPLOYING USING RELEASES
PICK RELEASE MANAGER EXRM DISTILLERY REBAR3
None
WHERE SHOULD WE BUILD A RELEASE?
None
None
CREATING A RELEASE OF OTP APP WITH DISTILLERY
ADD DISTILLERY DEPS TO MIX.EXS {:distillery, "~> 1.0"}
FETCH DEPS $ mix deps.get
RELEASE IT! $ mix release ==> You are missing a
release config file. Run the release.init task first
DO AS DISTILLERY TOLD YOU $ mix release.init
GENERATED REL/CONFIG.EXS
None
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
PRODUCE A RELEASE MIX_ENV=prod mix compile mix release --env=prod --verbose
option for more info
YOU CAN FIND YOUR RELEASES AT _BUILD/PROD/REL/APP_NAME/RELEASES/0.0.1/
AND TARBALL IS PRODUCED! .TAR.GZ
AND YOU HAVE BUILT YOUR RELEASE!
None
...BUT SOMETIMES THINGS GO WRONG
None
None
SOLUTION 1 SHORTEN LONG MODULE NAMES $ find . -type
f -print| awk -F/ ' length($NF) > 99 '
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
GOT IT SORTED!
DEPLOYING
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
UNTAR IT # ssh to the server ssh user_name@server_name #
untar your release on prod server tar -xzf ~/my_app.tar.gz
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
A BIT OF AUTOMATION
None
GET TO KNOW YOUR SERVER
.TAR.GZ VS .DEB?
.DEB CONTAIN DEBIAN-BINARY CONTROL.TAR.GZ DATA.TAR.GZ
DEBIAN-BINARY 2.0/n
CONTROL.TAR.GZ ARCHIVED CONTROL FILE Package: my.app Version: 1.0.0 Architecture: amd64
Maintainer: Inflowmatix Priority: optional Description: Packaged on debian server
DATA.TAR.GZ THIS IS WHERE OUR APP BINARIES GO (FROM _BUILD
DIR)
LET'S SEE THE EXAMPLE
None
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 ...
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/
PREPARE DEBIAN-BINARY ... echo "2.0" >> package/debian-binary
PREPARE CONTROL.TAR.GZ ... mkdir -p package/control cd package/control printf "Package:
..." >> control; tar -zcf /my_app/package/control.tar.gz .
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
STORE .DEB IN ARTIFACTS(CIRCLECI) - type: artifacts-store path: /my_app/releases destination:
releases
DOWNLOAD RELEASE SSH TO THE SERVER $dpkg my_app_0.0.1.deb $/home/my_app/bin/my_app start
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