Pardus Sunucu Üzerinde Webmin ile Nginx Web Sunucusu Kurulumu ve Yapılandırması

Bir önceki adımda DNS altyapısını kurduğumuz ağımızda, şimdi de isim çözümlemesi yapılan adreslerimize (örneğin www.bilisim.local) bir web sayfası sunmak için Nginx kurulumunu gerçekleştireceğiz. Nginx, yüksek performansı ve düşük kaynak tüketimi ile bilinen, Pardus sunucular için mükemmel bir web sunucusu (web server) tercihidir.

 BIND9 senaryomuzdaki yapı üzerinden devam edeceğiz.

Senaryo Hatırlatması:

  • Sunucu IP: 192.168.101.250

  • Web Adresi (FQDN): www.bilisim.local


Adım 1: Nginx Paketlerinin Kurulumu

Webmin, sistemde kurulu olan servisleri yönetir. Bu nedenle önce Nginx'in temel paketlerini Pardus depomuzdan kurmamız gerekiyor.

  1. Pardus sunucunuzun terminalini açın (veya SSH ile bağlanın).

  2. Paket listelerini güncelleyip Nginx'i kurun:

    Bash
    sudo apt update
    sudo apt install nginx -y
    
  3. Kurulum tamamlandıktan sonra servisin çalıştığından emin olmak için durumunu kontrol edin:

    Bash
    sudo systemctl status nginx
    

    (Çıktıda yeşil renkli "active (running)" yazısını görmelisiniz. Çıkmak için q tuşuna basın.)


Adım 2: Web Klasörünün (Document Root) Hazırlanması

Web sitemize ait dosyaların (HTML, CSS, resimler) duracağı bir klasör oluşturmalıyız. Nginx varsayılan olarak /var/www/html dizinini kullanır ancak biz kendi alan adımıza özel bir yapı kuracağız.

  1. bilisim.local için gerekli klasörü oluşturun:

    Bash
    sudo mkdir -p /var/www/bilisim.local/html
    
  2. Klasör izinlerini Nginx'in okuyabileceği şekilde (www-data kullanıcısı) ayarlayın:

    Bash
    sudo chown -R www-data:www-data /var/www/bilisim.local/html
    sudo chmod -R 755 /var/www/bilisim.local
    
  3. Test edebilmek için basit bir HTML dosyası oluşturalım:

    Bash
    sudo nano /var/www/bilisim.local/html/index.html
    

    İçerisine şu kodları yapıştırın:

    HTML
    <!DOCTYPE html>
    <html>
    <head>
        <title>Pardus Sunucusuna Hoş Geldiniz!</title>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>Başarılı! www.bilisim.local Nginx üzerinden çalışıyor.</h1>
        <p>Bu sayfa, Pardus üzerinde Webmin ile yapılandırılmıştır.</p>
    </body>
    </html>
    

    (Kaydetmek için Ctrl+O, Enter, çıkmak için Ctrl+X tuşlarına basın.)


Adım 3: Webmin Üzerinde Nginx Modülünün Aktifleştirilmesi

Nginx'i terminalden kurduğumuz için Webmin'in bunu algılamasını sağlamalıyız.

  1. Webmin arayüzüne giriş yapın (https://192.168.101.250:10000).

  2. Sol menünün en altındaki Refresh Modules (Modülleri Yenile) butonuna tıklayın.

  3. Yenileme bittikten sonra sol menüdeki Servers (Sunucular) sekmesini genişletin. Artık Nginx Webserver seçeneğini burada görebilirsiniz.


Adım 4: Sanal Sunucu (Virtual Host) Oluşturma

Sanal sunucu (Server Block), Nginx'e gelen isteklerin hangi web sitesine ait olduğunu ayırt etmesini sağlar. Böylece tek bir sunucuda hem bilisim.local hem de nuritiras.com.tr gibi birden fazla farklı siteyi barındırabilirsiniz.

  1. Webmin'de Servers -> Nginx Webserver menüsüne tıklayın.

  2. Sayfanın üst kısmındaki Create Virtual Host (Sanal Sunucu Oluştur) sekmesine tıklayın.

  3. Formu senaryomuza göre şu şekilde doldurun:

    • Server Name (Sunucu Adı): www.bilisim.local bilisim.local (Aralarında boşluk bırakarak hem www'lu hem www'suz versiyonu ekleyin)

    • Listen on port (Dinlenecek Port): 80 (Standart HTTP portu)

    • Document Root (Belge Kök Dizini): /var/www/bilisim.local/html (Adım 2'de oluşturduğumuz klasör)

  4. Sayfanın altındaki Create Now (Şimdi Oluştur) butonuna tıklayın.

Adım 5: Ayarları Uygulama ve Güvenlik Duvarı İzni

Nginx'in yeni sanal sunucumuzu tanıması için ayarları yeniden yüklemesi gerekir.

  1. Webmin Nginx Webserver ana sayfasında, sağ üst köşedeki Apply Configuration (Yapılandırmayı Uygula) butonuna tıklayın.

  2. Güvenlik Duvarı (Firewall) Ayarı: Eğer Pardus üzerinde UFW aktifse, web trafiğine (Port 80) izin vermeniz gerekir. Terminalden şu komutu çalıştırın:

    Bash
    sudo ufw allow 'Nginx HTTP'
    

Adım 6: Web Sitesini Test Etme

DNS ayarlarını daha önceden yapmış olduğumuz (Birincil DNS olarak 192.168.101.250 ayarlanmış) bir istemci bilgisayardan (Windows veya Pardus) bir web tarayıcısı açın.

Adres çubuğuna şu adresi yazın:

http://www.bilisim.local

Karşınıza Adım 2'de oluşturduğumuz "Başarılı! www.bilisim.local Nginx üzerinden çalışıyor." yazılı sayfa geliyorsa, kurulum ve yapılandırmanız kusursuz bir şekilde tamamlanmış demektir.


Bu aşamada önemli bir detayı açıklığa kavuşturmamız gerekiyor: Let's Encrypt gibi yetkili sertifika otoriteleri (CA), yalnızca internet üzerinden doğrulanabilen gerçek ve public (halka açık) alan adları için SSL sertifikası üretir. Eğitim senaryomuzdaki bilisim.local kapalı bir ağda (lokal) çalıştığı için Let's Encrypt sunucuları bizim Pardus sunucumuza ulaşıp alan adını doğrulayamaz. Ancak endişelenmeyin! Bu eğitim makalesini iki bölüme ayıracağız:

  1. Laboratuvar ortamımız (bilisim.local) için: "Kendinden İmzalı" (Self-Signed) SSL sertifikası üreterek HTTPS yapılandırması.

  2. Gerçek projeleriniz için: Örneğin internete açık olan nuritiras.com.tr gibi bir alan adında Let's Encrypt'in nasıl kurulacağı.


Bölüm 1: Yerel Ağ İçin Kendinden İmzalı (Self-Signed) SSL Kurulumu

Kapalı ağlardaki sistemler için kendi sertifikamızı kendimiz imzalayabiliriz. Tarayıcılar bu sertifikayı "Güvenli Değil" olarak işaretlese de, trafik yine de şifreli (HTTPS) olarak iletilecektir.

Adım 1: SSL Sertifikasını Üretmek

Terminal üzerinden OpenSSL kullanarak 1 yıllık (365 gün) bir sertifika oluşturalım:

  1. Pardus terminalini açın ve sertifikaları saklayacağımız klasörü oluşturun:

    Bash
    sudo mkdir /etc/nginx/ssl
    
  2. Sertifika ve gizli anahtarı (private key) tek komutla üretin:

    Bash
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/bilisim.local.key -out /etc/nginx/ssl/bilisim.local.crt
    

    (Bu komutu çalıştırdığınızda size Ülke, Şehir, Organizasyon gibi bilgiler soracaktır. Buraları kendinize göre doldurabilir veya Enter tuşuyla boş geçebilirsiniz.)

Adım 2: Webmin Üzerinde Nginx SSL Yapılandırması

  1. Webmin arayüzünde Servers -> Nginx Webserver menüsüne gidin.

  2. Önceki derste oluşturduğumuz www.bilisim.local sanal sunucusuna (Virtual Host) tıklayın.

  3. SSL Options (SSL Seçenekleri) bölümüne girin.

  4. Enable SSL? seçeneğini Yes yapın.

  5. Dosya yollarını belirtin:

    • SSL certificate file: /etc/nginx/ssl/bilisim.local.crt

    • SSL private key file: /etc/nginx/ssl/bilisim.local.key

  6. Save diyerek kaydedin ve ana sayfaya dönüp Apply Configuration butonuna tıklayın.

  7. Eğer UFW (Güvenlik Duvarı) aktifse HTTPS (Port 443) için izin verin:

    Bash
    sudo ufw allow 'Nginx Full'
    

Artık web sitenize https://www.bilisim.local yazarak şifreli olarak erişebilirsiniz!


Bölüm 2: Gerçek Alan Adları İçin Ücretsiz Let's Encrypt (Certbot) Kurulumu

Eğer bu işlemleri kapalı bir laboratuvar ağında değil de, internete açık bir web sunucusunda (nuritiras.com.tr gibi size ait gerçek bir alan adıyla) yapıyorsanız, süreci Webmin yerine doğrudan terminalden yürütmek çok daha hızlı ve hatasızdır.

Let's Encrypt'in resmi aracı olan Certbot, Nginx ayarlarını sizin yerinize otomatik olarak bulur, sertifikayı alır ve yapılandırma dosyasına (hatta HTTP'den HTTPS'ye yönlendirme kodlarına kadar) kendi yazar.

Adım 1: Certbot Paketlerinin Kurulumu

Pardus terminalinde şu komutu çalıştırın:

Bash
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Adım 2: SSL Sertifikasının Alınması ve Otomatik Kurulum

Aşağıdaki komutta kendi alan adınızı kullanarak sertifikayı talep edin:

Bash
sudo certbot --nginx -d nuritiras.com.tr -d www.nuritiras.com.tr

Bu komutu çalıştırdığınızda Certbot size iki önemli soru soracaktır:

  1. E-posta adresiniz: Sertifika yenileme uyarıları için geçerli bir mail adresi girin.

  2. Yönlendirme (Redirect): Tüm HTTP trafiği otomatik olarak HTTPS'ye yönlendirilsin mi? Burada "2" (Redirect) seçeneğini seçmeniz güvenlik açısından en doğrusudur.

İşlem tamamlandığında, web siteniz otomatik olarak yeşil kilit simgesiyle (HTTPS) çalışmaya başlayacaktır. Sertifikanın süresi 90 gündür, ancak Certbot arka planda otomatik bir görev (cron) oluşturarak süresi bitmeden sertifikayı kendi kendine yeniler.


Pardus Sunucu Üzerinde Django ve Gunicorn ile Tam Geliştirme Ortamı Kurulumu

DNS ve Nginx yapılandırmalarımızı tamamladık. Şimdi, Python tabanlı web projelerini Pardus sunucumuzda yüksek performansla yayınlamak için Django ve Gunicorn kurulumunu gerçekleştireceğiz.

Bu yapıda Nginx, dışarıdan gelen web isteklerini karşılayan bir "Ters Vekil" (Reverse Proxy) olarak çalışacak ve dinamik Python işlemlerini Gunicorn uygulama sunucusuna (Application Server) iletecektir.

Senaryo Hatırlatması:

  • Alan Adı: www.bilisim.local

  • Proje Dizini: /var/www/bilisim.local/app


Adım 1: Python Sanal Ortam (Virtual Environment) Hazırlığı

Projelerimizin sistemdeki diğer Python paketleriyle çakışmaması için izole bir sanal ortam oluşturmalıyız.

  1. Pardus terminalinde gerekli Python araçlarını kurun:

    Bash
    sudo apt update
    sudo apt install python3-pip python3-venv -y
    
  2. Django projemiz için yeni bir dizin oluşturun ve içine girin:

    Bash
    sudo mkdir -p /var/www/bilisim.local/app
    sudo chown -R $USER:$USER /var/www/bilisim.local/app
    cd /var/www/bilisim.local/app
    
  3. Sanal ortamı oluşturun ve aktif hale getirin:

    Bash
    python3 -m venv venv
    source venv/bin/activate
    

    (Komut satırının başında (venv) ibaresini görüyorsanız sanal ortam aktif demektir.)


Adım 2: Django ve Gunicorn Kurulumu

Sanal ortam aktifken gerekli paketleri indirelim ve temel bir Django projesi başlatalım.

  1. Paketleri kurun:

    Bash
    pip install django gunicorn
    
  2. Projemizi (ana klasör adını core olarak belirleyerek) başlatalım:

    Bash
    django-admin startproject core .
    

    (Sondaki nokta . projenin doğrudan bulunduğumuz app dizinine kurulmasını sağlar.)

  3. Django ayarlarında alan adımıza izin vermeliyiz. Dosyayı düzenleyin:

    Bash
    nano core/settings.py
    

    ALLOWED_HOSTS satırını bulup aşağıdaki gibi güncelleyin:

    Python
    ALLOWED_HOSTS = ['www.bilisim.local', 'pserver.bilisim.local', '192.168.101.250', 'localhost', '127.0.0.1']
    

Adım 3: Statik Dosyalar ve Veritabanı Göçü

Nginx'in CSS, JavaScript ve resim dosyalarını (statik dosyalar) doğrudan sunabilmesi için Django'nun bu dosyaları tek bir klasörde toplaması gerekir.

  1. Yine core/settings.py dosyasının en altına şu satırı ekleyin:

    Python
    import os
    STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
    

    (Dosyayı kaydedip kapatın.)

  2. Veritabanı tablolarını oluşturun ve statik dosyaları toplayın:

    Bash
    python manage.py migrate
    python manage.py collectstatic
    
  3. Gunicorn'un düzgün çalışıp çalışmadığını test edelim:

    Bash
    gunicorn --bind 0.0.0.0:8000 core.wsgi
    

    (Hata vermiyorsa, terminali Ctrl+C ile durdurup sanal ortamdan çıkmak için deactivate yazabilirsiniz.)


Adım 4: Gunicorn için Systemd Servisi Oluşturma

Sunucu yeniden başladığında projenizin otomatik olarak ayağa kalkması ve arka planda sürekli çalışması için bir servis dosyası oluşturmalıyız.

  1. Servis dosyasını oluşturun:

    Bash
    sudo nano /etc/systemd/system/gunicorn.service
    
  2. İçerisine şu yapılandırmayı yapıştırın:

    Ini, TOML
    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=www-data
    Group=www-data
    WorkingDirectory=/var/www/bilisim.local/app
    ExecStart=/var/www/bilisim.local/app/venv/bin/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 core.wsgi:application
    
    [Install]
    WantedBy=multi-user.target
    

    (Not: Güvenlik için servisi www-data kullanıcısı ile çalıştırıyoruz.)

  3. app klasörünün sahipliğini Nginx ve Gunicorn'un erişebileceği şekilde güncelleyin:

    Bash
    sudo chown -R www-data:www-data /var/www/bilisim.local/app
    
  4. Servisi başlatın ve sistem başlangıcına ekleyin:

    Bash
    sudo systemctl daemon-reload
    sudo systemctl start gunicorn
    sudo systemctl enable gunicorn
    

Adım 5: Nginx Ters Vekil (Reverse Proxy) Yapılandırması

Şimdi, önceki makalede kurduğumuz Nginx sanal sunucusunu (Virtual Host), gelen istekleri doğrudan statik bir HTML dosyası yerine 8000 portunda çalışan Gunicorn'a yönlendirecek şekilde ayarlayacağız.

Bunu Webmin arayüzünden veya doğrudan Nginx konfigürasyon dosyasını düzenleyerek yapabilirsiniz. Terminal üzerinden yapmak daha kesindir:

  1. Nginx yapılandırma dosyasını açın (Önceki makalede oluşturduğumuz veya varsayılan dosya):

    Bash
    sudo nano /etc/nginx/sites-available/default
    

    (Eğer Webmin'de farklı bir isimle oluşturduysanız o dosyayı açın, örneğin /etc/nginx/conf.d/bilisim.local.conf)

  2. Dosya içeriğini (veya server { ... } bloğunun içini) aşağıdaki gibi düzenleyin:

    Nginx
    server {
        listen 80;
        server_name www.bilisim.local bilisim.local;
    
        # Gelen istekleri Gunicorn'a yönlendir
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        # Statik dosyaları Nginx doğrudan sunsun (Performans için)
        location /static/ {
            alias /var/www/bilisim.local/app/static/;
        }
    }
    
  3. Nginx ayarlarını test edin ve servisi yeniden başlatın:

    Bash
    sudo nginx -t
    sudo systemctl restart nginx
    

Adım 6: Ortamı Test Etme

İstemci bilgisayarınızdan (veya ağınızdaki herhangi bir cihazdan) tarayıcıyı açın ve adres çubuğuna yazın:

http://www.bilisim.local

Eğer her şeyi doğru yaptıysanız, Nginx isteği alacak, Gunicorn'a iletecek ve karşınızda meşhur Django Roketini (The install worked successfully! Congratulations!) göreceksiniz.

Tebrikler, Pardus üzerinde baştan sona (DNS -> Web Sunucusu -> Uygulama Sunucusu -> Framework) profesyonel bir tam yığın (full-stack) yayın ortamı kurdunuz.

Pardus Sunucu Üzerinde Django için PostgreSQL Kurulumu ve Entegrasyonu

Pardus sunucumuzda Nginx (Ters Vekil) ve Gunicorn (Uygulama Sunucusu) ile Django projemizi başarıyla yayınladık. Ancak Django, varsayılan olarak SQLite veritabanı ile gelir. SQLite, geliştirme aşaması için harika olsa da, aynı anda birden fazla kullanıcının bağlandığı gerçek üretim ortamları (production) için yetersiz kalabilir.

Bu makalede, açık kaynak dünyasının en güçlü ilişkisel veritabanı yönetim sistemlerinden biri olan PostgreSQL'i kuracak ve Django projemizi bu veritabanıyla konuşacak şekilde yapılandıracağız.


Adım 1: PostgreSQL ve Gerekli Kütüphanelerin Kurulumu

Öncelikle Pardus depolarından PostgreSQL'i ve Python'un bu veritabanı ile iletişim kurabilmesi için gereken geliştirici kütüphanelerini kurmalıyız.

  1. Pardus terminalinizi açın ve paket listelerini güncelleyerek kurulumu başlatın:

    Bash
    sudo apt update
    sudo apt install postgresql postgresql-contrib libpq-dev python3-dev -y
    

    (Not: libpq-dev ve python3-dev paketleri, bir sonraki adımda kuracağımız psycopg2 adaptörünün derlenebilmesi için zorunludur.)

  2. Kurulum bittiğinde PostgreSQL servisinin çalıştığından emin olun:

    Bash
    sudo systemctl status postgresql
    

Adım 2: Veritabanı ve Kullanıcı Oluşturma

PostgreSQL kurulduğunda güvenlik amacıyla sadece postgres isimli özel bir sistem kullanıcısı üzerinden işlem yapmanıza izin verir. Bu kullanıcıya geçiş yapıp projemiz için yeni bir veritabanı ve yetkili kullanıcı oluşturacağız.

  1. PostgreSQL komut satırına (psql) giriş yapın:

    Bash
    sudo -u postgres psql
    

    (Komut satırınız postgres=# şeklinde değişecektir.)

  2. Projemiz için bir veritabanı oluşturun (Örn: bilisim_db):

    SQL
    CREATE DATABASE bilisim_db;
    
  3. Bu veritabanını yönetecek, şifreli bir veritabanı kullanıcısı oluşturun:

    SQL
    CREATE USER db_admin WITH PASSWORD 'GucluSifre123!';
    
  4. Django'nun sorunsuz çalışabilmesi için karakter kodlaması ve zaman dilimi gibi bazı performans ve uyumluluk ayarlarını bu kullanıcıya tanımlayın:

    SQL
    ALTER ROLE db_admin SET client_encoding TO 'utf8';
    ALTER ROLE db_admin SET default_transaction_isolation TO 'read committed';
    ALTER ROLE db_admin SET timezone TO 'Europe/Istanbul';
    
  5. Oluşturduğumuz veritabanı üzerindeki tüm yetkileri bu kullanıcıya verin:

    SQL
    GRANT ALL PRIVILEGES ON DATABASE bilisim_db TO db_admin;
    
  6. PostgreSQL komut satırından çıkın:

    SQL
    \q
    

Adım 3: Django Projesine PostgreSQL Adaptörünün Kurulması

Django'nun PostgreSQL ile konuşabilmesi için psycopg2 isimli köprü paketine ihtiyacı vardır. Bu paketi, sistem geneline değil, sadece projemizin sanal ortamına (virtual environment) kurmalıyız.

  1. Proje dizinine gidin ve sanal ortamınızı aktif edin:

    Bash
    cd /var/www/bilisim.local/app
    source venv/bin/activate
    
  2. psycopg2 paketini kurun:

    Bash
    pip install psycopg2
    

Adım 4: Django Ayarlarının (settings.py) Güncellenmesi

Şimdi Django'ya artık SQLite'ı değil, yeni kurduğumuz PostgreSQL veritabanını kullanmasını söyleyeceğiz.

  1. Django ayar dosyanızı düzenlemek için açın:

    Bash
    nano core/settings.py
    
  2. Dosya içerisinde DATABASES bölümünü bulun. Varsayılan olarak şu şekildedir:

    Python
    # ESKİ HALİ
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    
  3. Bu bölümü silip, yerine Adım 2'de belirlediğimiz kendi veritabanı bilgilerimizi yazın:

    Python
    # YENİ HALİ
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'bilisim_db',
            'USER': 'db_admin',
            'PASSWORD': 'GucluSifre123!',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
    

    (Kaydedip çıkmak için Ctrl+O, Enter ve Ctrl+X kullanın.)


Adım 5: Göçlerin (Migrations) Uygulanması ve Test

Veritabanını değiştirdiğimiz için, Django'nun ihtiyaç duyduğu temel tabloları (kullanıcılar, oturumlar, yetkiler vb.) boş olan yeni PostgreSQL veritabanımıza yazdırmamız gerekiyor.

  1. Sanal ortam aktifken göçleri uygulayın:

    Bash
    python manage.py migrate
    

    (Ekranda birçok "Applying..." ve "OK" yazısı görmelisiniz. Bu, tabloların PostgreSQL içine başarıyla açıldığını gösterir.)

  2. Yeni veritabanımız için bir yönetici (superuser) hesabı oluşturalım:

    Bash
    python manage.py createsuperuser
    

    (Kullanıcı adı, e-posta ve şifrenizi belirleyin.)

  3. Yaptığımız değişikliklerin canlıya yansıması için arka planda çalışan Gunicorn servisimizi yeniden başlatın:

    Bash
    sudo systemctl restart gunicorn
    

Tebrikler! Artık http://www.bilisim.local/admin adresine giderek oluşturduğunuz yönetici hesabıyla giriş yapabilirsiniz. Tüm verileriniz güçlü ve güvenli PostgreSQL veritabanında tutulmaktadır.



Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu