GitHub Actions ile Otomatik Deployment
Tags: devops, githunt, deployment, digitalocean
Published: 2022-02-10 19:52:53

Canım şehrim Samsun'dan herkese selamlar. Sevdiğim insanlarla sevdiğim bir şehirde olduğum için mutluyum. Bu mutlulukla bir yazı yazmak istedim. Yazı da başlıktan anlaşılacağı gibi [GitHub Actions](https://docs.github.com/en/actions) kullanımıyla ilgili 🔥

[DigitalOcean'daki](https://www.digitalocean.com/) Ubuntu makineme elle deploy almak istemediğim için süreci [GitHub Actions](https://docs.github.com/en/actions) ile otomatikleştirme üzerine bir yazı yazacağım.

---

## GitHub Actions Nedir?
GitHub Actions, kaba tabirle yazdığımız kodlara bir workflow oluşturmamızı sağlamaktadır. Ben de bu yazıda GitHub Actions'ı projeyi sunucuda yayına almak ile ilgili kullanacağım.

---

## DigitalOcean Nedir?
Bu soruyu sormayacağınıza eminim ama laf olsun torba dolsun işte 😅 Şaka bir yana DigitalOcean'da, AWS, Google Cloud gibi bir sağlayıcıdır.

---

## Genel Hazırlık
Benim yapmak istediğim DigitalOcean'da açtığım bir Ubuntu makinede yayında olan sitemi main branche commit attığımda güncellemekti. Ben bunu nasıl yaptığımı anlatacağım. Yani makine açma gibi konulara değinmeyeceğim.

---

## SSH Bağlantısı ile İlgili Hazırlıklar

![image1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uu70ptc1y5rr9d235h9j.png)
İlk olarak GitHub repomuzda "Settings" menüsünde "Deploy keys" sekmesine tıklayalım. Oraya sunucumuzun ssh keyini eklememiz gerekli. Peki ssh keyi nasıl elde edeceğiz? Sunucunuzda **ssh-keygen** komutunu çalıştırın ve **cat ~/.ssh/id_rsa.pub** ile içeriğini koplayalayın. Sonrasında da GitHub'da "Add deploy key" diyerek ekleyin. Aynı zamanda **nano .ssh/authorized_keys** komutu ile bir dosya açıp içine **cat ~/.ssh/id_rsa.pub** çıktısını da ekleyin. Sonrasında da bu dosyaya yetki tanımlamak için **chmod 700 .ssh/authorized_keys** komutunu çalıştırın.

![image2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3ugpajti9o6901aob84.png)
İkinci olarak yine "Settings" menüsünde "Secrets->Actions" sekmesinde "New repository secret" diyerek 3 adet key ekleyeceğiz. Bu keylerin isimlerini ben **SSH_HOST**, **SSH_KEY** ve **SSH_USERNAME** verdim. İçerikleri ise:

**SSH_USERNAME:** Sunucudaki kullanıcı isminiz. Benim root
**SSH_HOST:** Sunucunuzun ip adresi
**SSH_KEY:** Gizli ssh keyiniz. **cat .ssh/id_rsa** komutu ile öğrenebilirsiniz.


![image3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2p6qw872qq1os63yu061.png)
Son adımımıza geldik. Şimdi görseldeki gibi **Actions** menüsüne tıklıyoruz ve **set up a workflow yourself** bağlantısına tıklayıp kendi dosyamızı özelleştireceğiz. Benim dosyam şu şekilde:

deploy.yml
```yaml
name: Bigcats Deploy Automation

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Deploy static site
      uses: appleboy/ssh-action@v0.1.2
      with: 
        host: ${{secrets.SSH_HOST}}
        key: ${{secrets.SSH_KEY}}
        username: ${{secrets.SSH_USERNAME}}
        
        script: cd /var/www/big-cats && git pull && systemctl restart nginx.service
```

Yapmak istediğim şey main branchinde yaptığım değişiklikleri otomatik olarak sunucuda yayına almaktı. Bu dosya ile bunu yapıyorum.

Umarım yazı işinize yaramıştır. Anlamadığınız yerleri, isteklerinizi veya önerilerinizi bana iletbilirsiniz. Keyifli haftalar dilerim :)