2025-05-06 06:45:49 +00: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
2025-05-06 11:03:45 +00:00
- devops.sozsoft.com
2025-05-06 06:45:49 +00:00
- 192.168.1.6
- kurs:ChatR+...
1. Dev
2025-05-06 11:03:45 +00:00
- platform-dev-cdn.sozsoft.com
- platform-dev-api.sozsoft.com
- platform-dev.sozsoft.com
2025-05-06 06:45:49 +00:00
- 192.168.1.106
- kurs:ChatR+...
1. Prod
2025-05-06 11:03:45 +00:00
- platform-cdn.sozsoft.com
- platform-api.sozsoft.com
- platform.sozsoft.com
2025-05-06 06:45:49 +00:00
- 192.168.1.137
- kurs:ChatR+...
# 3. Kurulum
Buradaki maddeler tüm makinalarda başlangı çta yapı lı r.
## 3.1. Firewall ve SSH
- https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-22-04
- Client makinası nda anahtarları n oluşturulması gerekiyor. Client makinada ssh_keygen komutu çalı ştı rı lı r dosya adı belirlenmezse C:\Users\sedat.ozturk\.ssh klasörün altı nda id_rsa ve id_rsa.pub isimli 2 dosya oluşturur.
- Bu kı sı mda amaç C:\Users\sedat.ozturk\.ssh dosyası nı n içerisindeki id_rsa.pub dosyası nı n içeriğini Prod makinası ndaki ~/.ssh klasöründeki authorized_keys dosyası nı n içerisine kopyalacaktı r.
- https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-22-04
- Bu sayfadaki kı sı mlar yapı lmadı . Sunucu kurulumu sı rası nda root dı şı nda ayrı bir kullanı cı zaten oluşturulmuştu.
## 3.2. Docker kurulumu
- https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
```sh
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
2025-05-06 11:03:45 +00:00
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.
2025-05-06 06:45:49 +00:00
```
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
2025-05-06 11:03:45 +00:00
sudo certbot certonly --manual --preferred-challenges=dns --email system@sozsoft.com --agree-tos -d sozsoft.com -d *.sozsoft.com
2025-05-06 06:45:49 +00:00
sudo su
cd /etc/letsencrypt/archive
2025-05-06 11:03:45 +00:00
chgrp docker -R sozsoft.com
2025-05-06 14:56:50 +00:00
chown sedat -R sozsoft.com
2025-05-06 06:45:49 +00:00
```
Sertifika ortam makinaları na manuel olarak kopyalanı r
2025-05-06 14:56:50 +00:00
- DevOps makinası ndan sertifikalar indirilir (indirmek için sudo su, cp -R /etc/letsencrypt/archive/sozsoft.com /home/sedat)
- Ortam makinası na /home/sedat klasörüne yüklenir
2025-05-06 06:45:49 +00:00
# 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.
### Forgejo Kurulumu
- https://forgejo.org/docs/next/admin/installation-docker/
- docker-compose-devops.yml dosyası kullanı ldı (bunu git repo'dan manuel olarak kopyaladı k)
- Kullanı cı lar eklendi, organizasyon oluşturuldu, BT takı mı oluşturuldu ve organizasyona eklendi
2025-05-06 19:15:47 +00:00
#### Runner yapı landı rması
2025-05-06 06:45:49 +00:00
- 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
```json
{
"id": 1,
"uuid": "8407f0f8-f296-46af-adba-5ee88ffdfccd",
"name": "devops",
"token": "39f9af97febdd8ea131a3a65c4710e7682a79635",
2025-05-06 11:03:45 +00:00
"address": "https://devops.sozsoft.com",
2025-05-06 06:45:49 +00:00
"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ı
```yaml
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ı
```json
{
2025-05-06 11:03:45 +00:00
"insecure-registries": ["devops.sozsoft.com"]
2025-05-06 06:45:49 +00:00
}
```
- ardı ndan docker-compose-forgejo-runner.yml içerisine docker-in-docker kı smı na şu volume eklenmeli
```yaml
volumes:
- ./daemon.json:/etc/docker/daemon.json
```
2025-05-06 19:15:47 +00:00
- forgejo/data/gitea/conf/app.ini dosyası nda server kı smı şu şekilde olmalı
2025-05-06 06:45:49 +00:00
```ini
[server]
APP_DATA_PATH = /data/gitea
2025-05-06 11:03:45 +00:00
DOMAIN = devops.sozsoft.com
SSH_DOMAIN = devops.sozsoft.com
2025-05-06 06:45:49 +00:00
DISABLE_SSH = false
SSH_PORT = 222
SSH_LISTEN_PORT = 22
LFS_START_SERVER = true
LFS_JWT_SECRET = CDy3ldC2cTbYHalO_dH68QJseoD7dGvH9x0Zx9aq2J0
OFFLINE_MODE = true
2025-05-06 19:15:47 +00:00
PROTOCOL=http
HTTP_PORT = 3000
2025-05-06 11:03:45 +00:00
ROOT_URL = https://devops.sozsoft.com/
2025-05-06 06:45:49 +00:00
CERT_FILE = /etc/ssl/cert1.pem
KEY_FILE = /etc/ssl/privkey1.pem
```
### Diğer yapı landı rmalar
2025-05-06 08:04:37 +00:00
- Base image build ve push
2025-05-06 06:45:49 +00:00
```sh
2025-05-06 11:03:45 +00:00
docker build -t devops.sozsoft.com/kurs/base-image:latest -f Kurs.WorkflowBaseImage.Dockerfile .
docker push devops.sozsoft.com/kurs/base-image:latest
2025-05-06 06:45:49 +00:00
```
2025-05-06 11:03:45 +00:00
- Docker login işlemi "bot" kullanı cı ile yapı lı r. SSH yapı lı r. `docker login devops.sozsoft.com`
2025-05-06 06:45:49 +00:00
- Git kurulumu
- Aşağı daki komut ile SSH anahtarı oluşturulur. Passphrase boş geçilerek oluşturulabilir.
```sh
cd ~/
2025-05-06 11:03:45 +00:00
ssh-keygen -t ed25519 -C "platformdev/prod@sozsoft.com"
2025-05-06 06:45:49 +00:00
```
2025-05-06 11:03:45 +00:00
- 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.
2025-05-06 06:45:49 +00:00
`cat ~/.ssh/id_ed25519.pub`
2025-05-06 11:03:45 +00:00
- https://devops.sozsoft.com/Kurs/kurs-platform/settings/keys kı smı na Add New Key diyerek yapı ştı rı lı r.
2025-05-06 06:45:49 +00:00
- Aşağı daki komutlar sı rası yla çalı ştı rı lı r.
```sh
2025-05-06 11:03:45 +00:00
git clone ssh://git@devops.sozsoft.com:222/Kurs/kurs-platform.git
2025-05-06 06:45:49 +00:00
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:
```ini
[server]
PROTOCOL=http
HTTP_PORT = 80
# CERT_FILE = /etc/ssl/cert1.pem
# KEY_FILE = /etc/ssl/privkey1.pem
```
2025-05-06 11:03:45 +00:00
- 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.
2025-05-06 06:45:49 +00:00
- 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.
2025-05-06 11:03:45 +00:00
- Docker login işlemi "bot" kullanı cı ile yapı lı r. SSH yapı lı r. `docker login devops.sozsoft.com`
2025-05-06 06:45:49 +00:00
- 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
```sh
cd ~/kurs-platform
git checkout master/branch
git fetch & & git pull
cd ~/kurs-platform/api
docker build \
2025-05-06 11:03:45 +00:00
-t devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-api:latest \
2025-05-06 06:45:49 +00:00
-f Kurs.Platform.HttpApi.Host.Dockerfile .
2025-05-06 11:03:45 +00:00
docker push devops.sozsoft.com/kurs/kurs-platform-api:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-api:latest
2025-05-06 06:45:49 +00:00
docker build \
2025-05-06 11:03:45 +00:00
-t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-migrator:latest \
2025-05-06 06:45:49 +00:00
-f Kurs.Platform.DbMigrator.Dockerfile .
2025-05-06 11:03:45 +00:00
docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-migrator:latest
2025-05-06 06:45:49 +00:00
cd ~/kurs-platform/ui
docker build \
2025-05-06 11:03:45 +00:00
-t devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 \
-t devops.sozsoft.com/kurs/kurs-platform-ui:latest \
2025-05-06 06:45:49 +00:00
-f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev .
2025-05-06 11:03:45 +00:00
docker push devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0
docker push devops.sozsoft.com/kurs/kurs-platform-ui:latest
2025-05-06 06:45:49 +00:00
```
### Dev-Prod Ortam Makinaları
```sh
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
2025-05-06 11:03:45 +00:00
- 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 .
2025-05-06 06:45:49 +00:00
- 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
2025-05-06 11:03:45 +00:00
- 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
2025-05-06 06:45:49 +00:00
## 7.2. SSL olmayan registry'e bağlanma
```sh
cd ~/
touch daemon.json
{
2025-05-06 11:03:45 +00:00
"insecure-registries": ["devops.sozsoft.com"]
2025-05-06 06:45:49 +00:00
}
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"`