Liman Migration İşlemi
Tags: liman, postgres, migration
Published: 2022-07-01 12:13:26

## Liman Migration İşlemi
Bu süreç eski bir Liman'dan yeni bir Liman'a, eski Liman'ın üzerindekilerin aktarılmasını içermektedir.

## Veritabanı Export - Import İşlemi
İlk olarak eski Liman'ın kullanmış olduğu veri tabanının (yani eski postgresql veritabanının) export'u alınır. Bu işlem iki farklı yöntemle gerçekleştirilebilir.
1. PgAdmin uygulamasını kullanarak,
2. psql komutları ile,

### PgAdmin ile Export - Import İşlemi
Öncelikle PgAdmin uygulaması açılır ve eski veri tabanına bağlantı sağlanır.
Bağlantı sonrası aşağıda gösterildiği gibi, export edilecek eski veritabanına sağ tıklanır ve **Backup** seçeneği seçilir.
![PgAdmin Export Database](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1i664dvqcqgslyjq46s5.png)

Backup seçeneği seçildikten sonra aşağıdaki gibi çıkarılacak backup'ın ismi ve lokasyonu belirtilir. Burada dikkat edilmesi gereken şey çıkarılacak dosyanın uzantısının **.sql** ile bitmesidir.
![Backup Settings](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mngn17artg3sb9av85re.png)
 
Sonrasında **Backup** seçeneği ile export işlemi başlatılır. İşlem tamamlandığında aşağıdaki gibi seçilen lokasyonda belirtilen isimde backup dosyası elde edilmiş olunur.
![Backup PgAdmin](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43rgxxukn1aki6smxsc9.png)

Tekrardan PgAdmin uygulaması açılır ve yeni sunucuya (yeni liman-postgres sunucusu) bağlantı sağlanır. 
Bağlantı sonrası aşağıda gösterildiği gibi, import işlemi yapılacak yeni veritabanına sağ tıklanır ve **Restore** seçeneği seçilir.
![PgAdmin Import Database](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v05i5xv6n2nanqdh6u95.png)
 
Restore seçeneği seçildikten sonra aşağıdaki gibi import edilecek dosya seçilir ve restore (import) işlemi **Restore** tuşu ile başlatılır.
![PgAdmin Restore](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6874ebmgwtriqlzhiz8q.png)
 
İşlem tamamlandığında artık import işlemi bitmiştir. Eski veritabının içerdiği tablolar, veriler başarıyla yeni veritabanına taşınmış oldu.

### Psql Komutu ile Export - Import İşlemi
Bu işlem için öncelikle veritabanı üzerinde bir SuperUser'a ihtiyaç duyulmaktadır. Postgresql veritabanlarında postgres isimli bir default SuperUser bulunmaktadır. İşlemlerde bu kullanıcı kullanılabilir.

İlk olarak eski veritabanına sahip sunucuya bağlantı sağlanır ve aşağıdaki komut ile veritabanına erişilir.
```
sudo psql -U postgres -d ESKI_DB_ADI
```

Bağlantı sonrası aşağıdaki komut ile veritabanının export edilmesi sağlanır.
```
pg_dump -U postgres -h SERVER_IP ESKI_DB_ADI >> backup.sql
```

Elde edilen sql dosyası yeni sunucuya gönderilir.
Gönderilen dosya aşağıdaki komut ile sunucu üzerinde gerekli veritabanına import edilir.
```
sudo psql YENI_DB_ADI < backup.sql
```

Böylelikle veritabanı kısmı tamamlanmış olur.

Bu iki adımdan birisi tamamlandığında, eski veritabanındaki veriler ve tablolar, yeni veritabanına taşınmış olcaktır. Yeni liman üzerinde bazı sunucular kendiliğinden eklenmiş hatta eklentileri de gelmiş olacaktır. Fakat eklentilerin içeriklerinin doldurulması işlemi yani bir sonraki adım yapılmadan, eklentiler kullanılamamaktadır.

## Eklentilerin Gönderilmesi İşlemi
İlk olarak eski liman sunucusu üzerinde "/liman/extensions"  dizinine gidilir.
```
sudo cd /liman/extensions/
```

Bu dizin altındaki dosyalar (yani eklentiler) tar komutu ile arşivlenir. Bu işlem için çalıştırılması gereken komut:
```
tar cvf extensions.tar *
```

Elde edilen arşiv dosyası (extensions.tar) yeni liman sunucusuna gönderilir. Aşağıdaki komut yardımı ile gerekli lokasyona çıkartılır. !! Bu işlem için root olmak gerekebilir !!
```
tar xvf extensions.tar -C /liman/extensions/ 
```

Böylelikle yeni liman üzerindeki eklentilerin dosyaları yeni liman sunucusuna taşınmış oldu. Şimdi bu eklentilerin kullanılabilmesi için önceki kullanıcıların sahipliklerinin ayarlanması gerekmektedir. Şu hali ile halen eklentiler kullanılmamaktadır ve liman render/Go hatası alınmaktadır.

## Eklenti Kullanıcılarının Eklenmesi
Eski sunucu üzerinde aşağıdaki komut ile kullanıcılar görüntülenir.
```
cat /etc/passwd
```

Çıktı şu şekilde olacaktır:
![Linux list users](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ftz4yd5et46oqnp6sqf.png)

Burada isimleri "900f871c774f43789bac48aee4f0ba64" gibi uzun ve garip olan, uid (user id) ve gid (group id) değeleri 900'lerde olan kullanıcılar liman için eklenti kullanıcılarıdır. Bu kullanıcılar manuel olarak sıra ile yeni kullanıcıya eklenmeli ve uid değerleri aynı olmalıdır. 
Bu listedeki kullanıcılar yeni liman sunucusuna bağlantı kurulup aşağıdaki komut ile başarıyla eklenebilir.
```
adduser -u UID_VALUE USERNAME --force-badname --disabled-password --gecos ""
```
Burada:
1. **UID** = Kullanıcının id değeri (900 küsürlü sayı değeri.)
2. **USERNAME** = Kullanıcının adı (275f371ec56845978ff7356bbb315733 gibi bir değer.)
3. **--force-badname** = Linux üzerinde bu tarz garip ve kötü isimlerin oluşturulması için gerekli parametre.
4. **--disabled-password** = Kullanıcıyı no-login bir kullanıcıya çevirmek için gerekli parametre.
5. **--gecos** = Kullanıcı eklerken karşılaşılan "full_name" gibi değerlerin pass edilmesi için gerekli parametre.
 
Böylece gerekli kullanıcılar eklenmiş olur. Şimdi bu kullanıcıların gerekli eklentilere sahiplik etmesinin sağlanması gerekmektedir.

## Eklentilerin Sahipliklerinin Değiştirilmesi
Bu aşamada eski liman sunucusu üzerindeki "/liman/extensions/" dizini listelenir ve sahipliklere bakılır.
```
ls -la /liman/extensions/
```

Yeni sunucu üzerinde ise bu dizine gidilir.
```
sudo cd /liman/extensions/
```

Eklentilerin (dosyaların) sahiplikleri recursive olarak değiştirilir. Bunun için gerekli komut:
```
chown -R b47c8eae53ca4f8a8210303eb1486e54:liman bilgisayarlar/
```

Bu örnekte **bilgisayarlar** isimli eklentinin sahipliği "b47c8eae53ca4f8a8210303eb1486e54" isimli kullanıcıya verilmiştir. Sunucu üzerinde ne kadar eklenti var ise eski sunucu sayesinde sahipliklerine bakılarak yeni sunucu üzerinde sahiplikler değiştirilir.

Yapılan işlemlerin sonucunda eski ve yeni sunuculardaki sahiplikler aynı olmalıdır. Örnek olarak:
**ESKİ SUNUCU**
![Eski Sunucu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ow9fv16ja7eldwjkjk5t.png)
 
**YENİ SUNUCU**
![Yeni Sunucu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fmmww9ix8tsll3pqlpxl.png)
 
Görüldüğü üzere yeni sunucu üzerindeki her eklentinin sahipliği, eski sunucu üzerindeki sahiplikler ile aynıdır. 

## Liman Environment'ının Düzenlenmesi
Eski sunucu üzerinde "/liman/server/.env" dosyası içerisindeki "APP_KEY" kısmı kopyalanır.
```
cat /liman/server/.env
```

Yeni sunucu üzerinde "/liman/server/.env" dosyası bir editör ile açılır:
```
sudo nano /liman/server/.env
```

APP_KEY kısmına eski sunucunun değeri girilir. Dosya kaydedilir ve kapatılır. Daha sonra liman servisleri yeniden başlatılır. Bunun için aşağıdaki komut çalıştırılır.
```
systemctl restart liman-*.ser*
```

## Sertifikaların Güncellenmesi
Yeni liman web arayüzü üzerinde "Ayarlar > Sertifikalar" sekmesine gidilir, aşağıdaki gibi ekli sertifikalara sağ tıklanır ve güncelle seçeneği seçilir.
![Liman Sertifika](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cpu79uyckp2h8ilv45s8.png)
 
Sertifikalar güncellendikten sonra son aşamaya geçilir.

## Liman DNS Ayarının Düzenlenmesi
Yeni liman web arayüzü üzerinde "Ayarlar > DNS Ayarları" sekmesine gidilir. Burada gerekli alanlar eski liman üzerindeki ayarların aynısı olarak kaydedilir ve çıkılır.
![Liman DNS Settings](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bi1fv5qm1l2teo087nah.png)
 

Artık yeni liman sunucusu eski liman sunucusunun aynısı olacaktır ve kullanılabilir hale gelecektir.