MEAN Stack’i MEAN.JS ile CentOS 7 Üzerine Kurulum Rehberi
Giriş
Modern web uygulamaları geliştirmek, hızlı, ölçeklenebilir ve bakımı kolay çözümler gerektirir. Bu ihtiyaçları karşılamak üzere ortaya çıkan teknolojilerden biri de MEAN Stack’tir. MEAN, MongoDB, Express.js, AngularJS ve Node.js teknolojilerinin baş harflerinden oluşan bir kısaltmadır. Bu yığın, geliştiricilere tek bir dil (JavaScript) kullanarak tam yığın (full-stack) uygulamalar oluşturma imkanı sunar. Bu makalede, MEAN Stack’in ne olduğunu, neden tercih edildiğini ve MEAN.JS boilerplate’ini kullanarak CentOS 7 işletim sistemi üzerinde nasıl kurulacağını adım adım detaylı bir şekilde inceleyeceğiz.
CentOS 7, kararlılığı ve güvenlik özellikleriyle bilinen, kurumsal düzeyde bir Linux dağıtımıdır. MEAN Stack uygulamalarını barındırmak için sağlam bir temel sunar. MEAN.JS ise, MEAN Stack uygulamaları için önceden yapılandırılmış bir iskelet (boilerplate) sağlayarak geliştirme sürecini hızlandıran ve best practice’leri uygulayan bir projedir. Bu sayede, temel kurulum ve yapılandırma adımlarını atlayarak doğrudan uygulama geliştirmeye odaklanabilirsiniz.
Bu kapsamlı rehberde, bir CentOS 7 sunucusu üzerinde Node.js çalışma zamanını, npm paket yöneticisini, MongoDB veritabanını ve MEAN.JS projesini kurmak için gerekli tüm adımları ele alacağız. Ayrıca, kurulum sonrası uygulamanızı başlatma, güvenlik önlemleri ve temel sorun giderme ipuçlarına da değineceğiz. Bu rehberin sonunda, kendi MEAN Stack uygulamanızı geliştirmeye hazır, tam işlevsel bir ortamınız olacaktır.
Ön Gereksinimler
MEAN Stack kurulumuna başlamadan önce, bazı temel gereksinimleri karşıladığınızdan emin olmalısınız:
* CentOS 7 Sunucusu: En az 1 GB RAM ve 20 GB depolama alanına sahip, temiz bir CentOS 7 sunucusu. Minimal kurulum yeterlidir.
* Sudo Yetkileri: Sunucuda root olmayan ancak sudo yetkilerine sahip bir kullanıcı hesabınız olmalıdır. Tüm komutları bu kullanıcı ile çalıştıracağız.
* İnternet Bağlantısı: Sunucunun paketleri indirebilmesi için aktif bir internet bağlantısı gereklidir.
* Temel Linux Bilgisi: Komut satırı (CLI) kullanımı hakkında temel bilgi sahibi olmak faydalı olacaktır.
* Açık Portlar: Uygulamanın ve veritabanının dışarıdan erişilebilir olması için güvenlik duvarında belirli portların açılması gerekebilir.
Bu gereksinimleri karşıladığınızda, MEAN Stack kurulumuna geçmeye hazırsınız demektir.
Adım 1: Sistem Güncellemesi ve Temel Araçların Kurulumu
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin güncel olduğundan ve gerekli temel araçların kurulu olduğundan emin olmak en iyi uygulamadır. Bu, potansiyel uyumluluk sorunlarını önler ve en son güvenlik yamalarını almanızı sağlar.
Sistem Güncellemesi
Öncelikle, CentOS 7 sisteminizdeki tüm yüklü paketleri en son sürümlerine güncellemek için aşağıdaki komutu çalıştırın:
sudo yum update -y
Bu komut, sistemdeki tüm paket depolarını kontrol eder ve güncel olmayan paketleri indirip kurar. -y bayrağı, tüm onay sorularına otomatik olarak “evet” yanıtı vermenizi sağlar. Bu işlem biraz zaman alabilir.
EPEL Deposunun Kurulumu
Bazı yazılım paketleri varsayılan CentOS depolarında bulunmayabilir. Extra Packages for Enterprise Linux (EPEL) deposu, RHEL tabanlı sistemler için ek ve yüksek kaliteli paketler sağlayan popüler bir üçüncü taraf deposudur. Node.js gibi bazı araçların daha kolay kurulumu için bu depoyu eklemek faydalıdır.
sudo yum install -y epel-release
Temel Geliştirme Araçlarının Kurulumu
MEAN Stack kurulumu ve uygulamaların çalışması için Git, wget, curl gibi bazı temel geliştirme araçlarına ve ağ yardımcı programlarına ihtiyacımız olacak.
sudo yum install -y git wget curl net-tools policycoreutils-python3
* git: MEAN.JS boilerplate’ini GitHub’dan klonlamak için gereklidir.
* wget ve curl: Dosyaları indirmek ve web istekleri yapmak için kullanılır. Özellikle Node Version Manager (NVM) kurulumu için curl gereklidir.
* net-tools: Ağ yapılandırmasını kontrol etmek için ifconfig gibi komutları sağlar.
* policycoreutils-python3: SELinux ile ilgili bazı işlemleri yönetmek için gereklidir, özellikle MongoDB kurulumunda veya diğer servis yapılandırmalarında karşınıza çıkabilir.
Bu adımları tamamladıktan sonra, sisteminiz MEAN Stack bileşenlerini kurmaya hazır hale gelecektir.
Adım 2: Node.js ve npm Kurulumu
Node.js, sunucu tarafında JavaScript kodu çalıştırmak için kullanılan bir çalışma zamanı ortamıdır ve MEAN Stack’in “N” harfini temsil eder. npm (Node Package Manager) ise Node.js paketlerini yönetmek için kullanılan standart paket yöneticisidir. MEAN.JS uygulamaları, Node.js üzerinde çalışır ve bağımlılıklarını npm aracılığıyla yönetir.
Node.js’in farklı sürümleri arasında kolayca geçiş yapabilmek ve sisteminizi karmaşadan korumak için Node Version Manager (NVM) kullanmanızı şiddetle tavsiye ederiz.
NVM (Node Version Manager) Kurulumu
NVM, birden fazla Node.js sürümünü aynı sistemde yönetmenizi sağlayan bir komut dosyasıdır. Bu, farklı projeler için farklı Node.js sürümlerine ihtiyaç duyduğunuzda oldukça kullanışlıdır.
NVM’yi kurmak için aşağıdaki curl komutunu kullanın:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Not: v0.39.1 yerine NVM’nin en son kararlı sürümünü kontrol edip kullanmanız önerilir. GitHub deposunu ziyaret ederek güncel sürümü bulabilirsiniz.
Kurulum betiği tamamlandıktan sonra, NVM’nin kabuk ortamınıza yüklenmesi için terminali kapatıp yeniden açmanız veya aşağıdaki komutlardan birini çalıştırmanız gerekir:
source ~/.bashrc
Veya
source ~/.bash_profile
Veya
source ~/.zshrc # Eğer zsh kullanıyorsanız
Şimdi NVM’nin doğru bir şekilde kurulup kurulmadığını kontrol edelim:
nvm --version
Eğer bir sürüm numarası görüyorsanız, NVM başarıyla kurulmuştur.
Node.js Kurulumu
NVM aracılığıyla Node.js’in en son LTS (Uzun Süreli Destek) sürümünü kurmak için aşağıdaki komutu kullanın:
nvm install --lts
Bu komut, NVM’nin Node.js’in en son LTS sürümünü indirip kurmasını ve varsayılan olarak ayarlamasını sağlar. Belirli bir sürümü kurmak isterseniz (örneğin, Node.js 16):
nvm install 16
Kurulum tamamlandıktan sonra, Node.js ve npm’in doğru bir şekilde kurulduğunu ve PATH’inizde olduğunu doğrulamak için sürüm numaralarını kontrol edin:
node -v
npm -v
Her iki komut da sürüm numaralarını göstermelidir.
Alternatif: NodeSource Deposu ile Kurulum (İsteğe Bağlı)
Eğer NVM kullanmak istemiyorsanız, NodeSource depolarını kullanarak Node.js’i doğrudan yum ile kurabilirsiniz. Ancak bu yöntem, farklı Node.js sürümleri arasında geçiş yapma esnekliği sunmaz.
Örneğin, Node.js 16’yı kurmak için:
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
Bu komutlar, NodeSource deposunu sisteminize ekler ve ardından Node.js paketini kurar. Ancak bu rehberde NVM yöntemini takip etmeye devam edeceğiz.
Adım 3: MongoDB Kurulumu
MongoDB, MEAN Stack’in “M” harfini temsil eden, belgesel tabanlı (document-oriented) bir NoSQL veritabanıdır. JSON benzeri belgeler kullanarak verileri depolar, bu da Node.js ve JavaScript tabanlı uygulamalarla doğal bir uyum sağlar.
CentOS 7 üzerinde MongoDB’yi kurmak için, MongoDB’nin kendi yum deposunu sistemimize eklememiz gerekir.
MongoDB Deposunun Eklenmesi
MongoDB’nin en son kararlı sürümünü kurmak için (örneğin, MongoDB 5.0), aşağıdaki adımları izleyerek bir .repo dosyası oluşturun:
sudo nano /etc/yum.repos.d/mongodb-org-5.0.repo
Açılan editöre aşağıdaki içeriği yapıştırın:
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
Dosyayı kaydedin ve kapatın (Nano’da Ctrl+X, Y ve Enter).
Not: $releasever değişkeni, CentOS 7 için 7 olarak otomatik olarak çözümlenecektir. Eğer daha yeni bir MongoDB sürümü kurmak isterseniz, 5.0 yerine ilgili sürüm numarasını (örneğin, 6.0 veya 7.0) ve gpgkey URL’sini güncellemeniz gerekir. MongoDB’nin resmi dokümantasyonunu kontrol ederek en güncel bilgiyi edinebilirsiniz.
MongoDB Kurulumu
Depo eklendikten sonra, MongoDB’yi ve ilgili araçları kurmak için aşağıdaki komutu kullanın:
sudo yum install -y mongodb-org
Bu komut, mongodb-org paketi ile birlikte mongod (veritabanı sunucusu), mongos (sharding router), mongo (kabuk), mongodump, mongorestore gibi yardımcı programları da kuracaktır.
MongoDB Servisinin Başlatılması ve Etkinleştirilmesi
Kurulum tamamlandıktan sonra, MongoDB servisini başlatmalı ve sistem açılışında otomatik olarak başlaması için etkinleştirmelisiniz:
sudo systemctl start mongod
sudo systemctl enable mongod
Servisin durumunu kontrol etmek için:
sudo systemctl status mongod
Çıktıda active (running) ifadesini görmelisiniz.
Güvenlik Duvarı Yapılandırması
MongoDB varsayılan olarak 27017 numaralı portu kullanır. Eğer uygulamanız veya harici bir araç sunucunun dışından MongoDB’ye erişecekse, bu portu güvenlik duvarınızda açmanız gerekir:
sudo firewall-cmd --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
Bu komutlar, 27017 portunu kalıcı olarak TCP trafiğine açar ve güvenlik duvarı kurallarını yeniden yükler.
Temel MongoDB Güvenliği (İsteğe Bağlı ama Önemli)
Üretim ortamları için MongoDB’yi varsayılan ayarlarla bırakmak güvenlik riski taşır. En azından aşağıdaki önlemleri almanız önerilir:
* Bağlantıyı Sadece Yerel Adrese Kısıtlama: Varsayılan olarak mongod sadece 127.0.0.1 adresini dinler. Eğer yapılandırma dosyasında (/etc/mongod.conf) bindIp ayarı değiştirilmişse, bunu tekrar 127.0.0.1 veya sadece uygulamanızın erişeceği IP adresleriyle sınırlayın.
* Kimlik Doğrulama Etkinleştirme: MongoDB’de kullanıcılar oluşturup kimlik doğrulamayı etkinleştirmek, yetkisiz erişimi engeller. Bunun için /etc/mongod.conf dosyasında security.authorization: enabled satırını etkinleştirmeli ve mongo kabuğu üzerinden kullanıcılar oluşturmalısınız.
Bu adımları tamamladıktan sonra, MongoDB veritabanınız MEAN Stack uygulamanız için hazır olacaktır.
Adım 4: Git Kurulumu
Git, dağıtılmış bir versiyon kontrol sistemidir ve yazılım geliştirme projelerinde kod değişikliklerini takip etmek ve yönetmek için kullanılır. MEAN.JS boilerplate’ini GitHub’dan klonlamak için Git’e ihtiyacımız var. Bu adımı “Adım 1″de zaten gerçekleştirmiş olmalıyız, ancak emin olmak için tekrar kontrol edebiliriz.
Eğer daha önce kurmadıysanız veya emin değilseniz, aşağıdaki komutu çalıştırarak Git’i kurabilirsiniz:
sudo yum install -y git
Kurulumun başarılı olduğunu doğrulamak için Git sürümünü kontrol edin:
git --version
Bir sürüm numarası görmelisiniz. Artık MEAN.JS projesini klonlamaya hazırsınız.
Adım 5: MEAN.JS Uygulamasının Kurulumu ve Çalıştırılması
MEAN.JS, MEAN Stack uygulamaları için önceden yapılandırılmış bir iskelet (boilerplate) sunar. Bu iskelet, modüler bir yapı, kimlik doğrulama, örnek CRUD işlemleri ve geliştirme için Grunt gibi araçları içerir. Bu sayede, sıfırdan başlamak yerine sağlam bir temel üzerine inşa edebilirsiniz.
MEAN.JS Boilerplate’ini Klonlama
Öncelikle, MEAN.JS projesini GitHub deposundan sunucunuza klonlamanız gerekiyor. Uygulamanız için uygun bir dizine gidin (örneğin, /opt veya kullanıcınızın ana dizini) ve aşağıdaki komutu çalıştırın:
cd ~
git clone https://github.com/meanjs/mean.git meanjs-app
Bu komut, meanjs-app adında yeni bir dizin oluşturacak ve MEAN.JS boilerplate’ini bu dizine klonlayacaktır.
Proje Dizinine Gitme ve Bağımlılıkları Yükleme
Klonlama tamamlandıktan sonra, yeni oluşturulan meanjs-app dizinine gidin:
cd meanjs-app
Şimdi, projenin tüm Node.js bağımlılıklarını yüklemek için npm install komutunu çalıştırın:
npm install
Bu işlem, package.json dosyasında belirtilen tüm bağımlılıkları (Express.js, Mongoose, Angular, Passport.js vb.) indirip node_modules dizinine kuracaktır. Bu işlem, internet bağlantınızın hızına bağlı olarak biraz zaman alabilir.
Grunt CLI Kurulumu (Gerekirse)
MEAN.JS, geliştirme görevlerini otomatikleştirmek için Grunt.js görev çalıştırıcısını kullanır. Grunt komutlarını global olarak kullanabilmek için Grunt CLI’yi kurmanız gerekebilir:
npm install -g grunt-cli
Bu, Grunt komutlarını terminalinizden doğrudan çalıştırmanızı sağlar.
MEAN.JS Uygulamasını Başlatma
Artık tüm bağımlılıklar yüklendiğine göre, MEAN.JS uygulamasını başlatabilirsiniz. Uygulamayı geliştirme modunda başlatmak için aşağıdaki komutu kullanın:
npm start
Veya Grunt kullanıyorsanız:
grunt
Uygulama başarıyla başladığında, terminalde genellikle MEAN.JS application started on port 3000 veya benzeri bir mesaj görmelisiniz. Bu, uygulamanızın varsayılan olarak 3000 numaralı portta dinlediği anlamına gelir.
Güvenlik Duvarı Yapılandırması (Uygulama Portu)
Eğer uygulamanıza sunucunun dışından (web tarayıcınızdan) erişmek istiyorsanız, 3000 numaralı portu güvenlik duvarınızda açmanız gerekir:
sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --reload
Uygulamaya Erişim
Şimdi web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını kullanarak uygulamaya erişin:
http://your_server_ip:3000
MEAN.JS karşılama sayfasını görmelisiniz. Bu sayfa, uygulamanızın başarıyla çalıştığını gösterir. Artık MEAN Stack uygulamanızı geliştirmeye başlayabilirsiniz!
Adım 6: Geliştirme Ortamı ve Uygulama Yönetimi
Uygulamayı npm start ile başlatmak, terminal oturumu açık kaldığı sürece çalışmasını sağlar. Ancak, sunucuyu kapatırsanız veya terminali kapattığınızda uygulama durur. Üretim ortamında veya arka planda sürekli çalışması gereken uygulamalar için bir proses yöneticisi kullanmak önemlidir.
PM2 ile Uygulama Yönetimi
PM2, Node.js uygulamaları için popüler bir üretim proses yöneticisidir. Uygulamaların sürekli çalışmasını sağlar, yeniden başlatmalarını yönetir, logları tutar ve sistem başlangıcında otomatik olarak başlamalarını yapılandırabilir.
PM2’yi global olarak kurun:
sudo npm install -g pm2
MEAN.JS uygulamanızı PM2 ile başlatın:
cd ~/meanjs-app
pm2 start server.js --name meanjs-app
* server.js: MEAN.JS uygulamasının ana giriş dosyasıdır.
* --name meanjs-app: Uygulamanıza kolayca tanınabilir bir isim verir.
PM2’nin uygulamanızı başarıyla başlattığını doğrulamak için:
pm2 list
Uygulamanızın listelendiğini ve status sütununda online olduğunu görmelisiniz.
Sistem Başlangıcında Otomatik Başlatma
PM2’nin uygulamanızı sistem yeniden başlatıldığında otomatik olarak başlatmasını sağlamak için startup komutunu kullanın:
pm2 startup systemd
Bu komut, sisteminize uygun bir başlangıç betiği (CentOS için systemd) oluşturur ve size çalıştırmanız gereken bir komut verir. Örneğin:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your_username --hp /home/your_username
Yukarıdaki komutu kendi kullanıcı adınızla ve ana dizininizle (/home/your_username) güncelleyerek çalıştırın.
Ardından, mevcut PM2 proses listesini kaydetmeniz gerekir, böylece PM2 bunları yeniden başlatma sonrasında geri yükleyebilir:
pm2 save
Artık sunucunuz yeniden başlatılsa bile MEAN.JS uygulamanız otomatik olarak başlayacaktır.
Nginx ile Ters Proxy (İsteğe Bağlı, Üretim İçin Önemli)
Üretim ortamlarında, Node.js uygulamanızı doğrudan internete açmak yerine Nginx gibi bir ters proxy sunucusu kullanmak yaygın ve önerilen bir uygulamadır. Nginx, statik dosyaları daha verimli sunabilir, SSL/TLS sonlandırması sağlayabilir, yük dengeleme yapabilir ve Node.js uygulamanızı güvenlik katmanının arkasına gizleyebilir.
Nginx kurulumu ve yapılandırması bu makalenin kapsamının ötesindedir, ancak temel adımlar şunlardır:
1. Nginx’i kurun: sudo yum install -y nginx
2. Nginx servisini başlatın ve etkinleştirin: sudo systemctl start nginx, sudo systemctl enable nginx
3. Nginx için bir yapılandırma dosyası oluşturun (örneğin, /etc/nginx/conf.d/meanjs.conf) ve gelen istekleri Node.js uygulamanızın dinlediği porta (varsayılan 3000) yönlendirecek şekilde yapılandırın.
4. Güvenlik duvarında 80 (HTTP) ve 443 (HTTPS) portlarını açın.
Bu yapılandırma, uygulamanızın performansını ve güvenliğini önemli ölçüde artıracaktır.
Sorun Giderme
Kurulum sürecinde veya sonrasında bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bazı ipuçları:
* Güvenlik Duvarı Sorunları: Uygulamanıza veya MongoDB’ye erişemiyorsanız, ilk kontrol etmeniz gereken yer güvenlik duvarıdır. sudo firewall-cmd --list-all komutuyla açık portları kontrol edebilir ve firewall-cmd komutlarıyla portları açabilirsiniz.
* MongoDB Başlamıyor: sudo systemctl status mongod komutunu kontrol edin. Logları incelemek için sudo journalctl -u mongod komutunu kullanın. Genellikle disk alanı eksikliği veya yapılandırma dosyası (/etc/mongod.conf) hataları bu soruna yol açar.
* Node.js Sürüm Çakışmaları: Eğer NVM kullanıyorsanız, nvm use komutuyla doğru Node.js sürümünü kullandığınızdan emin olun. node -v ve npm -v komutlarının doğru sürümleri gösterdiğinden emin olun.
* npm install Hataları: Bağımlılıkları yüklerken hatalar alıyorsanız, genellikle eksik derleme araçları (build tools) veya Python bağımlılıkları neden olur. sudo yum groupinstall "Development Tools" komutunu çalıştırarak gerekli derleme araçlarını kurmayı deneyin.
* Uygulama Başlamıyor: npm start veya grunt komutunu çalıştırdıktan sonra hata mesajlarını dikkatlice okuyun. Genellikle bir portun zaten kullanılıyor olması veya veritabanı bağlantı sorunları bu duruma neden olur.
* SELinux Hataları: CentOS’ta SELinux etkin olabilir ve bazı servislere veya dizinlere erişimi kısıtlayabilir. Eğer SELinux ile ilgili bir hata alırsanız, geçici olarak sudo setenforce 0 ile devre dışı bırakıp sorunun devam edip etmediğini kontrol edebilirsiniz. Ancak kalıcı çözüm, doğru SELinux politikalarını yapılandırmaktır.
Sonuç
Bu kapsamlı rehberde, MEAN Stack’i MEAN.JS boilerplate’i ile CentOS 7 sunucusu üzerine nasıl kuracağınızı adım adım öğrendiniz. Node.js ve npm’i NVM aracılığıyla kurarak esnek bir geliştirme ortamı oluşturdunuz, MongoDB’yi yapılandırıp başlattınız ve son olarak MEAN.JS uygulamasını klonlayıp çalıştırdınız. Ayrıca, uygulamanızın sürekli çalışmasını sağlamak için PM2 gibi bir proses yöneticisi kullanmanın önemini ve temel sorun giderme ipuçlarını da ele aldık.
Artık tam işlevsel bir MEAN Stack geliştirme ortamına sahipsiniz. Bu kurulum, hızlı prototipleme ve modern web uygulamaları geliştirmek için sağlam bir temel sunar. MEAN Stack’in JavaScript tabanlı tek dil yaklaşımı, geliştirme sürecini basitleştirir ve hem ön uç hem de arka uç geliştirme için aynı yetenekleri kullanmanıza olanak tanır. MongoDB’nin esnekliği, Express.js’in hafifliği, Angular’ın güçlü ön uç yetenekleri ve Node.js’in yüksek performanslı sunucu tarafı çalışma zamanı, birlikte ölçeklenebilir ve dinamik web uygulamaları oluşturmanız için mükemmel bir kombinasyon sunar.
Bundan sonraki adımlarınız, MEAN.JS boilerplate’ini kendi ihtiyaçlarınıza göre özelleştirmek, yeni özellikler eklemek, kimlik doğrulama mekanizmalarını geliştirmek ve uygulamanızı üretim ortamına dağıtmak olacaktır. Unutmayın, güvenlik ve performans optimizasyonları her zaman öncelikli olmalıdır. Başarılar dileriz!