Giriş: Zope 2 ve PostgreSQL’in Ubuntu 13.10 Üzerindeki Yeri
Bu rehber, günümüzde eski bir sistem ve yazılım kombinasyonu olsa da, belirli ihtiyaçlar doğrultusunda Ubuntu 13.10 üzerinde Zope 2 uygulama sunucusunu ve PostgreSQL veritabanını nasıl kurup kullanacağınızı detaylı bir şekilde açıklamaktadır. Zope 2, Python tabanlı, açık kaynaklı bir web uygulama sunucusu ve içerik yönetim çerçevesidir. Özellikle 2000’li yılların başlarında popüler olan bu platform, dinamik web siteleri ve intranet uygulamaları oluşturmak için kullanılmıştır. Kendi nesne veritabanı (ZODB) ile gelmesine rağmen, karmaşık ilişkisel verileri yönetmek veya mevcut kurumsal veritabanlarıyla entegre olmak için sıklıkla PostgreSQL gibi güçlü bir ilişkisel veritabanı yönetim sistemi (RDBMS) ile birlikte kullanılır.
PostgreSQL ise gelişmiş özellikleri, kararlılığı ve standartlara uygunluğu ile bilinen, dünya genelinde en çok tercih edilen açık kaynaklı ilişkisel veritabanlarından biridir. Veri bütünlüğünü, eşzamanlılığı ve karmaşık sorguları destekleme yeteneği, onu birçok web uygulaması için ideal bir seçim haline getirir.
Ubuntu 13.10 (“Saucy Salamander”) artık resmi olarak desteklenmeyen ve güvenlik güncellemeleri almayan eski bir işletim sistemi sürümüdür. Bu nedenle, bu rehberdeki adımları modern bir sistemde veya üretim ortamında uygulamanız önerilmez. Ancak, eski bir sistemi yeniden canlandırmak, belirli bir Zope 2 uygulamasını çalıştırmak veya sadece eğitim amaçlı olarak bu kombinasyonu kurmak isteyenler için bu rehber kapsamlı bir yol haritası sunacaktır. Bu rehberde, gerekli ön hazırlıklardan başlayarak, PostgreSQL ve Zope 2 kurulumuna, bu iki sistemin entegrasyonuna ve olası sorun giderme yöntemlerine değineceğiz.
Sistem Hazırlığı ve PostgreSQL Kurulumu
Zope 2 ve PostgreSQL’i Ubuntu 13.10 üzerine sorunsuz bir şekilde kurmak için öncelikle sistemimizi hazırlamamız ve ardından PostgreSQL veritabanını yapılandırmamız gerekmektedir.
Sistem Gereksinimleri ve Ön Hazırlıklar
Kuruluma başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olmalısınız:
* İşletim Sistemi: Ubuntu 11.10 veya 13.10 (Bu rehber 13.10’a odaklanmaktadır).
* Kullanıcı Yetkileri: sudo yetkilerine sahip veya root kullanıcısı.
* İnternet Bağlantısı: Gerekli paketleri indirmek için aktif bir internet bağlantısı.
* Temel Güncellemeler: Sistem paketlerinin güncel olması, olası bağımlılık sorunlarını minimize eder.
Öncelikle sistemimizi güncelleyelim ve gerekli temel geliştirme araçlarını, Python paketlerini ve PostgreSQL bağlantısı için kütüphaneleri kuralım. Zope 2 eski bir Python 2.x sürümüyle çalıştığından, Python 2.7 ile uyumlu paketleri kurmaya özen göstereceğiz.
# Sistem paketlerini güncelleyelim
sudo apt-get update
sudo apt-get upgrade -y
Gerekli geliştirme araçlarını kuralım (derleme için)
sudo apt-get install -y build-essential python-dev libpq-dev libxml2-dev libxslt1-dev zlib1g-dev
Python paket yöneticileri (pip ve setuptools)
Ubuntu 13.10'da genellikle python-pip ve python-setuptools paketleri mevcuttur.
Eğer yüklü değillerse:
sudo apt-get install -y python-pip python-setuptools
virtualenv, Python sanal ortamları oluşturmak için gereklidir
sudo pip install virtualenv
Bu komutlar, C derleyicileri, Python başlık dosyaları, PostgreSQL istemci kütüphaneleri (libpq-dev), XML/XSLT işlem kütüphaneleri ve sıkıştırma kütüphanelerini kurarak Zope 2 ve bağımlılıklarının derlenmesi için gerekli ortamı sağlar. virtualenv kurulumu, sistem Python’ını etkilemeden Zope 2 için izole bir Python ortamı oluşturmamıza olanak tanıyacaktır. Bu, özellikle eski Python 2 tabanlı uygulamaları çalıştırmak için modern sistemlerde kritik bir adımdır.
PostgreSQL Kurulumu ve Yapılandırması
Şimdi PostgreSQL veritabanı sunucusunu kurup temel yapılandırmasını yapalım.
# PostgreSQL sunucusunu ve ek araçları kuralım
sudo apt-get install -y postgresql postgresql-contrib
Kurulum tamamlandıktan sonra PostgreSQL servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol edebilirsiniz:
sudo service postgresql status
Varsayılan olarak, PostgreSQL, postgres adında bir süper kullanıcı ve bu kullanıcıyla eşleşen bir Linux kullanıcısı oluşturur. Veritabanı yönetimini bu kullanıcı üzerinden yapabiliriz.
# postgres kullanıcısına geçiş yapalım
sudo -i -u postgres
psql komut satırı aracını başlatalım
psql
psql komut isteminde iken, Zope 2 uygulamamız için yeni bir veritabanı kullanıcısı ve veritabanı oluşturalım. Örneğin, zopeuser adında bir kullanıcı ve zopedb adında bir veritabanı oluşturabiliriz.
-- Yeni bir kullanıcı oluşturalım ve şifresini belirleyelim
CREATE USER zopeuser WITH PASSWORD 'your_secure_password';
-- Yeni bir veritabanı oluşturalım ve sahibini zopeuser yapalım
CREATE DATABASE zopedb OWNER zopeuser;
-- psql'den çıkış yapalım
\q
Şimdi tekrar kendi kullanıcı hesabınıza dönmek için exit yazın.
PostgreSQL Erişim Ayarları (pg_hba.conf):
PostgreSQL’in istemcilerin veritabanına nasıl bağlanabileceğini kontrol eden önemli bir yapılandırma dosyası pg_hba.conf‘tur. Zope’un yerel olarak bağlanabilmesi için bu dosyada bazı değişiklikler yapmamız gerekebilir. Varsayılan olarak, yerel bağlantılar genellikle peer veya ident kimlik doğrulaması kullanır ki bu, aynı sistemdeki Linux kullanıcı adının PostgreSQL veritabanı kullanıcı adıyla eşleşmesini gerektirir. Bizim durumumuzda, Zope uygulaması zopeuser olarak bağlanacağından, md5 şifre doğrulamasına geçmek daha esnektir.
# pg_hba.conf dosyasını düzenleyelim
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
(Not: PostgreSQL sürümü Ubuntu 13.10’da muhtemelen 9.3’tür. Klasör yolu buna göre değişebilir.)
Dosya içinde aşağıdaki satırı bulun:
# "local" is for Unix domain socket connections only
local all all peer
Bu satırı veya benzerini aşağıdaki gibi değiştirin veya altına yeni bir satır ekleyin:
# "local" is for Unix domain socket connections only
local all zopedb zopeuser md5
Bu değişiklik, zopedb veritabanına zopeuser olarak bağlanmaya çalışan yerel bağlantıların md5 şifre doğrulaması kullanmasını sağlar. Ayrıca, tüm yerel bağlantılar için genel bir md5 ayarı da yapabilirsiniz:
local all all md5
Değişiklikleri kaydettikten sonra (Ctrl+O, Enter, Ctrl+X), PostgreSQL servisini yeniden başlatmalısınız ki değişiklikler etkili olsun:
sudo service postgresql restart
Veritabanı Bağlantısını Test Etme:
Oluşturduğumuz zopeuser ve zopedb ile bağlantı kurmayı deneyerek her şeyin doğru çalıştığından emin olalım:
psql -U zopeuser -d zopedb -h localhost
Şifreniz istendiğinde your_secure_password yazın. Eğer başarıyla bağlanırsanız, zopedb=> şeklinde bir komut istemi göreceksiniz. Bağlantıyı kapatmak için \q yazıp Enter tuşuna basın.
Zope 2 Kurulumu ve Temel Yapılandırması
Şimdi sıra Zope 2’yi kurmaya ve temel bir Zope örneği oluşturmaya geldi. Zope 2’nin Python 2 ile çalıştığını ve bu nedenle sanal ortam kullanmanın kritik olduğunu bir kez daha hatırlatmak isteriz.
Sanal Ortam Oluşturma
Sistem Python’ımızla çakışmaları önlemek ve Zope 2 için temiz bir ortam sağlamak amacıyla bir virtualenv oluşturalım.
# Zope 2 için bir dizin oluşturalım
sudo mkdir -p /opt/zope2
sudo chown -R $USER:$USER /opt/zope2
Bu dizine gidelim
cd /opt/zope2
Python 2.7 kullanarak bir sanal ortam oluşturalım
virtualenv -p python2.7 zope2_env
Sanal ortamı etkinleştirelim
source zope2_env/bin/activate
Artık komut isteminiz (zope2_env) ile başlayacaktır, bu da sanal ortamın etkin olduğunu gösterir. Bu ortamdayken yapacağınız tüm pip install komutları, paketleri bu sanal ortama kuracaktır.
Zope 2 Kurulumu
Sanal ortam aktifken, Zope 2’yi pip kullanarak kuralım. Zope 2’nin son sürümü 2.13.x serisidir ve Python 2.7 ile uyumludur.
# Zope 2'yi sanal ortama kuralım
pip install Zope2
Kurulum biraz zaman alabilir, çünkü Zope’un birçok bağımlılığı vardır. pip tüm bu bağımlılıkları otomatik olarak indirecek ve kuracaktır.
Zope Örneği Oluşturma ve Yönetimi
Zope 2’yi kurduktan sonra, bir Zope örneği (instance) oluşturmamız gerekir. Bu örnek, Zope uygulamanızın çalıştığı dizindir ve ZODB veritabanını, yapılandırma dosyalarını ve diğer uygulama verilerini içerir.
# Zope örnekleri için bir dizin oluşturalım
sudo mkdir -p /opt/zope2_instances
sudo chown -R $USER:$USER /opt/zope2_instances
Zope örneğini oluşturmak için mkzopeinstance komutunu kullanalım
Sanal ortam aktifken çalıştırın:
mkzopeinstance -d /opt/zope2_instances/instance1
mkzopeinstance komutu sizden yönetici kullanıcı adı ve şifresi isteyecektir. Bu bilgiler Zope Yönetim Arayüzüne (ZMI) erişmek için kullanılacaktır. Güçlü bir şifre belirlediğinizden emin olun.
Zope’u Başlatma ve Durdurma:
Zope örneğini oluşturduktan sonra, onu başlatabiliriz. Örnek dizinine gidin ve runzope komutunu çalıştırın.
cd /opt/zope2_instances/instance1
Zope'u başlatın
./bin/runzope
Zope başarıyla başladığında, konsolda “Zope has started up” veya benzeri bir mesaj göreceksiniz. Varsayılan olarak Zope, 8080 portunda çalışır.
Bir web tarayıcısı açın ve şu adrese gidin: http://localhost:8080/manage
Daha önce belirlediğiniz yönetici kullanıcı adı ve şifresi ile giriş yapın. Bu, Zope Yönetim Arayüzü’dür (ZMI). Buradan Zope nesnelerini oluşturabilir, yönetebilir ve uygulamanızı geliştirebilirsiniz.
Zope’u durdurmak için, runzope komutunu çalıştırdığınız terminal penceresinde Ctrl+C tuş kombinasyonuna basın.
Arka Planda Çalıştırma (İsteğe Bağlı):
Zope’u bir üretim ortamında veya terminali kapatmadan arka planda çalıştırmak isterseniz, runzope komutunu & ile kullanabilir veya nohup gibi araçları tercih edebilirsiniz. Ancak bu rehberde, basitlik adına runzope ile terminalde çalıştırma yöntemine odaklanılmıştır. Daha gelişmiş arka plan çalıştırma yöntemleri (örneğin supervisor veya systemd servisleri) bu rehberin kapsamı dışındadır.
# Arka planda çalıştırma (basit yöntem, terminal kapanınca durur)
./bin/runzope &
Nohup ile çalıştırma (terminal kapansa bile çalışmaya devam eder)
nohup ./bin/runzope > zope.log 2>&1 &
Zope 2 ve PostgreSQL Entegrasyonu
Zope 2’nin kendi nesne veritabanı (ZODB) olmasına rağmen, ilişkisel verileri yönetmek için PostgreSQL ile entegrasyon önemlidir. Bu bölümde Zope 2’nin PostgreSQL ile nasıl konuşacağını yapılandıracağız.
Psycopg2 Kurulumu
Zope’un PostgreSQL ile iletişim kurabilmesi için psycopg2 adlı Python adaptörüne ihtiyacı vardır. Bu adaptörü, Zope’un kurulu olduğu sanal ortama kurmalıyız.
# Sanal ortamın aktif olduğundan emin olun
(zope2_env) prefix'ini görmelisiniz
cd /opt/zope2
source zope2_env/bin/activate
psycopg2'yi kuralım
pip install psycopg2-binary
psycopg2-binary versiyonu, derleme gerektirmeyen önceden derlenmiş ikili dosyaları içerir ve kurulumu daha kolaydır. Eğer kurulumda sorun yaşarsanız, libpq-dev paketinin yüklü olduğundan emin olun.
psycopg2 kurulduktan sonra Zope örneğinizi yeniden başlatmanız gerekebilir, böylece yeni kütüphaneyi algılayabilir.
cd /opt/zope2_instances/instance1
./bin/runzope # veya Ctrl+C ile durdurup tekrar başlatın
Zope Yönetim Arayüzünden Bağlantı
Şimdi Zope Yönetim Arayüzü (ZMI) üzerinden PostgreSQL veritabanımıza bir bağlantı nesnesi ekleyelim.
1. Web tarayıcınızda http://localhost:8080/manage adresine gidin ve yönetici kullanıcı adı/şifrenizle giriş yapın.
2. ZMI’nin sol üst köşesindeki “Zope Root” seçeneğine tıklayın.
3. Sağ üst köşedeki add Zope object açılır menüsünden Database Connection seçeneğini seçin. (Eğer PostgreSQL Database Connection gibi özel bir seçenek varsa onu da kullanabilirsiniz, ancak Database Connection genelde yeterlidir.)
4. Açılan formda aşağıdaki bilgileri girin:
* Id: postgresql_db (veya istediğiniz herhangi bir tanımlayıcı isim)
* Title: PostgreSQL Database Connection (isteğe bağlı)
* Connection string: postgresql://zopeuser:your_secure_password@localhost:5432/zopedb
* zopeuser: PostgreSQL’de oluşturduğumuz kullanıcı adı.
* your_secure_password: Bu kullanıcının şifresi.
* localhost: PostgreSQL sunucusunun adresi.
* 5432: PostgreSQL’in varsayılan portu.
* zopedb: PostgreSQL’de oluşturduğumuz veritabanı adı.
* Database adapter (optional): Bu alanı boş bırakabilirsiniz, psycopg2 otomatik olarak algılanacaktır.
5. Add düğmesine tıklayarak bağlantıyı oluşturun.
Bağlantı nesnesi Zope Root altında görünecektir. Bağlantının çalıştığını test etmek için, oluşturduğunuz postgresql_db nesnesine tıklayın ve ardından Test sekmesine gidin. Test Connection düğmesine tıklayın. Eğer her şey doğruysa, “Connection Test Succeeded” mesajını görmelisiniz. Aksi takdirde, bağlantı dizesini, kullanıcı adı/şifreyi ve PostgreSQL pg_hba.conf ayarlarını kontrol edin.
Basit Bir SQL Sorgusu ile Veritabanı Etkileşimi
Zope içinde PostgreSQL veritabanımızdan veri almak veya veri manipüle etmek için SQL Method veya ZSQLMethods nesnelerini kullanabiliriz. Bu, genellikle Zope’un DHTML yöntemleri veya Python betikleri aracılığıyla çağrılan dinamik SQL sorguları oluşturmak için kullanılır.
Şimdi basit bir SQL Method ekleyerek veritabanından zaman bilgisini çekelim:
1. ZMI’de, postgresql_db bağlantı nesnesinin bulunduğu Zope Root seviyesinde olduğunuzdan emin olun.
2. add Zope object açılır menüsünden SQL Method seçeneğini seçin.
3. Açılan formda:
* Id: get_current_time
* Title: Get Current Database Time
* Connection Id: Açılır menüden postgresql_db bağlantı nesnenizi seçin.
* Query Text: Aşağıdaki SQL sorgusunu girin:
SELECT NOW() AS current_time;
4. Add düğmesine tıklayarak SQL metodunu oluşturun.
Oluşturduğunuz get_current_time nesnesine tıklayın. Şimdi sorguyu çalıştırmak için Test sekmesine gidin ve Test düğmesine tıklayın. Eğer her şey yolundaysa, sorgunun sonucunu, yani PostgreSQL sunucusunun mevcut tarih ve saatini içeren bir tablo göreceksiniz. Bu, Zope’un PostgreSQL ile başarılı bir şekilde iletişim kurduğunu gösterir. Artık Zope uygulamalarınızda bu SQL metodunu kullanarak veritabanınızla etkileşim kurabilirsiniz.
Yaygın Sorunlar ve Çözümleri
Ubuntu 13.10 gibi eski bir işletim sistemi ve Zope 2 gibi eski bir yazılımla çalışırken bazı sorunlarla karşılaşmak olasıdır. İşte bazı yaygın sorunlar ve çözümleri:
* psycopg2 Kurulum Hatası:
* Sorun: pip install psycopg2-binary komutu Error: pg_config executable not found veya benzeri bir hata veriyor.
* Çözüm: Bu genellikle PostgreSQL geliştirme kütüphanelerinin (libpq-dev) eksik olmasından kaynaklanır. sudo apt-get install -y libpq-dev komutunu çalıştırdıktan sonra tekrar deneyin.
* Zope Başlatma Hatası (Port Çakışması):
* Sorun: Zope runzope komutuyla başlamıyor ve “Address already in use” (Adres zaten kullanımda) hatası veriyor.
* Çözüm: Başka bir uygulamanın 8080 portunu kullandığı anlamına gelir. Ya diğer uygulamayı durdurun ya da Zope’un instance1/etc/zope.conf dosyasını düzenleyerek farklı bir port kullanmasını sağlayın. Örneğin, bölümündeki address değerini 8081 olarak değiştirebilirsiniz.
* PostgreSQL Bağlantı Reddedildi Hatası:
* Sorun: Zope’da veritabanı bağlantısı testi başarısız oluyor veya psql ile bağlanamıyorsunuz.
* Çözüm:
1. PostgreSQL Servisi: sudo service postgresql status komutuyla PostgreSQL servisinin çalıştığından emin olun. Çalışmıyorsa sudo service postgresql start ile başlatın.
2. pg_hba.conf: /etc/postgresql/9.3/main/pg_hba.conf dosyasındaki ayarların doğru olduğundan ve zopeuser için md5 doğrulamasına izin verdiğinden emin olun. Değişiklik yaptıysanız servisi yeniden başlatın.
3. Kullanıcı/Şifre: Zope’daki bağlantı dizesinde ve PostgreSQL’deki CREATE USER komutunda kullanılan kullanıcı adı ve şifrenin tam olarak eşleştiğinden emin olun.
4. Firewall: Eğer bir güvenlik duvarı (ufw) aktifse, PostgreSQL’in varsayılan 5432 portuna erişime izin verdiğinden emin olun: sudo ufw allow 5432/tcp.
* Python Versiyonu Uyumsuzluğu:
* Sorun: Zope veya bağımlılıkları kurulurken Python versiyonu ile ilgili hatalar alınıyor.
* Çözüm: Sanal ortamı virtualenv -p python2.7 zope2_env komutuyla Python 2.7’yi işaret ederek oluşturduğunuzdan ve tüm Zope/bağımlılık kurulumlarını bu aktif sanal ortam içinde yaptığınızdan emin olun. Sistem Python’unu kullanmaktan kaçının.
* Bağımlılık Eksiklikleri:
* Sorun: Çeşitli ImportError veya derleme hataları alınıyor.
* Çözüm: build-essential, python-dev, libxml2-dev, libxslt1-dev, zlib1g-dev gibi temel geliştirme kütüphanelerinin yüklü olduğundan emin olun.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehber, Ubuntu 13.10 gibi eski bir işletim sistemi üzerinde Zope 2 uygulama sunucusunu ve PostgreSQL veritabanını kurup entegre etme sürecini adım adım açıklamıştır. Sistem hazırlığından başlayarak, PostgreSQL’in kurulup yapılandırılmasına, Zope 2’nin sanal bir ortamda kurulumuna ve son olarak Zope Yönetim Arayüzü üzerinden PostgreSQL ile bağlantı kurarak basit bir SQL sorgusu çalıştırmaya kadar tüm temel adımları ele aldık. Bu kombinasyon, belirli eski uygulamaları çalıştırmak veya eğitim amaçlı olarak faydalı olabilir, ancak modern web geliştirme ve üretim ortamları için güncel teknolojilere yönelmek daha doğrudur.
Sıkça Sorulan Sorular (SSS):
* Neden Ubuntu 13.10 kullanıyoruz? Bu çok eski değil mi?
* Evet, Ubuntu 13.10 çok eski bir işletim sistemi sürümüdür ve artık güvenlik güncellemeleri almamaktadır. Bu rehber, kullanıcının özel bir isteği veya eski bir sistemi canlandırma ihtiyacı üzerine hazırlanmıştır. Yeni projeler veya üretim ortamları için modern Ubuntu sürümleri (örn. 22.04 LTS) ve güncel yazılımlar kullanmanız şiddetle tavsiye edilir.
* Zope 2 yerine ne kullanmalıyım?
* Güncel Python tabanlı web çatılarından bazıları Django, Flask, FastAPI gibi seçeneklerdir. Eğer Zope ekosisteminde kalmak isterseniz, Zope 5 (Python 3 ile uyumlu) veya Plone 6 gibi daha modern sürümleri düşünebilirsiniz.
* Zope’u otomatik olarak başlatmak için ne yapmalıyım?
* Üretim ortamlarında Zope’u otomatik olarak başlatmak ve denetlemek için supervisor veya systemd servisleri kullanılabilir. Bu rehberin kapsamı dışında olmakla birlikte, bu araçlar Zope’un sistem başlangıcında otomatik olarak başlamasını ve çökmesi durumunda yeniden başlatılmasını sağlar.
* Veritabanı bağlantım hala reddediliyor, ne yapmalıyım?
* Yukarıdaki “Yaygın Sorunlar ve Çözümleri” bölümündeki PostgreSQL bağlantı reddi adımlarını dikkatlice kontrol edin. Özellikle pg_hba.conf dosyasındaki ayarların ve PostgreSQL servisinin yeniden başlatıldığından emin olun. Ayrıca, Zope’da kullandığınız kullanıcı adı ve şifrenin PostgreSQL’deki ile tamamen eşleştiğinden emin olun.
* Bu kurulumu bir Docker konteynerinde yapabilir miyim?
* Evet, Zope 2 ve PostgreSQL’i Docker konteynerlerinde çalıştırmak, eski yazılımları izole bir ortamda yönetmek için harika bir yaklaşımdır. Bu, sisteminizin geri kalanını etkilemeden ve bağımlılık sorunlarıyla uğraşmadan bu eski teknolojileri kullanmanıza olanak tanır. Dockerfile yazarak bu kurulum adımlarını otomatikleştirebilirsiniz.
Bu rehberin, eski ancak belirli ihtiyaçlar için hala geçerli olan Zope 2 ve PostgreSQL kombinasyonunu Ubuntu 13.10 üzerinde kurmak isteyenlere yol göstermesini umuyoruz.
