Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Elixir Deployment
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tetiana12345678
January 29, 2017
Programming
440
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elixir Deployment
Talk given at Elixir London meetup 2017.
tetiana12345678
January 29, 2017
Transcript
50 slides
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
More Decks by tetiana12345678
See All by tetiana12345678
Types in Elixir
tetiana12345678
0
90
The Age of Elixir
tetiana12345678
1
490
Building "learn to touch type" glove with Elixir and Arduino
tetiana12345678
1
1.6k
Using effective learning technique to learn Elixir.
tetiana12345678
1
170
elixir flashcards
tetiana12345678
1
340
Other Decks in Programming
See All in Programming
仕様駆動開発入門 (何を作るかを先に決めて渡す) | 目指せ Kiro マスター 05
inariku
PRO
2
130
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
260
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
4.1k
Getting Started with Vibe Coding
miccheng
0
220
Event is what happens
moro
2
4.5k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
180
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
210
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
980
Seven New Principles of Software Engineering
yegor256
0
480
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
180
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.7k
From π to Pie charts
rasagy
1
440
Technical Leadership for Architectural Decision Making
baasie
4
640
Deep Space Network (abreviated)
tonyrice
0
410
Between Models and Reality
mayunak
4
570
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7.1k
Practical Orchestrator
shlominoach
192
12k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
480