321 lines
12 KiB
Markdown
321 lines
12 KiB
Markdown
# 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+...
|
||
1. Dev
|
||
- kurs-dev-cdn.sozsoft.com
|
||
- kurs-dev-api.sozsoft.com
|
||
- kurs-dev.sozsoft.com
|
||
- 192.168.1.106
|
||
- kurs:ChatR+...
|
||
1. Prod
|
||
- kurs-cdn.sozsoft.com
|
||
- kurs-api.sozsoft.com
|
||
- kurs.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
|
||
- 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
|
||
|
||
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
|
||
|
||
- 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
|
||
|
||
#### 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
|
||
|
||
```json
|
||
{
|
||
"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ı
|
||
|
||
```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
|
||
{
|
||
"insecure-registries": ["devops.sozsoft.com"]
|
||
}
|
||
```
|
||
- 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
|
||
```
|
||
- forgejo/data/gitea/conf/app.ini dosyasında server kısmı şu şekilde olmalı
|
||
|
||
```ini
|
||
[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
|
||
|
||
```sh
|
||
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.
|
||
```sh
|
||
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.
|
||
```sh
|
||
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:
|
||
```ini
|
||
[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
|
||
|
||
```sh
|
||
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ı
|
||
|
||
```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
|
||
|
||
- 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
|
||
|
||
```sh
|
||
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"`
|