////Ubuntu 16.04 üzerine Rbenv, Rails 5.x, PostgreSQL 9.5.x, Redis olan bir VagrantVM oluşturma

Ubuntu 16.04 üzerine Rbenv, Rails 5.x, PostgreSQL 9.5.x, Redis olan bir VagrantVM oluşturma

Bu yazımızda Ubuntu 16.04 üzerinde Rbenv, Rails 5.x, PostgreSQL 9.5.x, Redis kurulu olacak bir VagrantBOX oluşturmayı anlatacağız.

ÖNEMLİ: Bu yazıyı okuyan okuyucunun temel Vagrant methodlarını bildiğini varsayıyoruz. Eğer bilmiyorsanız ilk önce Get Started dokümanını okumanızda fayda vardır.

Ubuntu 16.04’ün Vagrant Box’a eklenmesi

Ubuntu’yu süreçli internet üzerinden indirmemek için Vagrant’ın boxına ekliyoruz.

$ vagrant box add "bento/ubuntu-16.04"

Vagrantfile ile VM’in ayarlanması

Benim önerim eğer bu işlemi ilk defa yapıyorsanız. vagrant init komutunu kullanmanızdır ve yaratılan Vagrantfile dosyasını baştan sona okuyup konsepti öğrenmenizdir. Eğer daha önce Vagrantı kullandıysanız manuel olarak Vagrantfile’ı yaratabilirsiniz.

$ vagrant init

Vagrantfile’ı yaratınca aşağıdaki şekilde düzenleyebilirsiniz.

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.network "forwarded_port", guest: 3000, host: 4000
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end
 config.vm.provision "shell", privileged: false, path: "provision.sh"
end

Neler yaptık?

Ubuntu 16.04 kurulmasını söyledik.

config.vm.box = "bento/ubuntu-16.04"

3000 portunda çalışacak Rails’ı 4000 portuna yönlendirdik.

config.vm.network "forwarded_port", guest: 3000, host: 4000

Makinenin RAM’ini 2MB yaptık.

config.vm.provider "virtualbox" do |vb|
  vb.memory = "2048"
end

provision.sh scriptinin çalışmasını söyledik.

config.vm.provision "shell", privileged: false, path: "provision.sh"

Provision Scripttini Yaratmak

Provision scriptti Vagrant ile VM makine ilk çalışınca koşacak olan scripttir. Daha sonra istenirse $ vagrant up --provision parametresiyle tekrar koşulabilir.

#!/usr/bin/env bash

export DEBIAN_FRONTEND=noninteractive

# Install the essential ubuntu packages
sudo apt-get -y update
sudo apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs redis-server cmake pkg-config imagemagick wkhtmltopdf

# Fix the location problem
echo 'export LANGUAGE=en_US.UTF-8' >> ~/.bashrc
echo 'export LANG=en_US.UTF-8'  >> ~/.bashrc
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bashrc

# Install Rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

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

# Install Ruby Bundler with Vagrant user
sudo -H -u vagrant bash -i -c 'rbenv install 2.3.3'
sudo -H -u vagrant bash -i -c 'rbenv rehash'
sudo -H -u vagrant bash -i -c 'rbenv global 2.3.3'
sudo -H -u vagrant bash -i -c 'gem install bundler --no-ri --no-rdoc'
sudo -H -u vagrant bash -i -c 'rbenv rehash'
sudo -H -u vagrant bash -i -c 'gem install bundler'

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo -H -u vagrant bash -i -c 'gem install rails'
sudo -H -u vagrant bash -i -c 'rbenv rehash'

# Install PG
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install postgresql-common
sudo apt-get -y install postgresql-9.5 libpq-dev

# Create a PG user
sudo -u postgres createuser vagrant -s

Artık Vagrant VM’mimizi ayaklandırabiliriz.

$  vagrant up --provision | tee provision.log

Ubuntunun kurulduğunu ve logların provision.log dosyasına alındığını görebilirsiniz. Logları almak istemiyorsanız “| tee provision.log ” ifadesini eklemenize gerek yoktur.

Şimdi Vagrant VM’imize giriş yapıp Rails, Ruby, NodeJS vb yazılımlarımızı kontrol edelim.

$ vagrant ssh

VM’e giriş yaptıktan sonra aşağıdaki komutlarla versiyonları kontrol edebilirsiniz.

$ ruby -v
> ruby 2.3.3p222 (2016-11-21 revision 56859)

[x86_64-linux] $ rails -v > Rails 5.0.1 $ nodejs -v > v4.2.6 $ bundler -v > Bundler version 1.13.7 $ psql --version > psql (PostgreSQL) 9.5.5 $ redis-cli -v > redis-cli 3.0.6

PostgreSQL’deki Kullanıcıları Kimlik Doğrulamayı Ayarlamak

Normalde geliştirme ortamı olduğu için ben bütün kullanıcalara bütün erişim yetkilerini veriyorum. Kesinlikle ama kesinlikle production ortamında bunu yapmayın!!

PostgreSQL’de yetkiler pg_hba.conf dosyasında olmaktadır.

$ sudo vim /etc/postgresql/9.5/main/pg_hba.conf

Sonra yetkileri aşağıdaki gibi trust yapmanız gerekmektedir.

# "local" is for Unix domain socket connections only
local   all             all                                     <strong>trust</strong>
# IPv4 local connections:
host    all             all             127.0.0.1/32            <strong>trust</strong>
# IPv6 local connections:
host    all             all             ::1/128                 <strong>trust</strong>

Rails’ın Ayarlanması

Vagrant sizleri /home/vagrant dizinine atacaktır ancak ayarlamadıysanız ana makinenizle paylaşımlı dizininiz /home/vagrant dizininiz değil doğrudan /vagrant dizininiz olacaktır. İlk önce bu dizine gitmeliyiz. Sonrasında rails, onun veri tabanını yaratıyoruz. En son olarakta 3000 portta uygulamamızı çalıştırıyoruz.

$ cd /vagrant
$ rails new blog --database=postgresql
$ cd blog
$ rake db:create
$ rake db:migrate
$ rails s -e development -b 0.0.0.0

Uygulamayı kendi makinemizdeki tarayıcıdan erişebilmek için http://localhost:4000 adresini atmamız gerekmektedir.

Oluşabilecek Sorunlar ve Çözümleri

Problem 1 – Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255

Genel olarak bu problem 127.0.0.1’i dinlerken tcp’nin 0.0.0.0’da yayın yapmasından kaynaklanır. İsterseniz ilgili network aralığını güvenli listesine alabilirsiniz. İsterseniz aşağıdaki gibi geliştirme ortamında bu önlemi göz artı edebilirsiniz.

#config/environments/development.rb
config.web_console.whiny_requests = false

NOT: Production ortamında yukarıdaki ayar önerilmez!!!

tarafından|2018-02-12T10:57:17+00:00Ocak 15, 2017|Kategoriler: Geliştirici Makaleleri, Genel|Etiketler: , , , , |Yorum yok
Bu yazı faydalı mıydı? Hayır | 0 Evet | 12

Yazar Hakkında:

Bulutfon Kurucu Ortağı & Genel Müdürü

Siz de fikrinizi belirtin