paint-brush
GitHub ve AWS EC2 Kullanılarak CI/CD Ardışık Düzeni Nasıl Oluşturulurile@wesleybaxterhuber
774 okumalar
774 okumalar

GitHub ve AWS EC2 Kullanılarak CI/CD Ardışık Düzeni Nasıl Oluşturulur

ile Wes Huber6m2024/04/30
Read on Terminal Reader

Çok uzun; Okumak

Bu teknik esasen EC2 sunucunuzun Github deponuza gönderilen değişikliklere yanıt vermesini sağlar.
featured image - GitHub ve AWS EC2 Kullanılarak CI/CD Ardışık Düzeni Nasıl Oluşturulur
Wes Huber HackerNoon profile picture

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.

İlk Yapılacak İlk Şey, “Merhaba Dünya”

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ı! 💪

Sonra Kodumuzu GitHub'a Gönderelim

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 ⛽️

Hadi Buluta Gidelim — Ec2 Sunucusunu Kurun

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.


  • Bir bulut sunucusu türü seçin (örneğin, ücretsiz kullanım kapsamındaysanız t2.micro).


  • Örnek ayrıntılarını yapılandırın, depolama alanı ekleyin ve gerektiği şekilde etiket ekleyin.


  • İhtiyaç duyacağınız bağlantı noktalarında gelen trafiğe izin vermek için bir güvenlik grubu yapılandırın (SSH ve uygulamanızın bağlantı noktası için en az TCP bağlantı noktası 22 ve ardından web trafiği için 3000).


  • Örneği inceleyin ve başlatın; SSH erişimi için kullanılan anahtar çiftini kaydettiğinizden emin olun.


Ş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! 👏

Henüz Bitirmedik — Daha Yeni Başlıyoruz 😏

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 ⭐️

GitHub Eylemleriyle Entegrasyon

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