Herkese merhaba, bugün NodeJS/Express kullanarak bir Amazon EC2 sunucusuna hızlı bir REST API dağıtmanın en sevdiğim yollarından biri hakkında bir eğitim yapmak istiyorum. Bu teknik esasen EC2 sunucunuzun GitHub deponuza gönderilen değişikliklere yanıt vermesini sağlar.
Bir NodeJS/Express uygulamasının yaşaması için makinenizde yeni bir dizin oluşturun. rekognition
çağırıyorum
Bir terminal açın ve package.json npm init -y
başlatmak için bu komutu çalıştırın.
express.js'yi yükleyin npm i express
Varsayılan rotada 'merhaba dünya' içeren temel bir ekspres sunucu oluşturun
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
'Merhaba Dünya!' gördüğünüzden emin olmak için test yapın. http://localhost:3000/
İyi iş, birinci adım tamamlandı! 💪
Dizininizde bir Git deposu başlatın ve ilk işleminizi gerçekleştirin —
git init git add . git commit -m "First commit"
GitHub hesabınızda uzak bir depo oluşturun
Yeni repo'yu Origin olarak ekleyin ve şubenizi itin.
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
<REMOTE_REPOSITORY_URL>
yeni oluşturduğunuz uzak deponun bağlantısıyla değiştirin.
Varsayılan dal olarak 'ana' yerine 'ana'yı kullanacak şekilde depo ayarlarınızı değiştirmeniz gerekebilir.
Bunu yaptıktan sonra 'ana' şubeyi silebilirsiniz.
Adım 2: tamamlayın! Gazla pişiriyoruz ⛽️
EC2 Bulut Sunucunuzu başlatma adımları şunlardır:
EC2 kontrol paneline gidin ve yeni bir bulut sunucusu başlatın.
Uygun bir AMI (Amazon Makine Görüntüsü) seçin; Amazon Linux 2 kullanıyorum.
Şimdi bir terminal üzerinden SSH aracılığıyla sunucunuza giriş yapmayı test edelim:
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
Buradaki değişkenleri EC2 bulut sunucunuz için tanımladığınız değerlerle değiştirin.
Bunu görüyorsanız sunucunuza bağlandınız demektir, tebrikler! 👏
NodeJS'yi sunucumuza kuralım:
sudo yum install -y nodejs
PM2'yi global olarak sunucumuza npm aracılığıyla yükleyin
sudo npm i -g pm2
Git'i sunucuya yükleyin ve kimlik bilgilerinizi yapılandırın:
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
Tamam, şimdi eğer mevcut değilse bir var/www/
klasörü oluşturacağız:
sudo mkdir -p /var/www
Ardından ec2 kullanıcımıza sahiplik ekleyin:
sudo chown -R ec2-user:ec2-user /var/www
/home klasöründeki kişiler yerine, sunucunuzun kökündeki dizine gidin 👌 cd ~/var/www
Şimdi buradan git depomuzu klonlayacağız: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
[USERNAME] [REPO_NAME] ve [YOUR_PROJECT_DIRECTORY] alanlarını kendi değerlerinizle değiştirin.
Daha sonra dizini depomuza değiştiriyoruz, böylece cd YOUR_PROJECT_DIRECTORY
pm2 kurulumumuz için ecosystem.config.js
dosyasını oluşturabilir:
nano ecosystem.config.js
Şuna benziyor:
module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };
Harika fasulye, tamam — bu oluşturulup kaydedildikten sonra uygulamayı pm2 ile başlatalım:
pm2 start ecosystem.config.js
Artık bir 'Merhaba Dünya!'nın olup olmadığını kontrol edebiliriz. 3000 numaralı bağlantı noktasındaki sunucumuzdan:
PM2'nin sunucu yeniden başlatıldığında otomatik olarak başlamasını sağlamak için şunu çalıştıralım:
pm2 save pm2 startup
Sunucunuzun çalışıp çalışmadığını kontrol etmek için pm2 status
kullanabilirsiniz; pm2'deki dokümanları buradan okuyabilirsiniz
Eğer bu noktaya kadar geldiyseniz, bir süperstarsınız ⭐️
Bu sürecimizdeki son adımdır. Ana şubemize bir değişiklik gönderildiğinde sunucumuzu güncellemek amacıyla Github eylemleri için bir .yml
dosyası oluşturacağız
Deponuzda 'Eylemler' sekmesine gidin ve yeni bir özel iş akışı oluşturun. Benim nodejs.yml
arıyorum
Repoyu güncellemek ve pm2'yi yeniden başlatmak için kullanılan .yml dosyası:
name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application
'Projenizin_dizini'ni güncellediğinizden emin olun
Son olarak bu ortam sırlarını eklemeniz gerekecek. REMOTE_HOST
bu sunucunuzun IP adresidir; REMOTE_USER
bu, Amazon Linux 2 AMI için ec2-user
ve ardından .pem dosyanızın içeriğini SSH_PRIVATE_KEY
olarak yapıştırın.
Bunların hepsini depo ayarlarında yapabilirsiniz:
Bu kadar! İşimiz bitti yaa 😁
Tüm bunları 'Merhaba Dünya' mesajını değiştirerek ve bu değişikliği ana şubenize göndererek test edebilirsiniz; o zaman güncellemeyi http://your.ip.address:3000
adresinde görmelisiniz.
Kurulumu biraz uzun bir süreç, ancak geliştirme yaparken değişiklikleri REST API sunucunuza otomatik olarak dağıtan kolay bir CI/CD hattına sahip olmak gerçekten güzel. Bu şekilde, değişiklikleri hızlı bir şekilde canlı olarak dağıtabilir ve bunları web/mobil uygulamanızın ön ucunda görebilirsiniz.
Bunun yorumlarda yararlı olup olmadığını bana bildirin ve okuduğunuz için teşekkürler!
Barış dışarı,
— Wes