Takip et

Ubuntu 14.04 Üzerinde Passenger ve Apache ile Rails Uygulaması Dağıtımı: Kapsamlı Bir Rehber

Ubuntu 14.

Ubuntu 14.04 Üzerinde Passenger ve Apache ile Rails Uygulaması Dağıtımı: Kapsamlı Bir Rehber

Modern web uygulamaları geliştirmenin hızla popülerleştiği günümüzde, Ruby on Rails çerçevesi, hızlı prototipleme ve sağlam mimarisi sayesinde birçok geliştiricinin tercihi haline gelmiştir. Bir Rails uygulamasını geliştirme ortamından canlı bir sunucuya taşımak, uygulamanın dünya ile buluştuğu kritik bir adımdır. Bu süreçte Apache web sunucusu ve Phusion Passenger uygulama sunucusu, performans, kararlılık ve kolay yönetim sunan güçlü bir kombinasyon oluşturur. Bu kapsamlı rehber, Ubuntu 14.04 işletim sistemi üzerinde Phusion Passenger ve Apache kullanarak bir Rails uygulamasını nasıl dağıtacağınızı adım adım anlatmaktadır. Her ne kadar Ubuntu 14.04 nispeten eski bir sürüm olsa da, bu rehber, belirli bir proje veya eski altyapılar nedeniyle bu sürümü kullanmak zorunda olan geliştiriciler ve sistem yöneticileri için hayati bilgiler sunmaktadır.

Bu rehberde, bir Rails uygulamasının gereksinimlerinden başlayarak, Ruby ve veritabanı kurulumu, uygulamanın sunucuya aktarılması, Apache ve Passenger’ın entegrasyonu ve son olarak sanal host yapılandırması gibi tüm adımları detaylı bir şekilde ele alacağız. Amacımız, uygulamanızın üretim ortamında sorunsuz ve güvenli bir şekilde çalışmasını sağlamak için gerekli tüm bilgi ve komutları sağlamaktır.

Ön Gereksinimler

Bir Rails uygulamasını sunucuya dağıtmaya başlamadan önce, bazı temel gereksinimleri karşılamanız gerekmektedir. Bu gereksinimler, sorunsuz bir kurulum süreci için kritik öneme sahiptir.

* Ubuntu 14.04 Sunucusu: Bu rehber, Ubuntu 14.04 LTS (Trusty Tahr) sürümünü hedeflemektedir. Sunucuya SSH erişiminizin ve sudo yetkilerine sahip bir kullanıcı hesabınızın olması gerekmektedir.
* Etki Alanı Adı (Domain Name): Uygulamanıza internet üzerinden erişmek için bir etki alanı adına (örneğin, ornekuygulama.com) ihtiyacınız olacaktır. Bu etki alanı adının DNS kayıtlarının, sunucunuzun IP adresine işaret ettiğinden emin olun. Bu adım zorunlu olmasa da, üretim ortamı için şiddetle tavsiye edilir.
* Git: Uygulamanızın kaynak kodunu sunucuya aktarmak için Git sürüm kontrol sistemine ihtiyacınız olacaktır.
* Temel Linux Komut Bilgisi: SSH aracılığıyla sunucuya bağlanma, dosya sistemi navigasyonu, dosya düzenleme ve paket yönetimi gibi temel Linux komutlarına aşina olmanız beklenmektedir.
* Rails Uygulaması: Dağıtılacak çalışan bir Ruby on Rails uygulamasına sahip olmanız gerekmektedir. Uygulamanızın Gemfile dosyasında pg (PostgreSQL için) veya mysql2 (MySQL için) gibi üretim veritabanı adaptörlerinin bulunduğundan emin olun.

Bu ön gereksinimleri sağladıktan sonra, bir sonraki adıma geçmeye hazırsınız demektir: sunucunuzu Rails uygulamanız için hazırlamak.

Sistem Güncellemesi ve Temel Bağımlılıkların Kurulumu

Sunucunuzu güncel tutmak ve gerekli sistem bağımlılıklarını kurmak, herhangi bir yazılım dağıtımının ilk ve en önemli adımıdır. Bu, güvenlik açıklarını kapatır ve yazılımların doğru şekilde derlenmesi için gerekli kütüphaneleri sağlar.

İlk olarak, sunucunuzdaki paket listesini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:

sudo apt-get update
sudo apt-get upgrade -y

Bu komutlar, sisteminizin güncel olduğundan emin olacaktır. Ardından, Ruby, veritabanı sürücüleri ve diğer bileşenlerin derlenmesi için gerekli olan geliştirme araçlarını ve kütüphanelerini kurmalıyız.

sudo apt-get install -y build-essential libssl-dev libreadline-dev zlib1g-dev libyaml-dev \
libsqlite3-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev \
nodejs npm # Node.js ve NPM, Rails Asset Pipeline için gereklidir

* build-essential: C/C++ derleyicileri ve make gibi temel geliştirme araçlarını içerir.
* libssl-dev: OpenSSL kütüphanesi geliştirme başlıklarını sağlar.
* libreadline-dev: Readline kütüphanesi için geliştirme başlıkları.
* zlib1g-dev: Zlib sıkıştırma kütüphanesi için geliştirme başlıkları.
* libyaml-dev: YAML ayrıştırma kütüphanesi için geliştirme başlıkları.
* libsqlite3-dev: SQLite3 veritabanı kütüphanesi için geliştirme başlıkları (geliştirme ortamı için kullanışlıdır, üretimde genellikle PostgreSQL veya MySQL tercih edilir).
* libxml2-dev ve libxslt1-dev: XML ve XSLT işleme kütüphaneleri için geliştirme başlıkları (bazı gem’ler için gereklidir).
* libcurl4-openssl-dev: Curl kütüphanesi için geliştirme başlıkları (HTTP istekleri için).
* libffi-dev: Foreign Function Interface kütüphanesi için geliştirme başlıkları (bazı gem’ler için gereklidir).
* nodejs ve npm: Rails 4 ve üzeri sürümlerde Asset Pipeline, JavaScript sıkıştırma ve derleme işlemleri için Node.js’e ihtiyaç duyar.

Bu adımları tamamladıktan sonra, sisteminiz Ruby ve Rails uygulamaları için gerekli temel bağımlılıklara sahip olacaktır.

Ruby Kurulumu (rbenv ile)

Ruby’yi doğrudan sistem paket yöneticisiyle kurmak yerine, rbenv veya RVM gibi bir Ruby versiyon yöneticisi kullanmak, farklı Ruby sürümleri arasında kolayca geçiş yapmanızı ve sistem Ruby’sini etkilemeden uygulama bağımlılıklarını yönetmenizi sağlar. Bu rehberde rbenv kullanımını tercih edeceğiz, çünkü genellikle daha hafif ve daha az invaziv kabul edilir.

rbenv ve ruby-build Kurulumu

İlk olarak, rbenv ve eklentisi olan ruby-build‘u kurmanız gerekmektedir. ruby-build, rbenv‘in Ruby sürümlerini derlemesini ve kurmasını sağlar.

# rbenv'i klonlayın
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

rbenv'i PATH'e ekleyin ve başlatın

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc source ~/.bashrc

ruby-build'u klonlayın (rbenv'in bir eklentisi)

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc source ~/.bashrc

Bu komutlar, rbenv ve ruby-build‘u kullanıcı dizininize kurar ve kabuğunuzun başlangıçta rbenv‘i yüklemesini sağlayacak şekilde .bashrc dosyanızı günceller. Değişikliklerin etkili olması için source ~/.bashrc komutunu çalıştırmanız veya SSH oturumunuzu kapatıp yeniden açmanız gerekebilir.

Ruby Sürümü Kurulumu

Şimdi, uygulamanızın gerektirdiği Ruby sürümünü kurabilirsiniz. Uygulamanızın Gemfile dosyasında belirtilen veya geliştirme ortamınızda kullandığınız Ruby sürümünü kullanmanız önemlidir. Örneğin, Ruby 2.3.8 kurmak için:

rbenv install 2.3.8
rbenv global 2.3.8
rbenv rehash

* rbenv install 2.3.8: Belirtilen Ruby sürümünü indirir ve derler. Bu işlem biraz zaman alabilir.
* rbenv global 2.3.8: Bu Ruby sürümünü sistem genelinde varsayılan olarak ayarlar.
* rbenv rehash: Yeni kurulan Ruby sürümünü ve gem yürütülebilir dosyalarını rbenv’in PATH’ine ekler.

Kurulumun başarılı olup olmadığını kontrol etmek için:

ruby -v

Bu komut, kurduğunuz Ruby sürümünü göstermelidir.

Bundler Kurulumu

Ruby uygulamaları için bağımlılıkları yöneten Bundler gem’ini kurmanız gerekmektedir:

gem install bundler
rbenv rehash

Artık sunucunuzda doğru Ruby sürümü ve Bundler yüklü. Bu, Rails uygulamanızın bağımlılıklarını yönetmek için temel oluşturur.

Veritabanı Kurulumu

Rails uygulamaları genellikle bir ilişkisel veritabanına ihtiyaç duyar. PostgreSQL ve MySQL, Rails uygulamaları için en popüler iki seçenektir. Bu rehberde PostgreSQL’i tercih edeceğiz, ancak MySQL için de kısa bir genel bakış sunacağız.

PostgreSQL Kurulumu

PostgreSQL, güçlü, açık kaynaklı ve güvenilir bir ilişkisel veritabanı yönetim sistemidir. Rails uygulamalarıyla mükemmel bir uyum sağlar.

sudo apt-get install -y postgresql postgresql-contrib libpq-dev

* postgresql: PostgreSQL sunucu paketidir.
* postgresql-contrib: PostgreSQL için ek modüller ve araçlar içerir.
* libpq-dev: PostgreSQL C kütüphanesi geliştirme başlıklarıdır, pg gem’inin derlenmesi için gereklidir.

Kurulumdan sonra, PostgreSQL varsayılan olarak postgres adlı bir sistem kullanıcısı ve bu kullanıcıya ait bir rol oluşturur. Uygulamanız için özel bir veritabanı kullanıcısı ve veritabanı oluşturmanız gerekmektedir.

# postgres kullanıcısına geçiş yapın
sudo -u postgres psql

Yeni bir veritabanı kullanıcısı oluşturun

Komut isteminde şifre belirlemeniz istenecektir.

CREATE USER your_app_user WITH PASSWORD 'your_secure_password';

Yeni bir veritabanı oluşturun ve sahibini belirleyin

CREATE DATABASE your_app_production OWNER your_app_user;

Bağlantıları kısıtlamak isterseniz, izinleri düzenleyebilirsiniz.

Örneğin, sadece yerel bağlantılara izin vermek için:

REVOKE ALL ON DATABASE your_app_production FROM PUBLIC;

GRANT ALL PRIVILEGES ON DATABASE your_app_production TO your_app_user;

psql'den çıkın

\q

Veritabanı kullanıcınız ve veritabanınız hazır. Uygulamanızın config/database.yml dosyasını bu bilgilerle güncelleyeceksiniz.

MySQL Kurulumu (Alternatif)

Eğer uygulamanız MySQL kullanıyorsa, aşağıdaki komutlarla MySQL sunucusunu ve gerekli kütüphaneleri kurabilirsiniz:

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

Kurulum sırasında MySQL root şifresi belirlemeniz istenecektir. Daha sonra, PostgreSQL’de yaptığınız gibi bir veritabanı kullanıcısı ve veritabanı oluşturmanız gerekecektir.

# MySQL'e root kullanıcısı ile bağlanın
sudo mysql -u root -p

Yeni bir veritabanı kullanıcısı oluşturun

CREATE USER 'your_app_user'@'localhost' IDENTIFIED BY 'your_secure_password';

Yeni bir veritabanı oluşturun

CREATE DATABASE your_app_production;

Kullanıcıya veritabanı üzerinde tüm yetkileri verin

GRANT ALL PRIVILEGES ON your_app_production.* TO 'your_app_user'@'localhost'; FLUSH PRIVILEGES;

MySQL'den çıkın

EXIT;

Hangi veritabanını kullanırsanız kullanın, uygulamanızın database.yml dosyasını üretim ortamı için doğru şekilde yapılandırmanız gerekecektir.

Rails Uygulamasının Sunucuya Aktarılması

Artık sunucunuz hazır olduğuna göre, Rails uygulamanızın kodunu sunucuya aktarabilir ve gerekli bağımlılıkları yükleyebilirsiniz.

Uygulama Klonlama

Uygulamanızı genellikle /var/www dizini altına klonlamak en yaygın yöntemdir. Bu dizin, web sunucusu tarafından erişilebilir olması gereken web siteleri için standart bir konumdur.

# /var/www dizinini oluşturun (eğer yoksa)
sudo mkdir -p /var/www

Uygulamanızı klonlayın

sudo git clone /var/www/your_app_name

Klonlanan dizinin sahibini değiştirin

Bu adım, uygulama dosyaları üzerinde işlem yapabilmek için önemlidir.

Genellikle uygulama için ayrı bir kullanıcı oluşturmak ve bu kullanıcıya sahip olmak daha güvenlidir.

Ancak basit dağıtımlar için mevcut SSH kullanıcınızı veya www-data'yı kullanabilirsiniz.

Burada, SSH kullanıcınıza sahip olmanızı varsayıyoruz:

sudo chown -R $USER:$USER /var/www/your_app_name

Uygulama dizinine geçiş yapın

cd /var/www/your_app_name

yerine uygulamanızın Git deposunun URL’sini (örn. git@github.com:kullaniciadi/uygulama.git) ve your_app_name yerine uygulamanızın adını yazmalısınız.

Bağımlılıkların Yüklenmesi

Uygulama dizinine geçtikten sonra, bundle install komutunu kullanarak uygulamanızın Gemfile’ında belirtilen tüm gem’leri yüklemelisiniz. Üretim ortamı için, geliştirme ve test bağımlılıklarını yüklememek önemlidir.

bundle install --deployment --without development test

* --deployment: Gem’leri sistem genelinde değil, uygulama dizini içinde vendor/bundle altına yükler. Bu, uygulamalar arası çakışmaları önler ve daha izole bir ortam sağlar.
* --without development test: Gemfile dosyasındaki development ve test gruplarındaki gem’leri yüklemez.

Veritabanı Yapılandırması

Uygulamanızın config/database.yml dosyasını üretim ortamı için doğru veritabanı bilgileriyle düzenlemeniz gerekmektedir.

# config/database.yml (örnek)
production:
  adapter: postgresql
  encoding: unicode
  pool: 5
  database: your_app_production
  username: your_app_user
  password: your_secure_password
  host: localhost

Bu dosyayı düzenlemek için nano veya vim gibi bir metin düzenleyici kullanabilirsiniz:

nano config/database.yml

your_app_production, your_app_user ve your_secure_password değerlerini kendi veritabanı ayarlarınızla değiştirmeyi unutmayın.

Ortam Değişkenleri ve Gizli Anahtarlar

Rails uygulamaları, güvenlik için SECRET_KEY_BASE gibi gizli anahtarlara ihtiyaç duyar. Ayrıca, API anahtarları veya diğer hassas bilgiler gibi ortam değişkenlerini de yönetmeniz gerekebilir.

SECRET_KEY_BASE‘i oluşturmak için:

RAILS_ENV=production bundle exec rake secret

Bu komutun çıktısını kopyalayın. Ardından, bu anahtarı uygulamanızın config/secrets.yml dosyasına eklemelisiniz:

# config/secrets.yml
production:
  secret_key_base: 

Diğer ortam değişkenlerini yönetmek için, Passenger’ın Apache yapılandırmasında PassengerAppEnv direktifi ile production ortamını belirtmenin yanı sıra, PassengerEnv direktifi ile ek değişkenler tanımlayabilir veya config/application.yml gibi bir dosya kullanıp bunu .gitignore‘a ekleyebilirsiniz.

Asset Precompilation

Rails uygulamaları, JavaScript ve CSS dosyalarını (asset’leri) üretim ortamında performans için derler ve sıkıştırır. Bu işlem, genellikle dağıtım sırasında yapılır.

RAILS_ENV=production bundle exec rake assets:precompile

Bu komut, uygulamanızın public/assets dizinine sıkıştırılmış ve parmak izli (fingerprinted) asset dosyalarını oluşturacaktır.

Veritabanı Oluşturma ve Göç Etme

Son olarak, veritabanınızı oluşturmanız ve şemayı uygulamanızın model tanımlarına göre yapılandırmanız gerekmektedir.

RAILS_ENV=production bundle exec rake db:create
RAILS_ENV=production bundle exec rake db:migrate

Eğer uygulamanızda başlangıç verileri (seed data) varsa, bunları da yükleyebilirsiniz:

RAILS_ENV=production bundle exec rake db:seed

Dizin İzinleri

Web sunucusunun uygulamanızın belirli dizinlerine (örneğin, public, log, tmp) yazma erişimine sahip olması gerekebilir. Apache’nin varsayılan kullanıcısı www-data‘dır.

# Log ve tmp dizinlerine www-data kullanıcısına yazma izni verin
sudo chown -R $USER:www-data /var/www/your_app_name
sudo chmod -R g+w /var/www/your_app_name/log
sudo chmod -R g+w /var/www/your_app_name/tmp

public dizininin da www-data tarafından okunabilir olduğundan emin olun

sudo chmod -R o+r /var/www/your_app_name/public

Bu adım, uygulamanızın log dosyalarını yazabilmesi, geçici dosyalar oluşturabilmesi ve web sunucusunun statik asset’lere erişebilmesi için kritik öneme sahiptir.

Apache Web Sunucusunun Kurulumu ve Yapılandırılması

Apache HTTP Sunucusu, dünyanın en popüler web sunucularından biridir ve Rails uygulamaları için sağlam bir platform sağlar.

Apache Kurulumu

Apache’yi kurmak oldukça basittir:

sudo apt-get install -y apache2

Kurulumdan sonra Apache otomatik olarak başlayacaktır. Tarayıcınızda sunucunuzun IP adresine giderek varsayılan Apache “It works!” sayfasını görmelisiniz.

Gerekli Apache Modülleri

Rails uygulamaları genellikle URL yeniden yazma (rewrite) ve HTTP başlıklarını yönetme gibi işlevler için belirli Apache modüllerine ihtiyaç duyar.

sudo a2enmod rewrite
sudo a2enmod headers

* rewrite: URL yeniden yazma kurallarını etkinleştirir. Rails’in router’ı için gereklidir.
* headers: HTTP başlıklarını ayarlamanıza olanak tanır. Güvenlik başlıkları veya CORS ayarları için kullanışlıdır.

Modülleri etkinleştirdikten sonra Apache’yi yeniden başlatmanız gerekir:

sudo service apache2 restart

Passenger Kurulumu ve Apache ile Entegrasyonu

Phusion Passenger, Rails uygulamalarını Apache veya Nginx gibi web sunucularıyla entegre etmek için tasarlanmış, kullanımı kolay bir uygulama sunucusudur.

Passenger Gem Kurulumu

Passenger’ı bir Ruby gem’i olarak kurmanız gerekmektedir:

gem install passenger
rbenv rehash

Bu komut, Passenger gem’ini kurar. Ancak bu, henüz Apache ile entegre olduğu anlamına gelmez.

Passenger Apache Modülü Kurulumu

Passenger’ı Apache ile entegre etmek için özel bir kurulum betiği çalıştırmanız gerekmektedir:

sudo passenger-install-apache2-module

Bu betik, Apache modülünü derleyecek ve yapılandırma talimatlarını gösterecektir. Yükleyici size bir dizi soru sorabilir; genellikle varsayılan seçenekleri kabul edebilirsiniz. Kurulumun sonunda, Passenger Apache modülünü yüklemek için Apache yapılandırma dosyasına eklemeniz gereken bir dizi satır gösterecektir. Bu çıktıyı dikkatlice kopyalayın.

Örnek çıktıya benzer bir şey göreceksiniz:

LoadModule passenger_module /home/your_user/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/passenger-5.x.x/buildout/apache2/mod_passenger.so

  PassengerRoot /home/your_user/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/passenger-5.x.x
  PassengerDefaultRuby /home/your_user/.rbenv/versions/2.3.8/bin/ruby

Bu satırları Apache’nin modül yapılandırma dizinine yeni bir dosya olarak eklemelisiniz.

sudo nano /etc/apache2/mods-available/passenger.conf

Kopyaladığınız satırları bu dosyaya yapıştırın ve kaydedin. Dosyanın içeriği aşağıdaki gibi olacaktır (yollar kendi sisteminize göre değişebilir):

# /etc/apache2/mods-available/passenger.conf
LoadModule passenger_module /home/your_user/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/passenger-5.x.x/buildout/apache2/mod_passenger.so

  PassengerRoot /home/your_user/.rbenv/versions/2.3.8/lib/ruby/gems/2.3.0/gems/passenger-5.x.x
  PassengerDefaultRuby /home/your_user/.rbenv/versions/2.3.8/bin/ruby

Passenger modülünü Apache için etkinleştirin:

sudo a2enmod passenger

Ve Apache’yi yeniden başlatın:

sudo service apache2 restart

Bu adımlarla Passenger, Apache ile başarıyla entegre edilmiş olmalıdır.

Apache Sanal Host Yapılandırması

Uygulamanızın belirli bir etki alanı adıyla (domain name) erişilebilir olması için Apache’de bir sanal host (Virtual Host) yapılandırması oluşturmanız gerekmektedir.

Yeni bir sanal host yapılandırma dosyası oluşturun:

sudo nano /etc/apache2/sites-available/your_app_name.conf

Bu dosyaya aşağıdaki yapılandırmayı ekleyin. Kendi etki alanı adınızı ve uygulama dizininizi doğru şekilde değiştirdiğinizden emin olun.

# /etc/apache2/sites-available/your_app_name.conf

    ServerName your_domain.com
    ServerAlias www.your_domain.com
    DocumentRoot /var/www/your_app_name/public

    # Rails uygulamanızın kök dizini
    # Passenger bu dizini kullanarak uygulamanızı başlatacaktır
    # PassengerAppRoot /var/www/your_app_name (PassengerDefaultRuby tanımlandığı için genellikle gereksizdir)

    # Uygulamanın çalışacağı Rails ortamı
    PassengerAppEnv production

    
        # Apache'nin .htaccess dosyalarını işlemesine izin verir
        AllowOverride all
        # Dizindeki dosyaların listelenmesini engeller
        Options -MultiViews
        # Apache'nin bu dizine erişmesine izin verir
        Require all granted
    

    # Hata ve erişim logları
    ErrorLog ${APACHE_LOG_DIR}/your_app_name_error.log
    CustomLog ${APACHE_LOG_DIR}/your_app_name_access.log combined

* ServerName: Uygulamanızın birincil etki alanı adıdır.
* ServerAlias: Uygulamanız için alternatif etki alanı adlarıdır (örneğin, www ön eki ile).
* DocumentRoot: Rails uygulamanızın public dizinini işaret etmelidir. Bu, web sunucusunun statik varlıklara ve uygulamanın giriş noktasına erişmesini sağlar.
* PassengerAppEnv production: Passenger’a Rails uygulamasını production ortamında başlatmasını söyler. Bu, Rails’in üretim modunda çalışmasını sağlar.
* bloğu, Apache’nin public dizini için özel kuralları tanımlar. AllowOverride all Rails’in .htaccess dosyasındaki yönlendirme kurallarını kullanmasına izin verir.

Sanal hostu etkinleştirin ve varsayılan sanal hostu devre dışı bırakın (eğer sadece bu uygulamayı barındırıyorsanız):

sudo a2ensite your_app_name.conf
sudo a2dissite 000-default.conf # Varsayılan Apache sayfasını devre dışı bırakır

Son olarak, Apache’yi yeniden başlatarak değişikliklerin etkili olmasını sağlayın:

sudo service apache2 restart

Şimdi tarayıcınızdan your_domain.com adresine giderek Rails uygulamanızın çalıştığını görmelisiniz!

Güvenlik İpuçları ve Ek Ayarlar

Uygulamanız canlıya alındığında, güvenlik ve bakım için bazı ek adımlar atmak önemlidir.

SSL/TLS Kurulumu (HTTPS)

Tüm modern web uygulamaları için HTTPS kullanmak zorunludur. Let’s Encrypt ve Certbot, ücretsiz ve otomatikleştirilmiş SSL sertifikaları sağlar. Ubuntu 14.04 için Certbot kurulumu biraz farklı olabilir çünkü varsayılan depolarda olmayabilir.

# Certbot PPA'sını ekleyin
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt-get update

Certbot'u ve Apache eklentisini kurun

sudo apt-get install -y certbot python-certbot-apache

Sertifikayı alın ve Apache yapılandırmasını otomatik olarak güncelleyin

sudo certbot --apache -d your_domain.com -d www.your_domain.com

Certbot, sertifikayı alacak ve Apache sanal host yapılandırmanızı otomatik olarak HTTPS’ye yönlendirecek şekilde güncelleyecektir. Ayrıca sertifikaların otomatik yenilenmesini de ayarlayacaktır.

Güvenlik Duvarı (UFW)

Sunucunuzun güvenliğini sağlamak için bir güvenlik duvarı (örneğin, UFW – Uncomplicated Firewall) kullanmak kritik öneme sahiptir.

sudo ufw enable
sudo ufw allow ssh # SSH erişimine izin ver (port 22)
sudo ufw allow http # HTTP erişimine izin ver (port 80)
sudo ufw allow https # HTTPS erişimine izin ver (port 443)
sudo ufw status # Güvenlik duvarı durumunu kontrol edin

Bu, sunucunuza sadece gerekli portlar üzerinden erişilmesini sağlar.

Log Yönetimi

Uygulamanızın ve web sunucunuzun loglarını düzenli olarak kontrol etmek, sorun giderme ve performans izleme için hayati öneme sahiptir.

* Rails Uygulama Logları: /var/www/your_app_name/log/production.log
* Apache Hata Logları: /var/log/apache2/error.log
* Apache Erişim Logları: /var/log/apache2/access.log veya sanal host yapılandırmanızda belirttiğiniz özel log dosyaları (your_app_name_error.log, your_app_name_access.log).

Bu log dosyalarını tail -f komutuyla canlı olarak izleyebilirsiniz:

tail -f /var/www/your_app_name/log/production.log

Otomatik Başlatma

Apache ve Passenger, sunucunuz yeniden başlatıldığında otomatik olarak başlamalıdır. Ubuntu 14.04’te Apache varsayılan olarak bu şekilde yapılandırılmıştır. Passenger, Apache modülü olarak çalıştığı için, Apache başladığında o da otomatik olarak çalışacaktır.

Ortam Değişkenleri

Hassas bilgileri (veritabanı şifreleri, API anahtarları vb.) doğrudan kod içinde tutmak yerine ortam değişkenleri olarak yönetmek daha güvenlidir. Passenger, sanal host yapılandırmanıza PassengerEnv direktifi ekleyerek ortam değişkenlerini ayarlamanıza olanak tanır:

# /etc/apache2/sites-available/your_app_name.conf içine

    # ... diğer ayarlar ...
    PassengerAppEnv production
    PassengerEnv RAILS_MASTER_KEY your_master_key_here # Rails 5.2+ credentials için
    PassengerEnv AWS_ACCESS_KEY_ID your_aws_access_key
    # ...

Veya daha güvenli bir yöntem olarak, config/secrets.yml dosyasını Rails 5.2+ credentials.yml.enc veya dotenv gem’i ile .env dosyası kullanarak yönetmek daha iyi bir yaklaşımdır. Passenger, .env dosyalarını otomatik olarak yüklemez, bu nedenle uygulama kodunuzda bu dosyayı yüklemeyi sağlamanız veya ortam değişkenlerini Apache yapılandırmasında belirtmeniz gerekir.

Sorun Giderme

Dağıtım sürecinde sorunlarla karşılaşmak oldukça yaygındır. İşte karşılaşabileceğiniz bazı yaygın sorunlar ve çözüm yolları:

* “It works!” sayfası görünüyor veya 404 hatası alıyorum:
* Apache sanal host yapılandırmanızın doğru olduğundan emin olun (/etc/apache2/sites-available/your_app_name.conf).
* a2ensite your_app_name.conf komutuyla sanal hostunuzu etkinleştirdiğinizden emin olun.
* 000-default.conf gibi diğer sanal hostları devre dışı bırakın (a2dissite 000-default.conf).
* Apache’yi yeniden başlattığınızdan emin olun (sudo service apache2 restart).
* DocumentRoot‘un /var/www/your_app_name/public‘i işaret ettiğinden emin olun.
* 500 Internal Server Error veya Beyaz Sayfa:
* En olası neden, uygulamanızın kendisinde bir hatadır. Rails production.log dosyasını kontrol edin: tail -f /var/www/your_app_name/log/production.log.
* Apache error.log dosyasını kontrol edin: tail -f /var/log/apache2/error.log.
* Dosya izinlerini kontrol edin. www-data kullanıcısının log, tmp ve public dizinlerine yazma ve okuma erişimi olduğundan emin olun.
* Veritabanı bağlantı bilgilerinin config/database.yml dosyasında doğru olduğundan emin olun.
* SECRET_KEY_BASE‘in config/secrets.yml dosyasında ayarlandığından emin olun.
* bundle install --deployment komutunu doğru şekilde çalıştırdığınızdan ve tüm gem’lerin yüklü olduğundan emin olun.
* RAILS_ENV=production bundle exec rake assets:precompile komutunu çalıştırdığınızdan emin olun.
* Passenger ile ilgili hatalar:
* passenger-install-apache2-module çıktısını passenger.conf dosyasına doğru kopyaladığınızdan emin olun.
* Passenger modülünü etkinleştirdiğinizden emin olun: sudo a2enmod passenger.
* Apache’yi yeniden başlattığınızdan emin olun.
* PassengerDefaultRuby yolunun doğru Ruby ikili dosyasını işaret ettiğinden emin olun (örneğin, rbenv tarafından kurulan Ruby).
* Veritabanı bağlantı sorunları:
* Veritabanı sunucusunun çalıştığından emin olun (sudo service postgresql status veya sudo service mysql status).
* Veritabanı kullanıcısı ve şifresinin doğru olduğundan ve bu kullanıcının veritabanına erişim izinlerine sahip olduğundan emin olun.
* libpq-dev (PostgreSQL için) veya libmysqlclient-dev (MySQL için) gibi geliştirme başlıklarının yüklü olduğundan emin olun.
* pg veya mysql2 gem’lerinin bundle install sırasında başarıyla derlendiğinden emin olun.

Bu adımlar, çoğu dağıtım sorununu teşhis etmenize ve çözmenize yardımcı olacaktır. Unutmayın, log dosyaları en iyi arkadaşınızdır!

Sonuç

Ubuntu 14.04 üzerinde Phusion Passenger ve Apache ile bir Rails uygulaması dağıtmak, dikkatli bir planlama ve adım adım uygulama gerektiren kapsamlı bir süreçtir. Bu rehberde, sunucunuzu hazırlamaktan başlayarak Ruby ve veritabanı kurulumuna, uygulamanızın sunucuya aktarılmasına, Apache ve Passenger entegrasyonuna ve son olarak sanal host yapılandırmasına kadar tüm kritik adımları detaylı bir şekilde ele aldık. Ayrıca güvenlik ipuçları ve yaygın sorun giderme yöntemleri hakkında da bilgi verdik.

Bu adımları dikkatlice takip ederek, Rails uygulamanızın üretim ortamında kararlı, performanslı ve güvenli bir şekilde çalışmasını sağlayabilirsiniz. Dağıtım, bir uygulamanın yaşam döngüsünün sadece bir parçasıdır. Başarılı bir dağıtımın ardından, uygulamanızın performansını izlemek, logları takip etmek ve düzenli güvenlik güncellemeleri yapmak da aynı derecede önemlidir.

Unutmayın ki her uygulama ve sunucu ortamı kendine özgü zorluklar barındırabilir. Bu rehber genel bir yol haritası sunarken, kendi özel durumunuza göre ayarlamalar yapmanız gerekebilir. İleriye dönük olarak, dağıtım süreçlerinizi otomatikleştirmek (örneğin Capistrano veya CI/CD araçları ile) ve sunucu izleme çözümlerini entegre etmek, operasyonel yükünüzü azaltacak ve uygulamanızın istikrarını artıracaktır. Başarılı bir dağıtım dileğiyle!

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