Ubuntu VPS Üzerinde Sails.js Kullanarak Node.js Uygulaması Oluşturma Rehberi
Giriş: Node.js, Sails.js ve Neden Bir VPS?
Günümüzün hızla değişen web dünyasında, hızlı ve ölçeklenebilir uygulamalar geliştirmek kritik bir öneme sahiptir. Node.js, JavaScript’i sunucu tarafında çalıştırmamıza olanak tanıyan, olay tabanlı, asenkron bir çalışma zamanı ortamıdır. Yüksek performanslı ve gerçek zamanlı uygulamalar için ideal bir seçimdir. Ancak, Node.js ile sıfırdan bir uygulama geliştirmek, özellikle büyük projelerde, bazı zorlukları beraberinde getirebilir. İşte tam bu noktada Sails.js devreye girer.
Sails.js, Node.js için popüler bir MVC (Model-View-Controller) çerçevesidir. Ruby on Rails’ten ilham alarak geliştirilmiştir ve hızlı API’ler, tek sayfa uygulamaları (SPA’lar) ve gerçek zamanlı uygulamalar oluşturmayı kolaylaştırır. Sails.js, güçlü bir ORM (Object-Relational Mapping) olan Waterline ile birlikte gelir, bu da farklı veritabanlarıyla sorunsuz bir şekilde entegrasyonu mümkün kılar. Ayrıca, WebSocket desteği, otomatik RESTful API oluşturma ve güçlü bir yapılandırma sistemi gibi özellikleriyle geliştiricilere büyük kolaylıklar sunar.
Peki, neden bir Ubuntu VPS (Virtual Private Server) üzerinde bu uygulamayı barındırmalıyız? Bir VPS, paylaşımlı barındırma hizmetlerine kıyasla daha fazla kontrol, esneklik ve kaynak tahsisi sunar. Kendi işletim sisteminizi seçebilir, istediğiniz yazılımları kurabilir ve sunucunuzun performansını tamamen kendi ihtiyaçlarınıza göre optimize edebilirsiniz. Ubuntu, sunucu dünyasında en popüler ve güvenilir Linux dağıtımlarından biridir; geniş topluluk desteği, zengin paket yöneticisi ve güvenlik odaklı yapısıyla tercih sebebi olmaktadır. Bu makalede, Node.js ve Sails.js’in gücünü birleştirerek, Ubuntu VPS üzerinde nasıl bir web uygulaması oluşturacağınızı adım adım inceleyeceğiz.
Ön Gereksinimler
Bu rehbere başlamadan önce aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:
- Ubuntu VPS: Aktif bir Ubuntu 20.04 veya 22.04 LTS sunucusuna SSH erişiminiz olmalı. Çoğu bulut sağlayıcısından (AWS, DigitalOcean, Vultr, Linode vb.) kolayca temin edilebilir.
- SSH Erişimi: Sunucuya bağlanmak için bir SSH istemcisi (Linux/macOS için terminal, Windows için PuTTY veya WSL) kullanabilmelisiniz.
- Temel Linux Bilgisi: Temel komut satırı bilgisi (apt, cd, ls, nano/vim) faydalı olacaktır.
- Alan Adı (İsteğe Bağlı ama Önerilir): Uygulamanıza erişmek için bir alan adı (domain name) kullanmak, özellikle üretim ortamında, profesyonellik ve SSL sertifikası kurulumu için önemlidir. Alan adınızı VPS’inizin IP adresine yönlendirmiş olmalısınız.
Ubuntu VPS Hazırlığı
Sails.js uygulamanızı barındıracağımız Ubuntu VPS’i hazırlayarak işe başlayalım. Bu adımlar, sunucunuzun güncel olmasını, gerekli bağımlılıkların kurulmasını ve Node.js çalışma ortamının hazırlanmasını sağlayacaktır.
Sistemi Güncelleme
İlk olarak, SSH ile VPS’inize bağlanın ve sistem paket listelerini güncelleyip mevcut paketleri yükseltin. Bu, güvenlik açıklarını kapatır ve en yeni yazılım sürümlerini almanızı sağlar.
sudo apt update
sudo apt upgrade -y
Gerekli Araçları Kurma
Bazı temel araçlara ihtiyacımız olacak. curl genellikle Node.js kurulum komutlarını çalıştırmak için, git ise projenizi bir versiyon kontrol sisteminden çekmek için kullanılır.
sudo apt install curl git -y
Node.js ve npm Kurulumu (nvm ile)
Node.js’i kurmanın birden fazla yolu vardır, ancak nvm (Node Version Manager) kullanmak, farklı Node.js sürümleri arasında kolayca geçiş yapmanızı sağladığı için en çok önerilen yöntemdir. Bu, gelecekteki projeleriniz için de esneklik sağlar.
1. nvm’i Yükleme:
Aşağıdaki komut, nvm’in en son sürümünü indirip kuracaktır.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Kurulum tamamlandıktan sonra, kabuğunuzu yeniden başlatmanız veya nvm’in yolunu ~/.bashrc veya ~/.zshrc dosyasından yüklemeniz gerekebilir.
source ~/.bashrc
veya
source ~/.profile
2. Node.js’i Yükleme:
nvm yüklendikten sonra, Node.js’in en son LTS (Uzun Süreli Destek) sürümünü kurabiliriz.
nvm install --lts
nvm use --lts
nvm alias default 'lts/*'
Bu komutlar, LTS sürümünü kurar, aktif olarak kullanmaya başlar ve her yeni oturumda varsayılan olarak bu sürümün kullanılmasını sağlar.
Kurulumu doğrulamak için Node.js ve npm (Node Package Manager) sürümlerini kontrol edin:
node -v
npm -v
PM2 Kurulumu (Uygulama Yönetimi İçin)
Node.js uygulamaları, sunucu çökse veya yeniden başlatılsa bile çalışmaya devam etmelidir. PM2, Node.js uygulamalarını üretim ortamında yönetmek, yeniden başlatmak ve izlemek için güçlü bir süreç yöneticisidir.
npm install -g pm2
PM2’yi sistem başlangıcında otomatik olarak başlaması için yapılandırın:
pm2 startup systemd
Bu komut, size bir komut satırı çıktısı verecektir. Bu çıktıyı kopyalayıp çalıştırarak PM2’yi sistem başlatma hizmetlerine ekleyin. Örneğin:
sudo env PATH=$PATH:/home/kullanici_adi/.nvm/versions/node/vXX.X.X/bin /home/kullanici_adi/.nvm/versions/node/vXX.X.X/lib/node_modules/pm2/bin/pm2 startup systemd -u kullanici_adi --hp /home/kullanici_adi
kullanici_adi ve vXX.X.X kısımlarını kendi kullanıcı adınız ve Node.js sürümünüzle değiştirmeniz gerekecektir.
Veritabanı Kurulumu (PostgreSQL Örneği)
Sails.js, Waterline ORM sayesinde birçok farklı veritabanını destekler (PostgreSQL, MySQL, MongoDB, Redis vb.). Bu rehberde, güçlü ve popüler bir ilişkisel veritabanı olan PostgreSQL’i kullanacağız.
1. PostgreSQL Kurulumu:
sudo apt install postgresql postgresql-contrib -y
2. PostgreSQL Kullanıcısı ve Veritabanı Oluşturma:
PostgreSQL varsayılan olarak postgres adlı bir kullanıcı oluşturur. Bu kullanıcıya geçerek yeni bir veritabanı ve kullanıcı oluşturabiliriz.
sudo -i -u postgres
psql
psql kabuğunda aşağıdaki komutları çalıştırın (kendi güçlü şifrenizi belirleyin):
CREATE DATABASE sails_app_db;
CREATE USER sails_user WITH PASSWORD 'guclu_sifreniz';
GRANT ALL PRIVILEGES ON DATABASE sails_app_db TO sails_user;
\q
PostgreSQL kabuğundan çıkmak için \q, postgres kullanıcısından çıkmak için exit yazın.
Sails.js Kurulumu ve Proje Oluşturma
VPS’imiz hazır olduğuna göre, Sails.js CLI’ı kurup yeni bir proje oluşturabiliriz.
Sails.js CLI Kurulumu
Sails.js komut satırı arayüzünü (CLI) global olarak yükleyelim:
npm install -g sails
Yeni Sails.js Projesi Oluşturma
Projenizi barındırmak istediğiniz dizine gidin (örneğin /var/www/ altına) ve yeni bir Sails.js projesi oluşturun.
sudo mkdir -p /var/www
cd /var/www
sudo chown -R $USER:$USER /var/www # Dizin izinlerini kullanıcıya ver
sails new my-sails-app --no-template # Basit bir API projesi için --no-template kullanabiliriz
cd my-sails-app
--no-template seçeneği, yalnızca API odaklı bir proje oluşturmak istediğinizde front-end şablon motorlarını (EJS, Pug vb.) dahil etmez. Eğer bir web uygulaması (View’ler ile) oluşturmak istiyorsanız bu seçeneği kullanmayın.
Proje Yapısını İnceleme
Sails.js, projenizi oluşturduğunda belirli bir dizin yapısı oluşturur:
api/controllers: Uygulamanızın iş mantığını içeren dosyalar.api/models: Veritabanı tablolarınızın veya koleksiyonlarınızın tanımları.api/policies: İstekleri belirli eylemlere ulaşmadan önce kontrol eden yetkilendirme katmanı.config: Uygulamanın çeşitli yapılandırma ayarları (veritabanı, güvenlik, rota vb.).assets: Statik dosyalarınız (CSS, JS, resimler).views: Şablon dosyalarınız (eğer bir front-end şablon motoru kullanıyorsanız).
Bu yapıyı anlamak, uygulamanızı düzenli tutmanıza yardımcı olacaktır.
Sails.js Uygulamasını Yapılandırma
Uygulamayı çalışır hale getirmek için veritabanı bağlantısı ve ortam ayarları gibi temel yapılandırmaları yapmamız gerekiyor.
Veritabanı Bağlantısı (config/datastores.js)
PostgreSQL ile bağlantı kurmak için config/datastores.js dosyasını düzenlememiz gerekiyor.
Nano veya Vim gibi bir metin düzenleyici ile dosyayı açın:
nano config/datastores.js
Dosyanın içeriğini aşağıdaki gibi güncelleyin (mevcut default bağlantısını yorum satırı yapıp yenisini ekleyebilirsiniz):
module.exports.datastores = {
/*
Default datastore for models; used if a model doesn't explicitly specify
a datastore.
*/
// default: {
// adapter: 'sails-disk'
// },
productionPostgres: {
adapter: 'sails-postgresql',
url: 'postgresql://sails_user:guclu_sifreniz@localhost:5432/sails_app_db',
// Eğer farklı bir sunucuda ise 'localhost' yerine IP adresini veya alan adını yazın
ssl: false // Üretim ortamında true yapıp SSL sertifikası kullanmanız önerilir
},
/*
More datastores may be configured as needed.
(For example, a new datastore for your production database, or a datastore
for an external API.)
*/
};
Önemli: guclu_sifreniz kısmını kendi belirlediğiniz şifreyle değiştirin. sails-postgresql adaptörünü kullanabilmek için projenize eklemeniz gerekmektedir:
npm install sails-postgresql --save
Ortam Ayarları (config/env/production.js)
Sails.js, farklı ortamlar (geliştirme, üretim) için farklı yapılandırmalar yapmanıza olanak tanır. Üretim ortamı için config/env/production.js dosyasını düzenleyebiliriz. Özellikle port ayarını ve varsayılan veritabanını burada belirleyebiliriz.
nano config/env/production.js
Dosyayı aşağıdaki gibi düzenleyin:
/
* Production environment settings
*
* This file can include shared settings for a development team,
* as well as for the production environment.
*
* For more information, check out:
* https://sailsjs.com/docs/concepts/configuration
*/
module.exports = {
/*
Set the default database connection for models.
*/
models: {
datastore: 'productionPostgres', // datastores.js dosyasında tanımladığımız isim
migrate: 'alter', // 'safe' veya 'drop' da kullanılabilir. 'alter' mevcut veriyi korur.
},
/*
Set the HTTP port for your server.
*/
port: 1337, // Genellikle 80 veya 443 Nginx ile yönetilir, Sails.js için farklı bir port kullanın
/*
Set the log level.
*/
log: {
level: 'info'
},
// CORS ayarları (güvenlik için özelleştirilmesi önemli)
security: {
cors: {
allRoutes: true,
allowOrigins: ['https://example.com', 'https://www.example.com'], // Kendi alan adınızı buraya ekleyin
allowCredentials: true,
}
},
// Diğer üretim ortamı ayarları...
};
port: 1337 ayarı, uygulamanızın hangi portta çalışacağını belirtir. Genellikle Nginx gibi bir ters proxy kullanacağımız için bu portu doğrudan internete açmayacağız. allowOrigins kısmını kendi alan adlarınızla güncellemeyi unutmayın. models.migrate ayarı, veritabanı şemasının model değişikliklerine göre nasıl yönetileceğini belirler. Üretim ortamında genellikle safe veya alter tercih edilir.
Basit Bir API Oluşturma (Örnek Uygulama)
Şimdi Sails.js’in gücünü göstermek için basit bir kullanıcı API’si oluşturalım.
Model Oluşturma
Bir User modeli oluşturalım. Bu model, veritabanındaki users tablosuna karşılık gelecektir.
sails generate model User
api/models/User.js dosyasını açın ve aşağıdaki gibi düzenleyin:
// api/models/User.js
module.exports = {
attributes: {
username: {
type: 'string',
required: true,
unique: true
},
email: {
type: 'string',
required: true,
unique: true,
isEmail: true
},
password: {
type: 'string',
required: true
},
// Diğer kullanıcı özellikleri eklenebilir
},
// Şifre hashleme gibi yaşam döngüsü metotları eklenebilir (örneğin beforeCreate)
};
Controller Oluşturma
User modeli için CRUD (Create, Read, Update, Delete) operasyonlarını yönetecek bir kontrolcü oluşturalım.
sails generate controller User
api/controllers/UserController.js dosyasını açın ve basit bir kullanıcı oluşturma ve listeleme eylemi ekleyelim:
// api/controllers/UserController.js
module.exports = {
/
* UserController.create()
*/
create: async function (req, res) {
try {
const newUser = await User.create(req.body).fetch();
return res.status(201).json(newUser);
} catch (err) {
return res.serverError(err);
}
},
/
* UserController.find()
*/
find: async function (req, res) {
try {
const users = await User.find();
return res.ok(users);
} catch (err) {
return res.serverError(err);
}
},
/
* UserController.findOne()
*/
findOne: async function (req, res) {
try {
const user = await User.findOne({ id: req.param('id') });
if (!user) {
return res.notFound('User not found.');
}
return res.ok(user);
} catch (err) {
return res.serverError(err);
}
},
// Diğer CRUD eylemleri (update, delete) eklenebilir
};
Rota Tanımlama (config/routes.js)
Oluşturduğumuz eylemlere dışarıdan erişilebilmesi için rotaları tanımlamamız gerekiyor. Sails.js, RESTful rotaları otomatik olarak oluşturabilir, ancak özel rotalar da tanımlayabiliriz.
nano config/routes.js
Dosyayı açın ve aşağıdaki rotaları ekleyin:
// config/routes.js
module.exports.routes = {
/*
Make the view located at views/homepage.ejs (or views/homepage.jade,
etc. depending on your default view engine) your home page.
(Alternatively, remove this and add an index.html file to your
assets folder in order to serve static HTML content.)
*/
'/': { view: 'pages/homepage' }, // Eğer view kullanmıyorsanız bu satırı kaldırabilirsiniz.
/*
Custom routes here...
If a request to a URL doesn't match any of the routes in this file, it
is checked against "shadow routes" (also known as "blueprint routes").
These are routes that are automatically generated by Sails to hook up
your app's controllers and models to a RESTful API. For more info,
see:
https://sailsjs.com/docs/concepts/routes/shadow-routes
*/
// User API rotaları
'POST /user': 'UserController.create',
'GET /user': 'UserController.find',
'GET /user/:id': 'UserController.findOne',
};
Sails.js’in “blueprint routes” özelliği sayesinde, özel bir rota tanımlamadan da /user veya /user/:id gibi URL’lere erişebilirsiniz. Ancak, kontrol üzerinde daha fazla esneklik için özel rotalar tanımlamak genellikle daha iyidir.
Uygulamayı Test Etme (VPS Üzerinde)
Şimdi uygulamamızı VPS üzerinde çalıştırma zamanı.
Bağımlılıkları Yükleme
Projenin bağımlılıklarını yükleyin:
npm install
Uygulamayı Çalıştırma (Geliştirme Modunda)
Uygulamanızı geliştirme modunda çalıştırmak için:
sails lift
Bu komut, uygulamanızı varsayılan olarak 1337 portunda başlatacaktır. sails lift --prod komutu ile üretim modunda çalıştırabilirsiniz, ancak PM2 kullanacağımız için bu sadece test amaçlıdır.
Tarayıcınızdan http://VPS_IP_ADRESİNİZ:1337/user adresine giderek bir kullanıcı listesi (şu an boş) görebilirsiniz. Bir kullanıcı oluşturmak için Postman veya curl gibi bir araç kullanabilirsiniz:
curl -X POST -H "Content-Type: application/json" -d '{"username": "testuser", "email": "test@example.com", "password": "password123"}' http://VPS_IP_ADRESİNİZ:1337/user
Ardından http://VPS_IP_ADRESİNİZ:1337/user adresini tekrar kontrol ederek kullanıcının eklendiğini görebilirsiniz.
Uygulamayı Üretime Hazırlama ve Dağıtma
Geliştirme ortamında testlerimizi tamamladığımıza göre, uygulamamızı üretim ortamına uygun şekilde dağıtabiliriz.
PM2 ile Uygulamayı Yönetme
Uygulamayı PM2 ile başlatmak, uygulamanın sürekli çalışmasını, çökmesi durumunda otomatik olarak yeniden başlatılmasını ve CPU çekirdeklerinden tam olarak yararlanmasını sağlar.
cd /var/www/my-sails-app
pm2 start app.js --name "my-sails-app" -- env production
--name ile uygulamaya bir isim verilir. --env production ile Sails.js’in üretim modunda başlaması sağlanır.
PM2’nin uygulamanızı başarıyla başlattığını kontrol edin:
pm2 list
Uygulamanızın durumunu ve loglarını kontrol etmek için:
pm2 status my-sails-app
pm2 logs my-sails-app
Uygulamanızın her sunucu yeniden başlatmasında otomatik olarak başlamasını sağlamak için PM2’nin kaydetme özelliğini kullanın:
pm2 save
Nginx ile Ters Proxy ve SSL Yapılandırması
Kullanıcıların uygulamanıza güvenli ve standart HTTP/HTTPS portları (80/443) üzerinden erişmesini sağlamak için Nginx’i ters proxy olarak kullanacağız. Ayrıca Let’s Encrypt ile ücretsiz SSL sertifikası kurarak bağlantıyı şifreleyeceğiz.
1. Nginx Kurulumu:
sudo apt install nginx -y
sudo ufw allow 'Nginx Full'
sudo ufw enable # Eğer daha önce etkinleştirmediyseniz
2. Nginx Yapılandırma Dosyası Oluşturma:
Uygulamanız için Nginx’de yeni bir yapılandırma dosyası oluşturalım.
sudo nano /etc/nginx/sites-available/my-sails-app
Dosyanın içine aşağıdaki içeriği yapıştırın (alan adınızı ve Sails.js portunu güncellemeyi unutmayın):
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com; # Alan adınızı buraya yazın
location / {
proxy_pass http://localhost:1337; # Sails.js uygulamanızın çalıştığı port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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;
}
}
Bu yapılandırma, tüm gelen HTTP isteklerini Sails.js uygulamanızın çalıştığı 1337 portuna yönlendirir.
3. Yapılandırmayı Etkinleştirme:
Yapılandırma dosyasını sites-enabled dizinine bağlayarak etkinleştirin ve Nginx’i yeniden başlatın.
sudo ln -s /etc/nginx/sites-available/my-sails-app /etc/nginx/sites-enabled/
sudo nginx -t # Nginx yapılandırma dosyasında hata olup olmadığını kontrol et
sudo systemctl restart nginx
Şimdi tarayıcınızdan http://your_domain.com adresine giderek uygulamanıza erişebiliyor olmalısınız.
4. Certbot ile SSL Kurulumu (HTTPS):
Uygulamanızı güvence altına almak için Let’s Encrypt’ten ücretsiz bir SSL sertifikası alalım.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Certbot, Nginx yapılandırmanızı otomatik olarak güncelleyecek ve SSL sertifikasını kuracaktır. Sizden e-posta adresi ve hizmet şartlarını kabul etmeniz istenecektir. Sertifika otomatik olarak yenilenecek şekilde ayarlanacaktır.
Şimdi tarayıcınızdan https://your_domain.com adresine giderek uygulamanıza güvenli bir şekilde erişebiliyor olmalısınız.
Sık Karşılaşılan Sorunlar ve Çözümleri
Uygulama dağıtımı sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
- Port Çakışmaları:
* Sorun: Sails.js veya başka bir servis, zaten kullanımda olan bir portu kullanmaya çalışıyor.
* Çözüm:sudo netstat -tulnp | grepkomutuyla portu kullanan süreci bulun ve ya o süreci durdurun ya da Sails.js uygulamanızın portunu değiştirin (config/env/production.js). - Veritabanı Bağlantı Hataları:
* Sorun:Unable to connect to databaseveya benzeri bir hata.
* Çözüm:config/datastores.jsdosyasındaki veritabanı bilgilerinizi (kullanıcı adı, şifre, host, port, veritabanı adı) kontrol edin. PostgreSQL servisinin çalışıp çalışmadığını kontrol edin (sudo systemctl status postgresql). Kullanıcı izinlerini ve veritabanı adını doğrulayın. - PM2 Uygulaması Başlamıyor:
* Sorun:pm2 listkomutunda uygulamanızın durumuerroredveyastopped.
* Çözüm:pm2 logs my-sails-appkomutuyla logları kontrol edin. Hata mesajları size sorunun ne olduğu hakkında bilgi verecektir. Genellikle Node.js bağımlılıkları eksik olabilir (npm install --productionçalıştırmayı unutmayın) veya uygulama içinde bir kod hatası olabilir. - Nginx 502 Bad Gateway Hatası:
* Sorun: Nginx, isteği Sails.js uygulamasına iletemiyor.
* Çözüm: Sails.js uygulamanızın PM2 ile çalışır durumda olduğundan emin olun (pm2 list). Nginx yapılandırmanızdakiproxy_passadresinin (http://localhost:1337) doğru olduğundan ve Sails.js’in o portta çalıştığından emin olun. Nginx hata loglarını kontrol edin (sudo tail -f /var/log/nginx/error.log). - Alan Adı Yönlendirme Sorunları:
* Sorun: Alan adınız tarayıcıda çalışmıyor.
* Çözüm: Alan adınızın DNS kayıtlarının (A kaydı) VPS’inizin IP adresine doğru şekilde yönlendirildiğinden emin olun. DNS değişikliklerinin yayılması biraz zaman alabilir (24-48 saat).
Sonuç
Bu kapsamlı rehberde, Node.js ve Sails.js kullanarak bir web uygulamasını Ubuntu VPS üzerinde nasıl oluşturacağınızı, yapılandıracağınızı ve dağıtacağınızı adım adım öğrendiniz. Node.js’in performansıyla Sails.js’in geliştirme kolaylığını birleştirerek, güçlü ve ölçeklenebilir uygulamalar geliştirmek artık sizin için daha erişilebilir hale geldi.
VPS’inizi güncelledik, Node.js ve PM2 gibi temel araçları kurduk. PostgreSQL veritabanını yapılandırdık ve Sails.js projemizi oluşturarak basit bir API geliştirdik. Son olarak, Nginx’i ters proxy olarak kullanarak uygulamanızı güvenli bir şekilde internete açtık ve Let’s Encrypt ile SSL sertifikası kurarak HTTPS desteği sağladık.
Artık kendi Sails.js uygulamanızı bir üretim ortamında çalıştırma yeteneğine sahipsiniz. Bu bilgi birikimiyle, daha karmaşık projeleri hayata geçirebilir ve web geliştirme yolculuğunuzda yeni ufuklara yelken açabilirsiniz. Unutmayın, sürekli öğrenme ve pratik yapma, bu alandaki başarının anahtarıdır. İyi geliştirmeler!