Elixir-Phoenix Uygulamalarını Distillery ve edeliver ile Ubuntu 16.04 Üzerinde Otomatik Dağıtma
Elixir ve Phoenix Framework, yüksek performanslı, ölçeklenebilir ve hataya dayanıklı web uygulamaları geliştirmek için güçlü bir ikili sunar. Ancak, bu tür uygulamaların dağıtım süreci, geleneksel web uygulamalarına kıyasla kendine özgü zorluklar ve fırsatlar barındırır. Erlang Sanal Makinesi (BEAM) ve OTP (Open Telecom Platform) sayesinde Elixir uygulamaları, çalışma zamanında güncellemeleri, sıfır kesintiyle dağıtımları ve yüksek erişilebilirliği doğal olarak destekler. Bu yeteneklerden tam olarak faydalanmak için Distillery ve edeliver gibi özel araçlar gereklidir. Bu makale, Elixir-Phoenix uygulamalarınızı Ubuntu 16.04 sunucularında Distillery ve edeliver kullanarak nasıl otomatik olarak dağıtacağınızı adım adım açıklamaktadır.
Giriş: Elixir/Phoenix Dağıtımının Önemi
Modern web uygulamaları için kesintisiz çalışma ve hızlı güncellemeler hayati öneme sahiptir. Elixir ve Phoenix, bu gereksinimleri karşılamak üzere tasarlanmış olsa da, bu potansiyeli gerçeğe dönüştürmek doğru dağıtım stratejileri ve araçları gerektirir. Distillery, uygulamanızı tüm bağımlılıkları ve Erlang Sanal Makinesi ile birlikte tek, taşınabilir bir pakete dönüştürürken, edeliver bu paketin uzaktaki sunuculara otomatik olarak dağıtılmasını, güncellenmesini ve yönetilmesini sağlar. Ubuntu 16.04, uzun süreli destek (LTS) sunan ve birçok sunucu ortamında yaygın olarak kullanılan bir işletim sistemi olduğu için bu rehberde hedef platform olarak seçilmiştir.
Elixir/Phoenix Dağıtımı Neden Özeldir?
Elixir uygulamaları Erlang/OTP üzerinde çalıştığı için dağıtım süreçleri diğer dillerden (örneğin Node.js, Python, Ruby) farklılık gösterir. Geleneksel olarak, bu dillerde uygulamayı çalıştırmak için sunucuda dilin kendisinin ve bağımlılık yöneticisinin (npm, pip, bundler) kurulu olması gerekir. Elixir’de ise durum farklıdır:
* Erlang Sanal Makinesi (BEAM): Elixir uygulamaları BEAM üzerinde çalışır. Bu, uygulamaların yüksek eşzamanlılık ve hataya dayanıklılık özelliklerini BEAM’den almasını sağlar. Dağıtım sırasında BEAM’in de uygun şekilde paketlenmesi veya sunucuda bulunması gerekir.
* OTP Uygulamaları: Elixir uygulamaları genellikle OTP uygulamaları olarak yapılandırılır. Bu, uygulamaların kendi yaşam döngülerini (başlatma, durdurma, yeniden başlatma) yönetebilmesi anlamına gelir.
* Sıcak Kod Değişimi (Hot Code Swapping): Erlang/Elixir, çalışan bir sistemin durmadan yeni kodla güncellenmesine olanak tanır. Bu, sıfır kesintiyle dağıtım için büyük bir potansiyel sunar.
* Bağımlılıklar: Uygulamanın bağımlılıkları da BEAM tarafından yönetilir ve dağıtım paketine dahil edilmelidir.
Bu özelikleri göz önünde bulundurarak, Distillery ve edeliver gibi araçlar, bu karmaşıklığı soyutlayarak dağıtım sürecini basitleştirir ve Elixir’in sunduğu avantajlardan tam olarak yararlanmayı mümkün kılar.
Distillery Nedir ve Neden Kullanılır?
Distillery, Elixir/Erlang uygulamalarınız için “release” (sürüm) oluşturmaya yarayan bir araçtır. Bir release, uygulamanızın kendisini, tüm bağımlılıklarını ve hatta Erlang Sanal Makinesi’ni (BEAM) içeren, kendi kendine yeten, taşınabilir bir pakettir. Bu, dağıtım sürecini önemli ölçüde basitleştirir.
Kendi Kendine Yeterli Sürümler (Self-Contained Releases)
Distillery’nin en büyük avantajı, uygulamanızı kendi kendine yeten bir paket haline getirmesidir. Bu, hedef sunucuda Erlang veya Elixir’in kurulu olmasına gerek olmadığı anlamına gelir. Tek yapmanız gereken, oluşturulan paketi sunucuya kopyalamak ve çalıştırmaktır. Bu, ortam tutarsızlıklarını azaltır ve bağımlılık yönetimi karmaşasını ortadan kaldırır.
Çalışma Zamanı Konfigürasyonu (Runtime Configuration)
Geliştirme, test ve üretim ortamları arasında farklı konfigürasyonlara sahip olmak yaygın bir durumdur. Distillery, runtime.exs (veya eski versiyonlarda config/releases.exs) dosyası aracılığıyla çalışma zamanı konfigürasyonunu destekler. Bu, paketi bir kez derleyip farklı ortam değişkenleri veya konfigürasyon dosyalarıyla farklı ortamlarda çalıştırabileceğiniz anlamına gelir. Örneğin, veritabanı bağlantı bilgileri gibi hassas verileri ortam değişkenleri aracılığıyla yönetebilirsiniz.
Temel Bir Sürüm Oluşturma
Bir Elixir projesinde Distillery’yi kullanmaya başlamak için öncelikle bağımlılık olarak eklemeniz gerekir:
# mix.exs
def deps do
[
# ... diğer bağımlılıklar
{:distillery, "~> 2.1", runtime: false} # veya daha güncel versiyon
]
end
Ardından, Phoenix uygulamaları için genellikle mix phx.gen.release komutunu çalıştırarak gerekli dosyaları oluştururuz. Bu komut, uygulamanızın çalışma zamanı konfigürasyonunu config/runtime.exs dosyasına ekler ve release ile ilgili diğer ayarları yapar.
Son olarak, bir release oluşturmak için mix release komutunu kullanırsınız:
mix release
Bu komut, projenizin _build/prod/rel/your_app dizininde bir release paketi oluşturur. Bu paket, uygulamanızın çalışması için gereken her şeyi içerir.
edeliver Nedir ve Neden Kullanılır?
edeliver, Distillery tarafından oluşturulan Elixir/Erlang release’lerini uzaktaki sunuculara dağıtmak için kullanılan bir otomasyon aracıdır. Distillery bir release oluştururken, edeliver bu release’i alır, hedeflenen sunuculara yükler, başlatır, günceller ve hatta geri alır.
Orkestrasyon Aracı
edeliver, dağıtım sürecinin orkestrasyonunu üstlenir. Bir veya birden fazla sunucuya aynı anda dağıtım yapabilir, build sunucusu (uygulamanın derlendiği yer) ile üretim sunucuları arasındaki iletişimi yönetir ve dağıtım adımlarını otomatikleştirir. Bu, manuel SSH bağlantıları ve dosya kopyalamalarının önüne geçer.
Sıfır Kesintiyle Dağıtım (Zero-Downtime Deployments)
edeliver’ın en önemli özelliklerinden biri, Elixir’in sıcak kod değişimi yeteneklerini kullanarak sıfır kesintiyle dağıtım yapabilmesidir. Yeni bir sürüm dağıtılırken, edeliver önce yeni sürümü başlatır, ardından eski sürümden yeni sürüme geçiş yapar ve son olarak eski sürümü durdurur. Bu geçiş süreci genellikle çok hızlıdır ve son kullanıcılar için herhangi bir kesinti yaşanmaz. Veritabanı migrasyonları gibi özel durumlar için de mekanizmalar sunar.
Geri Alma (Rollbacks)
Her dağıtım başarılı olmayabilir. edeliver, bir önceki çalışan sürüme kolayca geri dönme yeteneği sunar. Bu, olası sorunlarda hızlı bir şekilde kurtarma yapmanızı sağlar ve üretim ortamının istikrarını korur.
Konfigürasyon Yönetimi
edeliver, .deliver/config dosyası aracılığıyla esnek bir konfigürasyon sunar. Bu dosya, build sunucusu, üretim sunucuları, dağıtım yolu, SSH kullanıcıları, git referansı ve diğer dağıtım parametrelerini tanımlamanıza olanak tanır.
Ön Gereksinimler ve Kurulum
Dağıtım sürecine başlamadan önce hem yerel geliştirme ortamınızda hem de uzak sunucunuzda bazı ön gereksinimleri karşılamanız gerekmektedir.
Yerel Makine (Geliştirme Ortamı)
* Elixir ve Erlang: Elixir ve Erlang’ın kurulu olması. asdf veya kiex gibi versiyon yöneticileri kullanılması önerilir.
* Git: Projenizin bir Git deposunda olması ve git komutunun yüklü olması.
* SSH Anahtarları: Uzak sunuculara parola girmeden güvenli bir şekilde bağlanmak için SSH anahtar çiftinizin (public/private) oluşturulmuş ve public anahtarınızın uzak sunucudaki ~/.ssh/authorized_keys dosyasına eklenmiş olması.
Uzak Sunucu (Ubuntu 16.04)
* SSH Erişimi: Sunucuya SSH ile erişiminiz olmalı.
* Sudo Yetkileri: Gerekli yazılımları kurmak ve sistem ayarlarını yapmak için sudo yetkisine sahip bir kullanıcı.
* Gerekli Paketler:
* inotify-tools: edeliver’ın bazı dosya izleme işlemleri için gereklidir.
* nginx veya apache: Phoenix uygulamanızın önüne bir reverse proxy olarak kullanılacak.
* postgresql-client veya mysql-client: Veritabanı migrasyonlarını çalıştırmak için ilgili veritabanı istemcisi gereklidir.
* build-essential: Build sunucusu olarak kullanıyorsanız, bazı C/C++ bağımlılıklarının derlenmesi için gerekli olabilir.
* Veritabanı: Uygulamanızın kullandığı bir veritabanı (örn. PostgreSQL, MySQL) kurulu ve yapılandırılmış olmalı.
* Güvenlik Duvarı (UFW): Güvenlik için temel bir güvenlik duvarı yapılandırması (örn. SSH, HTTP/HTTPS portları açık olmalı).
Proje Ayarları
* Distillery Bağımlılığı: mix.exs dosyanızda Distillery bağımlılığını eklediğinizden emin olun.
* Phoenix Release Ayarları: Phoenix uygulamaları için mix phx.gen.release komutuyla oluşturulan config/runtime.exs dosyasını kontrol edin ve veritabanı, port gibi ayarların ortam değişkenlerinden alınacak şekilde yapılandırıldığından emin olun.
# config/runtime.exs örnek
import Config
config :my_app, MyAppWeb.Endpoint,
http: [port: System.get_env("PORT") || 4000],
url: [host: System.get_env("PHX_HOST") || "localhost", port: 443],
secret_key_base: System.get_env("SECRET_KEY_BASE"),
force_ssl: [rewrite_on: [:x_forwarded_proto]]
config :my_app, MyApp.Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("DB_USERNAME"),
password: System.get_env("DB_PASSWORD"),
hostname: System.get_env("DB_HOSTNAME") || "localhost",
database: System.get_env("DB_DATABASE"),
port: String.to_integer(System.get_env("DB_PORT") || "5432"),
pool_size: String.to_integer(System.get_env("DB_POOL_SIZE") || "10")
Bu örnekte, hassas bilgiler (veritabanı kullanıcı adı/şifresi, secret_key_base) ortam değişkenlerinden okunmaktadır.
Adım Adım Dağıtım Süreci
Şimdi Elixir-Phoenix uygulamanızı Distillery ve edeliver kullanarak Ubuntu 16.04 sunucusuna dağıtım sürecini adım adım inceleyelim.
1. Phoenix Uygulaması Oluşturma
Öncelikle basit bir Phoenix uygulaması oluşturalım. Bu örnekte, HTML ve Webpack bağımlılıklarını atlayarak daha sade bir API uygulaması gibi davranmasını sağlayabiliriz.
mix phx.new my_app --no-html --no-webpack
cd my_app
mix deps.get
Uygulamanın çalışıp çalışmadığını kontrol etmek için: mix phx.server
2. Distillery Entegrasyonu
Phoenix için Distillery ayarlarını otomatik olarak oluşturmak için phx.gen.release komutunu kullanın:
mix phx.gen.release
Bu komut, mix.exs dosyanıza Distillery bağımlılığını ekleyecek, config/runtime.exs dosyasını oluşturacak ve rel/ dizinini yapılandıracaktır. config/runtime.exs dosyasını yukarıdaki örnekteki gibi ortam değişkenlerini kullanacak şekilde düzenlediğinizden emin olun.
SECRET_KEY_BASE Oluşturma:
Üretim ortamı için benzersiz bir SECRET_KEY_BASE gereklidir. Bunu aşağıdaki komutla oluşturabilirsiniz:
mix phx.gen.secret
Bu çıktıyı not alın, sunucuda ortam değişkeni olarak ayarlayacağız.
3. edeliver Kurulumu ve Yapılandırması
edeliver’ı projenize bağımlılık olarak ekleyin:
# mix.exs
def deps do
[
# ...
{:edeliver, "~> 1.6", runtime: false} # Veya en güncel versiyon
]
end
Bağımlılıkları indirin:
mix deps.get
edeliver konfigürasyon dosyasını oluşturun:
mix edeliver.init
Bu komut, projenizin kök dizininde .deliver/config adında bir dosya oluşturacaktır. Bu dosyayı aşağıdaki gibi düzenleyin:
# .deliver/config
APP="my_app" # Uygulamanızın adı (mix.exs'teki app: ayarı ile aynı)
Git ayarları
GIT_REF="master" # Dağıtılacak branch veya tag
AUTO_VERSION=true # Her dağıtım için otomatik versiyon oluştur
Build Sunucusu Ayarları (Uygulamanın derleneceği yer)
Eğer yerel makinenizi kullanacaksanız, BUILD_HOST'u boş bırakın veya localhost yapın
BUILD_HOST="localhost" # Genellikle yerel makine veya ayrı bir build sunucusu
BUILD_USER="your_local_username" # Yerel makine kullanıcı adınız
BUILD_AT="/tmp/edeliver/my_app_build" # Build dosyalarının geçici olarak saklanacağı yer
Üretim Sunucusu Ayarları
PRODUCTION_HOSTS="your_server_ip_or_hostname" # Uzak sunucunuzun IP adresi veya hostname
PRODUCTION_USER="deployer" # Uzak sunucudaki dağıtım kullanıcısı
DELIVER_TO="/home/deployer/my_app" # Uygulamanın sunucuda konuşlanacağı dizin
SSH Ayarları
PRIVATE_KEY="~/.ssh/id_rsa" # Özel anahtarınızın yolu (varsayılanı kullanıyorsanız gerekli değil)
Release Ayarları
REPLACE_OS_VARS=true # Ortam değişkenlerinin config dosyalarında kullanılmasını sağlar
Sıfır kesinti dağıtımı için:
START_DEPLOY="true" # Dağıtım sonrası uygulamayı otomatik başlatır
UPGRADE_STRATEGY="restart" # Veya "hot" (ancak "restart" daha güvenlidir)
Veritabanı migrasyonları için:
MIGRATE=true # 'edeliver deploy release' komutu ile otomatik migrasyon çalıştırır
MIGRATE_SCRIPTS="priv/repo/migrations" # Migrasyon dosyalarının yolu
Statik dosyaları bağlama (örneğin priv/static'i kalıcı depolamaya bağlamak için)
LINK_EXPORTS="/home/deployer/my_app/priv/static" # Örneğin Nginx'in sunacağı statik dosyalar
Önemli Not: BUILD_HOST olarak localhost kullanmak, uygulamanın yerel makinenizde derleneceği anlamına gelir. Bu, yerel makinenizde Erlang/Elixir kurulu olmasını gerektirir. Daha büyük projelerde veya farklı mimarilerde, BUILD_HOST olarak ayrı bir sunucu (build sunucusu) kullanmak daha iyi bir uygulama olabilir.
4. Uzak Sunucu Ayarları (Ubuntu 16.04)
Şimdi Ubuntu 16.04 sunucunuzu hazırlayalım.
a. Dağıtım Kullanıcısı Oluşturma:
Güvenlik nedeniyle, uygulamayı çalıştırmak için özel bir deployer kullanıcısı oluşturun ve SSH anahtarınızı bu kullanıcının ~/.ssh/authorized_keys dosyasına ekleyin.
sudo adduser deployer
sudo usermod -aG sudo deployer # Eğer deployer kullanıcısına sudo yetkisi vermek isterseniz
sudo su - deployer
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Kendi makinenizdeki id_rsa.pub içeriğini buraya yapıştırın
Örneğin, yerel makinenizden: ssh-copy-id deployer@your_server_ip
exit # deployer kullanıcısından çıkın
b. Uygulama Dizini Oluşturma:
DELIVER_TO ayarında belirttiğiniz dizini oluşturun ve deployer kullanıcısına yetki verin:
sudo mkdir -p /home/deployer/my_app
sudo chown -R deployer:deployer /home/deployer/my_app
c. Gerekli Paketleri Kurma:
sudo apt-get update
sudo apt-get install -y inotify-tools nginx postgresql-client # Veya mysql-client
d. Nginx Yapılandırması (Reverse Proxy):
Nginx’i gelen HTTP/HTTPS isteklerini Phoenix uygulamanıza yönlendirecek şekilde yapılandırın. Phoenix uygulaması genellikle 4000 portunda çalışır.
sudo nano /etc/nginx/sites-available/my_app
İçeriği aşağıdaki gibi yapıştırın (alan adınızı ve sunucu IP’nizi güncelleyin):
server {
listen 80;
server_name example.com www.example.com your_server_ip;
location / {
proxy_pass http://localhost:4000; # Phoenix uygulamasının çalıştığı port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
Yapılandırmayı etkinleştirin ve Nginx’i yeniden başlatın:
sudo ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled/
sudo nginx -t # Yapılandırma sentaksını kontrol edin
sudo systemctl restart nginx # Nginx'i yeniden başlatın
e. Veritabanı Yapılandırması (PostgreSQL Örneği):
Uygulamanız için bir veritabanı ve kullanıcı oluşturun.
sudo -u postgres psql
PSQL kabuğunda:
CREATE USER my_app_user WITH PASSWORD 'my_app_password';
CREATE DATABASE my_app_prod;
GRANT ALL PRIVILEGES ON DATABASE my_app_prod TO my_app_user;
\q
f. Ortam Değişkenlerini Ayarlama:
deployer kullanıcısının .profile veya .bashrc dosyasına uygulamanızın ihtiyaç duyduğu ortam değişkenlerini ekleyin. Örneğin:
# sudo su - deployer
nano ~/.profile
Aşağıdaki satırları ekleyin (kendi değerlerinizle değiştirin):
export PORT=4000
export PHX_HOST="example.com"
export SECRET_KEY_BASE=""
export DB_USERNAME="my_app_user"
export DB_PASSWORD="my_app_password"
export DB_HOSTNAME="localhost"
export DB_DATABASE="my_app_prod"
export DB_PORT="5432"
Eğer sunucuyu aynı zamanda build sunucusu olarak kullanıyorsanız:
export MIX_ENV=prod
export LANG=en_US.UTF-8
Kaydedin ve çıkın, ardından değişiklikleri uygulamak için:
source ~/.profile
5. İlk Dağıtım
Şimdi yerel makinenizden ilk dağıtımı gerçekleştirebilirsiniz.
a. Release Oluşturma (Build):
Bu komut, uygulamanızın release’ini BUILD_HOST üzerinde derler. Eğer BUILD_HOST localhost ise, yerel makinenizde derlenecektir.
mix edeliver build release
Bu işlem biraz zaman alabilir.
b. Release’i Dağıtma (Deploy):
Bu komut, derlenmiş release’i PRODUCTION_HOSTS üzerine yükler, açar ve uygulamayı başlatır.
mix edeliver deploy release
Eğer START_DEPLOY=true ayarı .deliver/config dosyanızda varsa, uygulama otomatik olarak başlayacaktır. Aksi takdirde, mix edeliver start komutunu kullanmanız gerekebilir.
c. Veritabanı Migrasyonları:
Uygulamanızın veritabanı migrasyonlarını çalıştırmak için:
mix edeliver migrate
Bu komut, uzak sunucudaki deployer kullanıcısı altında migrasyonları çalıştıracaktır.
Artık tarayıcınızdan example.com adresine giderek uygulamanızın çalışıp çalışmadığını kontrol edebilirsiniz.
6. Güncellemeler ve Rollback
Uygulamanızda değişiklikler yaptığınızda ve bunları dağıtmak istediğinizde süreç aşağıdaki gibidir:
a. Güncelleme (Upgrade):
Kodunuzda değişiklikler yapın, Git’e commit edin ve master branch’ine push edin. Ardından sıfır kesintiyle güncelleme yapmak için upgrade komutunu kullanın:
mix edeliver upgrade
edeliver, yeni release’i derler, sunucuya yükler ve eski sürümü durdurmadan yeni sürümü başlatıp geçişi yapar.
b. Geri Alma (Rollback):
Eğer yeni dağıtımınızda bir sorun oluşursa, kolayca bir önceki çalışan sürüme geri dönebilirsiniz:
mix edeliver rollback
Bu komut, uygulamanızı bir önceki başarılı sürüme geri döndürür.
Sıkça Sorulan Sorular ve İpuçları
Ortam Değişkenleri Yönetimi
REPLACE_OS_VARS=true ayarı sayesinde Distillery release’leri, System.get_env() ile ortam değişkenlerini okuyabilir. Bu değişkenleri deployer kullanıcısının .profile veya .bashrc dosyasına eklemek yaygın bir yöntemdir. Ancak, hassas bilgileri (veritabanı şifreleri) doğrudan ortam değişkenleri olarak saklamak yerine, HashiCorp Vault gibi sır yönetim araçları kullanmak daha güvenli olabilir.
Veritabanı Migrasyonları
mix edeliver migrate komutu, MIGRATE=true olarak ayarlandığında deploy release veya upgrade komutlarıyla birlikte çalıştırılabilir. Migrasyonların idempotent olması (birden fazla kez çalıştırıldığında sorun çıkarmaması) çok önemlidir, çünkü dağıtım süreçleri sırasında yanlışlıkla tekrar çalıştırılabilirler.
Sıfır Kesinti (Zero-Downtime) Dağıtım
edeliver’ın upgrade komutu, yeni sürümü eski sürümle paralel olarak başlatır ve ardından bağlantıları yeni sürüme yönlendirir. Bu, kısa bir süre için her iki sürümün de çalışır durumda olduğu anlamına gelir. Bu geçiş, uygulamanızın durumunu koruyarak kesintisiz bir deneyim sunar.
Log Yönetimi
Uygulamanızın loglarını takip etmek için mix edeliver remote "tail -f log/phoenix.log" gibi komutları kullanabilirsiniz. Üretim ortamlarında, logları merkezi bir sisteme (örn. ELK Stack, Grafana Loki) göndermek için logger bağımlılıkları (örn. lager, logfmt) veya systemd-journald ile entegrasyon düşünülmelidir. Ayrıca, logrotate ile log dosyalarının boyutunu yönetmek önemlidir.
Güvenlik İpuçları
* SSH Anahtar Tabanlı Kimlik Doğrulama: Daima parola yerine SSH anahtarları kullanın.
* Minimum Yetki Prensibi: deployer kullanıcısına sadece uygulamayı çalıştırmak ve yönetmek için gerekli minimum yetkileri verin. sudo yetkisini dikkatli kullanın.
* Güvenlik Duvarı (UFW): Sunucunuzda sadece gerekli portları (SSH, HTTP, HTTPS) açın.
* Hassas Bilgiler: Veritabanı şifreleri, API anahtarları gibi hassas bilgileri doğrudan kod içinde veya versiyon kontrolünde tutmayın. Ortam değişkenleri veya sır yönetim araçları kullanın.
Ubuntu 16.04 Özel Notlar
Ubuntu 16.04, systemd kullanan ilk LTS sürümüdür. Bu nedenle, uygulamayı bir systemd servisi olarak çalıştırmak, otomatik başlatma ve hata durumunda yeniden başlatma gibi özellikler için iyi bir seçenektir. edeliver, uygulama başlatma ve durdurma işlemlerini kendisi yönettiği için genellikle systemd servisi doğrudan kullanılmaz, ancak uygulamanın genel sağlığını izlemek için systemd‘den faydalanılabilir.
Sonuç
Elixir ve Phoenix uygulamalarını Distillery ve edeliver kullanarak Ubuntu 16.04 üzerinde dağıtmak, modern web uygulamalarının gerektirdiği otomasyon, güvenilirlik ve sıfır kesinti özelliklerini sağlamak için güçlü ve etkili bir yöntemdir. Distillery, kendi kendine yeten, taşınabilir release’ler oluşturarak dağıtım karmaşıklığını azaltırken, edeliver bu release’lerin uzaktaki sunuculara otomatik olarak dağıtılmasını, güncellenmesini ve yönetilmesini sağlar.
Bu rehberde anlatılan adımları takip ederek, Elixir-Phoenix uygulamalarınız için sağlam bir CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) sürecinin temelini atmış olursunuz. Doğru yapılandırma ve stratejilerle, Elixir’in sunduğu performans ve hataya dayanıklılık avantajlarını üretim ortamında tam olarak kullanabilir, kullanıcılarınıza kesintisiz ve hızlı bir deneyim sunabilirsiniz. Gelecekte, bu süreci Jenkins, GitLab CI veya GitHub Actions gibi araçlarla entegre ederek tamamen otomatik hale getirmek, geliştirme ve dağıtım döngülerinizi daha da hızlandıracaktır.
