From 44b798a631d3916288aa9f0521e2235e10f1464e Mon Sep 17 00:00:00 2001 From: log101 Date: Sun, 25 Aug 2024 14:23:04 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20add=20new=20post,=20"sunucumda=20neler?= =?UTF-8?q?=20d=C3=B6n=C3=BCyor"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.mjs | 4 + bun.lockb | Bin 271898 -> 273245 bytes package.json | 1 + src/content/blog/sunucumda-neler-donuyor.md | 138 ++++++++++++++++++++ 4 files changed, 143 insertions(+) create mode 100644 src/content/blog/sunucumda-neler-donuyor.md diff --git a/astro.config.mjs b/astro.config.mjs index 3f2d287..484df7e 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,10 +1,14 @@ import { defineConfig } from "astro/config"; import tailwind from "@astrojs/tailwind"; +import remarkToc from "remark-toc"; // https://astro.build/config export default defineConfig({ site: "https://blog.log101.dev", + markdown: { + remarkPlugins: [[remarkToc, { heading: "İçindekiler" }]], + }, integrations: [ tailwind({ applyBaseStyles: false, diff --git a/bun.lockb b/bun.lockb index 365d04dce81003ac166c0c1c57ae5dd766fd4a58..78301e920f243c52c529b23b961472cfa8c03c02 100755 GIT binary patch delta 52296 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 mD2yX<&^RU{8AJJkG_GWFIi5tteuldB>_@f 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 diff --git a/package.json b/package.json index 24a9474..7146793 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@astrojs/tailwind": "^5.1.0", "astro": "^4.10.0", "htmx.org": "^1.9.12", + "remark-toc": "^9.0.0", "tailwindcss": "^3.4.3", "typescript": "^5.4.5" }, diff --git a/src/content/blog/sunucumda-neler-donuyor.md b/src/content/blog/sunucumda-neler-donuyor.md new file mode 100644 index 0000000..b07c8d5 --- /dev/null +++ b/src/content/blog/sunucumda-neler-donuyor.md @@ -0,0 +1,138 @@ +--- +draft: false +title: Sunucumda Neler Dönüyor +summary: Bu sayfayı sunmamı mümkün kılan, kimisi CI/CD'den, kimsi e-postadan, kimisi konteynerlerden sorumlu servisleri tanıyoruz. +category: teknik +subcategory: Tanıtım +date: 2024-08-25 +--- + + + +Birkaç ay önce, Vercel’lerin, Firebase’lerin, AWS’lerin sunduğu sihirlerin etkisini yitirdiği, vadettikleri masal diyarının yerini sermayeci, küçük bir ada ülkesinin aldığı o huzursuz sınıra varmıştım. Bir başka deyişle, bu platformların sunduğu hizmetlerden ücretsiz yararlanma hakkımı kaybetmiştim, artık bir bedel ödemem gerekiyordu. + +Pekki bu bedeli ödemek beni özgür kılacak mıydı? Tam aksine, projemi bir PaaS’ın ahtapot kollarına teslim edeceğim bu sınırın ötesinde kapalı bir ekosistem, internette cevabı olmayan sorular ve desteklenmeyen API’ler görüyordum. Karar vermem için bana tanıdıkları o dar vakit içerisinde, daha esnek ve uzun vadeli bir çözüm arayışına giriştim. + +Araştırmalarım neticesinde bulduğum çözüm yeni bir teknoloji, yeni bir PaaS değildi. Çözüm geriye, DevOps’un köklerine dönmekti. Kendi CI/CD sistemimi yürütecek, uygulamalarımı sunacak, Docker imajlarımı saklayacak bir sunucu kuracaktım. Kollarımı sıvadım, 2592000 saniyelik sayacımı başlattım ve işe koyuldum. + +Sayaç sıfırı gösterdiğinde istediğim özelliklere sahip bir sunucu kurmayı başarmıştım. Yaklaşık 3 aydır işte bu sunucuyu kullanıyorum. Bu tecrübenin kendi sunucusunu kurmak isteyenlere faydalı olacağını düşünerek, sunucumdaki servisleri tanıttığım bu yazıyı kaleme aldım. + +### İçindekiler + +### Sunucumun Teknik Özellikleri + + + + + + + + + + + + + + + + + + +
CPU:Sanal, tek çekirdek
RAM:2 GB
Harddisk:50GB
İşletim Sistemi:Ubuntu
+ +Sunucumu Linode’dan kiraladım. İlk kayıt olduğunuzda 3 ay süreyle kullanabileceğiniz 100$’lık hediye kuponu veriyor. Dokümantasyonu çok kapsamlı, destek hizmeti de ihtiyaç duyduğunuzda hızlı bir şekilde dönüş yapıyor. Ayrıca çok kullanışlı ve sade bir arayüzü var. Özellikle AWS’den gelenler arayüzün sadeliği karşısında parmaklarını ısırabilir. +### Elektronik Posta: Docker Mailserver + +E-posta servisini Docker konteynerleri yeniden başlatıldığı, uygulamam çöktüğü, CI/CD sistemim derleme işlemini bitirdiği zaman haberdar edilmek için kurdum. Diğer başlıklarda tanıttığım bütün servisler bir şekilde e-posta servisiyle bağlantılı. + +Bunun için öncelikle bir dizi DNS ayarı yaptım. Bunlar yapılmadığı takdirde e-postalar istenmeyen (spam) olarak işaretleniyor, bazı durumlarda doğrudan engelleniyor, gönderilen adrese bile ulaşmıyor. + +Mail sunucusu olarak [Docker Mailserver](https://github.com/docker-mailserver/docker-mailserver) ismindeki bir projeyi kullandım. Bu proje arka planda Postfix ve Dovecot uygulamalarını kullanıyor. Bunları ayrıca kurması çok daha uğraştırıcı. Docker Mailserver’de birkaç ufak konfigürasyon ile servisiniz kullanıma hazır hale geliyor. Mail sunucumu test etmek için log101@log101.dev adresine geri bildirimlerinizi gönderebilirsiniz! + +### HTTP Sunucusu: Nginx + +HTTP sunucusu deyince akla iki isim gelir: Nginx ve Apache. Benim aklıma ilk Nginx geldiği için Nginx’i tercih ettim. HTTP sunucusu tüm bu anlattıklarım arasındaki en önemli hizmet çünkü internet sayfalarının kullanıcılara sunulmasından sorumlu. + +Sunulacak her uygulama veya internet sayfası için bir konfigürasyon dosyası oluşturmak gerekiyor. Ayrıca sayfaların SSL sertifikalarını üretmek gerekiyor, bunun için Certbot ismindeki bir aracı kullanıyorum. + +Uygulamalarımı genellikle ön uçta statik, yalnızca Nginx ile sunulabilecek şekilde yazmayı tercih ediyorum. Arka uçta da her biri için bir Go uygulaması var. Böylece kaynak tüketimimi asgari seviyeye çekmiş oluyorum. Sunduğum örnek bir uygulama: https://konulukonum.log101.dev + +### Durum (Status) Sayfası: Gatus + +Yaygın internet uygulamalarının bir çoğunun durum (status) sayfası var. Bu sayfalar sayesinde uygulamalara ulaşılamadığında sorunun hangi taraftan (sunucu veya istemci) kaynaklandığını öğrenme imkanı oluyor. Örnek vermek gerekirse: https://discordstatus.com/., + +Ben de kendi uygulamalarım ve servislerimin durumunu görüntülemek için bir durum sayfası oluşturdum. Bunun için konteyner olarak çalıştırılan [Gatus](https://github.com/TwiN/gatus) ismindeki açık kaynak bir projeyi kullandım. + +Çalışma mantığı oldukça basit. Konfigürasyon dosyasına Gatus’un HTTP isteği atacağı URL’lerin listesi veriliyor. Gatus, belirli sıklıkta bu istekler ile hayatta olup olmadıklarını kontrol ediyor. Ulaşamadığı durumda konfigürasyon dosyasında belirtilen adrese e-posta gönderiyor. Durum sayfam için: https://status.log101.dev + +### DevOps: Gitea + +Github yalnızca kod barındırma değil aynı zamanda bir CI/CD platformu. *Github Actions* sayesinde projelerin kodu derleme, test etme gibi süreçlerden geçirilerek yayınlamaya hazır hale getirilebiliyor. [Gitea](https://github.com/go-gitea/gitea) de Github’un muadili, kendi sunucunuzda barındırabileceğiniz (self hosted) bir proje. Bir diğer alternatif Gitlab’e kıyasla çok daha az kaynak tüketiyor. CI/CD sisteminin çalışma şekli de Github ile neredeyse birebir aynı. + +Gitea, Github profilini *yeşil* tutmak isteyenler için “mirror push” imkanı sunuyor. Böylece Gitea’deki yaptığınız değişiklikler Github’daki projenize de uygulanıyor. Gitea sayfamı incelemek için: https://git.log101.dev + +### Konteyner Kütüğü (Registry): Distribution + +Docker’dan kaçabilirsiniz ama saklanamazsınız. O eninde sonunda sizi kendini kullanmaya mecbur bırakır. Docker imajı olarak dağıtılan uygulamaların başka bir sunucuda düzgün bir şekilde güncellenebilmesi için bir konteyner kütüğüne (container registry) kaydedilmesi gerekiyor. + +Bunun için Docker’ın resmi kütüğü (Docker Hub) kullanılabileceği gibi sunucunuzda kendi kütüğünüzü barındırmak da mümkün. Ben ikinci yöntemi tercih ettim. Bunun için de [Distribution](https://github.com/distribution/distribution/) isminde bir projeyi kullandım. Distribution’ın kendisi konteyner olarak çalıştırılıyor. + +### Otomatik Güncelleme: Watchtower + +Docker imajı olarak dağıttığım arka uç uygulamalarımı güncelledikten sonra otomatik olarak yeniden başlatmak için [Watchtower](https://github.com/containrrr/watchtower) isminde bir proje kullanıyorum. + +Watchtower, docker imajlarını düzenli olarak kontrol ediyor ve bir güncelleme olduğu zaman konteynerleri yeniden başlatıyor. Ek olarak e-posta bildirim gönderebiliyor. Sistemdeki diğer servisler de konteyner tabanlı olduğu için beni bunları elimle güncelleme derdinden kurtarıyor. + +### Gözlemleme: Linux Dash + +Peki tüm bu saydığım servisler ne kadar kaynak tüketiyor. Özellikle RAM kapasiteniz yalnızca 2 gigabaytsa sistemin ne kadar kaynak tükettiğini görmek oldukça önemli. [Linux Dash](https://github.com/tariqbuilds/linux-dash) bunun için kullanılabilecek, Node uygulaması olarak çalıştırılan, kendisi de çok az kaynak tüketen bir servis. Bu servis sayesinde sisteminizin durumunu RAM, CPU vb. göstergeler üzerinden takip edebiliyorsunuz. Sunucumun gözlem sayfası için: https://monitor.log101.dev + +### Gelecek + +Sistemimde çalışan servisleri kısaca tanıtmış oldum. Bunlar şimdilik işimi görüyor fakat yakın gelecekte daha fazlasına ihtiyaç duyacağımı tahmin ediyorum. Özellikle güvenlik açısından sunucumun çok eksiği var. DDoS saldırılarına açık ve bildiğim bilmediğim birçok zafiyete sahip. Yine de kendi CI/CD sistemimi kullanmak ve kodum ile alakalı bütün süreçleri yönetmek projelerime esneklik katıyor. + +Kendi sunucunuzu kurmanın, sizin için de keyifli ve kıymetli bir tecrübe olacağına inanıyorum. + +Yazımı okuduğunuz için teşekkürler, geri dönüşlerinizi bekliyorum!