Takip et

Elixir-Phoenix Uygulamalarını Distillery ve edeliver ile Ubuntu 16.04 Üzerinde Otomatik Dağıtma

Elixir-Phoenix Uygulamalarını Distillery ve edeliver ile Ubuntu 16.04 Üzerinde Otomatik Dağıtma Elixir ve Phoenix Framework, yüksek performansl

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.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version