erp-platform/configs/deployment
2025-08-28 15:56:22 +03:00
..
configs classroomhub nginx ayarlar 2025-08-28 15:56:22 +03:00
scripts docker api ve ui profile olarak ayrıldı 2025-08-12 16:30:57 +03:00
docker-compose-app.dev.yml Düzenleme 2025-08-11 09:34:44 +03:00
docker-compose-app.production.yml docker api ve ui profile olarak ayrıldı 2025-08-12 16:30:57 +03:00
docker-compose-app.yml docker api ve ui profile olarak ayrıldı 2025-08-12 16:30:57 +03:00
docker-compose-data.yml CustomComponents hataları 2025-08-11 13:48:36 +03:00
docker-compose-devops.yml docker api ve ui profile olarak ayrıldı 2025-08-12 16:30:57 +03:00
Dockerfile init project 2025-05-06 09:45:49 +03:00
README.md Düzenleme 2025-08-11 09:34:44 +03:00
Readme_Devops.md Düzenleme 2025-08-11 09:34:44 +03:00
Readme_Production.md Readmes 2025-05-08 13:59:06 +03:00
Readme_Webmin.md tek sunucuda çalışabilecek şekilde 2025-05-08 22:16:55 +03:00

1. SSH Config

~/.ssh/config dosyası içeriği

Host DevOps
    HostName 192.168.1.6
    User kurs

Host PlatformDev
    HostName 192.168.1.106
    User kurs

Host PlatformProd
    HostName 192.168.1.137
    User kurs

2. Altyapı

  1. DevOps
    • devops.sozsoft.com
    • 192.168.1.6
    • kurs:ChatR+...
  2. Dev
    • kurs-dev-cdn.sozsoft.com
    • kurs-dev-api.sozsoft.com
    • kurs-dev.sozsoft.com
    • 192.168.1.106
    • kurs:ChatR+...
  3. Prod
    • cdn.sozsoft.com
    • api.sozsoft.com
    • sozsoft.com
    • 192.168.1.137
    • kurs:ChatR+...

3. Kurulum

Buradaki maddeler tüm makinalarda başlangıçta yapılır.

3.1. Firewall ve SSH

3.2. Docker kurulumu

  • https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    apt-cache policy docker-ce
    sudo apt install docker-ce
    sudo systemctl status docker
    sudo usermod -aG docker ${USER}
    su - ${USER}
    

3.3. Sertifika alma

certbot ile otomatik sertifika bu şekilde alınıyor. Ancak 3 ayda bir aşağıdaki komutları manuel çalıştırıp üretilen txt yi DNS sozsoft.com domaine eklememiz gerekiyor. Bu işlemi otomatize edilebilecek şekilde reha bey ile görüşülecektir.

sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --manual --preferred-challenges=dns --email system@sozsoft.com --agree-tos -d sozsoft.com -d *.sozsoft.com

sudo su
cd /etc/letsencrypt/archive
chgrp docker -R sozsoft.com
chown ${USER} -R sozsoft.com

Sertifika ortam makinalarına manuel olarak kopyalanır

  • DevOps makinasından sertifikalar indirilir (indirmek için sudo su, cp -R /etc/letsencrypt/archive/sozsoft.com /home/${USER})
  • Ortam makinasına /home/${USER} klasörüne yüklenir

4. DevOps Makina Kurulumu

DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değerlendirildi ve Github benzerliği, FOSS olması ve action yml'ları kullanabilmesi sebebiyle Forgejo seçildi. Bunun yanında OneDev de istenen bütün özellikleri barındırıyor, o da ikinci alternatif olarak seçildi.

Aşağıdaki kod n8n çalışmadığı zaman kullanılacaktır. docker run --rm -v kurs-devops_n8n_data:/data alpine chown -R 1000:1000 /data

Forgejo Kurulumu

Runner yapılandırması

  • DevOps, PlatformDev ve PlatformProd makinaları için aşağıdaki yapılandırma yapıldı:

  • https://forgejo.org/docs/latest/admin/runner-installation/#oci-image-installation

    {
      "id": 1,
      "uuid": "8407f0f8-f296-46af-adba-5ee88ffdfccd",
      "name": "devops",
      "token": "39f9af97febdd8ea131a3a65c4710e7682a79635",
      "address": "https://devops.sozsoft.com",
      "labels": ["devops:docker://code.forgejo.org/oci/alpine:3"]
    }
    
  • forgejo-runner için config.yml /data klasöründe olmalı ve içeriği şu şekilde olmalı

    runner:
      insecure: true
    
  • aynı zamanda docker-compose'da forgejo-runner daemon --config /data/config.yml olarak çalıştırılmalı

  • daemon.json ~/forgejo-runner klasörüne kopyalanmalı

    {
      "insecure-registries": ["devops.sozsoft.com"]
    }
    
  • ardından docker-compose-forgejo-runner.yml içerisine docker-in-docker kısmına şu volume eklenmeli

    volumes:
      - ./daemon.json:/etc/docker/daemon.json
    
  • forgejo/data/gitea/conf/app.ini dosyasında server kısmı şu şekilde olmalı

    [server]
    APP_DATA_PATH = /data/gitea
    DOMAIN = devops.sozsoft.com
    SSH_DOMAIN = devops.sozsoft.com
    DISABLE_SSH = false
    SSH_PORT = 222
    SSH_LISTEN_PORT = 22
    LFS_START_SERVER = true
    LFS_JWT_SECRET = CDy3ldC2cTbYHalO_dH68QJseoD7dGvH9x0Zx9aq2J0
    OFFLINE_MODE = true
    PROTOCOL=http
    HTTP_PORT = 3000
    ROOT_URL = https://devops.sozsoft.com/
    CERT_FILE = /etc/ssl/cert1.pem
    KEY_FILE = /etc/ssl/privkey1.pem
    

Diğer yapılandırmalar

  • Base image build ve push
docker build -t devops.sozsoft.com/kurs/base-image:latest -f Kurs.WorkflowBaseImage.Dockerfile .
docker push devops.sozsoft.com/kurs/base-image:latest
  • Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. docker login devops.sozsoft.com

  • Git kurulumu

    • Aşağıdaki komut ile SSH anahtarı oluşturulur. Passphrase boş geçilerek oluşturulabilir.

      cd ~/
      ssh-keygen -t ed25519 -C "platformdev/prod@sozsoft.com"
      
    • Yukarıdaki komutun çıktısı olan ".pub" dosyasıdır. Bu dosyanın içeriği devops.sozsoft.com repository nin Deploy key sekmesine eklenir.
      cat ~/.ssh/id_ed25519.pub

    • https://devops.sozsoft.com/Kurs/kurs-platform/settings/keys kısmına Add New Key diyerek yapıştırılır.

    • Aşağıdaki komutlar sırasıyla çalıştırılır.

      git clone ssh://git@devops.sozsoft.com:222/Kurs/kurs-platform.git
      git config http.sslVerify false # Eğer lazım olursa kullanılabilir
      

Rocket Chat Sistemi Kurulumu

  • Rocket Chat ve Forgejo aynı makinaya kurulacağı için, yukarıda yapılan yapılandırmaların bazıları değiştirilmelidir.
  • Rocket Chat'siz yapılandırma "docker-compose-devops-forgejo.yml" de bulunmaktadır. Rocket Chat'li yapılandırma için "docker-compose-devops.yml" kullanılmalıdır.
  • Öncelikle 80 ve 443 artık forgejo tarafından değil nginx servisi tarafından dinlenmeli. Bu değişiklikl docker-compose dosyasında mevcut.
  • Forgejo HTTPS yapılandırması kaldırılarak, HTTPS kısmı nginx'e devredilmeli. Devops makinasında, ~/forgejo/data/gitea/conf/app.ini dosyasında şu değişiklikler yapılır:
  [server]
  PROTOCOL=http
  HTTP_PORT = 80
  # CERT_FILE = /etc/ssl/cert1.pem
  # KEY_FILE = /etc/ssl/privkey1.pem
  • Kurulumdan sonra default olarak Starter Plan ile başlıyor. https://chat.sozsoft.com/admin/subscription adresine giderek "Cancel Subscription"a basılmalı, böylece Community Edition kullanılamya başlanacaktır.
  • Setup Wizard'da admin kullanıcı olarak sedat.ozturk ve 1q... parolası seçilmiştir.

5. Dev - Prod Ortam Makinaları Kurulumu

Yeni bir ortam makina kurulumunda bir defaya mahsus yapılacaktır.

  • Api ve Ui projeleri için Dockerfile konfigürasyonu
  • api ve migrator için appsettings.Dev/Prod.json hazırlanır.
  • docker-compose-dev/production.yml dosyası hazırlanır.
  • ui için env.dev/production hazırlanır.
  • Yukarıda Git Kurulumu maddesinde adımlar izlenir.
  • Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. docker login devops.sozsoft.com
  • cd ~/kurs-platform/configs/deployment klasöründe komut çalıştırılır. docker compose -f ./docker-compose-data.yml up -d

6. Deployment

6.1. Script ile Deployment

Scriptler ile güncellemek için aşağıdaki bash dosyaları çalıştırılır, veya bir altta manuel güncelleme metodu kullanılabilir.

Not: Eğer aşağıda kullanılan .sh dosyalarının içeriğinde bir güncelleme olduysa, son halinin çalışması için, çalıştırmadan önce manuel olarak git fetch && git pull yapılmalıdır.

App

DevOps Makinasında:
./kurs-platform/configs/deployment/scripts/1-devops-api.sh
./kurs-platform/configs/deployment/scripts/1-devops-ui.sh dev/production

Dev / Prod Ortam Makinalarında:
./kurs-platform/configs/deployment/scripts/2-dev-app.sh

Migrator

DevOps Makinasında: ./kurs-platform/configs/deployment/scripts/1-devops-migrator.sh

Dev / Prod Ortam Makinalarında:
./kurs-platform/configs/deployment/scripts/2-dev-migrator.sh
Seedleri çalıştırmak için sonuna "true" eklenir. Örn: 2-dev-migrator.sh true

6.2. Manuel Deployment

DevOps

cd ~/kurs-platform
git checkout master/branch
git fetch && git pull
cd ~/kurs-platform/api
docker build \
-t devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-api:latest \
-f Kurs.Platform.HttpApi.Host.Dockerfile .
docker push devops.sozsoft.com/kurs/kurs-platform-api:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-api:latest

docker build \
-t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-migrator:latest \
-f Kurs.Platform.DbMigrator.Dockerfile .
docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-migrator:latest

cd ~/kurs-platform/ui
docker build \
-t devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-ui:latest \
-f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev .
docker push devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-ui:latest

Dev-Prod Ortam Makinaları

cd ~/kurs-platform/configs/deployment
docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml stop
docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml rm -f
#docker-compose-app.production.yml
cd ~/kurs-platform
git checkout master/branch
git fetch && git pull
cd ~/kurs-platform/configs/deployment
docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml pull
docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml up migrator -d
docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml up -d

7. Docker Yardımcı Bilgiler

7.1.Komutlar

  • docker build -t devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 -f Kurs.Platform.HttpApi.Host.Dockerfile .
  • docker build -t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 -f Kurs.Platform.DbMigrator.Dockerfile .
  • docker build -t devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 -f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev .
  • docker run -it --entrypoint /bin/sh kurs-platform-api
  • docker run -it --entrypoint /bin/sh --network kurs-platform_default kurs-platform-api --env ASPNETCORE_ENVIRONMENT=Development --port 8080:80
  • docker run -it --entrypoint /bin/sh --network kurs-platform_default --env ASPNETCORE_ENVIRONMENT=Development kurs-platform-migrator
  • docker login devops.sozsoft.com
  • docker push devops.sozsoft.com/kurs/kurs-platform-api:1.0.0
  • docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0
  • docker push devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0

7.2. SSL olmayan registry'e bağlanma

cd ~/
touch daemon.json
{
 "insecure-registries": ["devops.sozsoft.com"]
}
sudo cp daemon.json /etc/docker
sudo systemctl stop docker
sudo systemctl start docker

7.3. Sunucu disk alanı yönetimi

  • Sunucuda kalan disk alanı belirli bir seviyenin altına inince bize alarm göndermeli. Şu an bu sistem tarafındaki sanallaştırma platformu üzerinden takip ediliyor.
  • Sunucuda neyin disk alanını kapladığını öğrenmek için:
    cd / && sudo df -h veya
    cd / && sudo ncdu
    Eğer yüklü değilse sudo apt-get install ncdu
  • Docker'da neyin ne kadar yer kapladığını görmek için:
    docker system df
  • Temizlemek için:
    docker image prune -a --filter "until=24h"
    docker builder prune -a --filter "until=24h"