Takip et

GitLab’ı Ubuntu 18.04 Üzerine Kurulum ve Yapılandırma Rehberi

GitLab’ı Ubuntu 18.04 Üzerine Kurulum ve Yapılandırma Rehberi Giriş Günümüz yazılım geliştirme süreçlerinde versiyon kontrol sistemleri

GitLab’ı Ubuntu 18.04 Üzerine Kurulum ve Yapılandırma Rehberi

Giriş

Günümüz yazılım geliştirme süreçlerinde versiyon kontrol sistemleri (VCS) ve işbirliği platformları vazgeçilmez bir rol oynamaktadır. Git, dağıtık bir versiyon kontrol sistemi olarak bu alandaki en popüler araçlardan biridir. Ancak Git’in tek başına sunduğu özellikler, büyük ekiplerin ve karmaşık projelerin ihtiyaçlarını karşılamakta yetersiz kalabilir. İşte bu noktada GitLab gibi platformlar devreye girer.

GitLab, Git tabanlı bir depo yöneticisi olmanın ötesinde, tam teşekküllü bir DevOps platformudur. Kaynak kodu yönetimi, sürekli entegrasyon (CI), sürekli dağıtım (CD), proje yönetimi, güvenlik taramaları ve izleme gibi birçok özelliği tek bir çatı altında sunar. Bu sayede geliştiriciler, operasyon ekipleri ve proje yöneticileri aynı platform üzerinde işbirliği yapabilir, süreçleri otomatikleştirebilir ve yazılım teslimatını hızlandırabilirler. GitLab’ın açık kaynak (Community Edition – CE) ve ücretli (Enterprise Edition – EE) sürümleri bulunmaktadır. Bu rehberde, kendi sunucunuzda ücretsiz olarak kullanabileceğiniz GitLab Community Edition’ın Ubuntu 18.04 işletim sistemi üzerine kurulumu ve temel yapılandırması adım adım anlatılacaktır.

Ubuntu 18.04, uzun süreli destek (LTS) sunan stabil bir işletim sistemi olduğu için sunucu ortamlarında sıkça tercih edilmektedir. Bu rehber, GitLab’ın tüm potansiyelini kullanmaya başlamanız için sağlam bir temel oluşturacaktır.

Ön Gereksinimler

GitLab’ı başarıyla kurabilmek ve sorunsuz bir şekilde çalıştırabilmek için bazı temel ön gereksinimleri karşılamanız gerekmektedir. Bu adımları tamamlamak, kurulum sürecini kolaylaştıracak ve olası hataları minimize edecektir.

Sistem Gereksinimleri

GitLab, özellikle büyük projeler ve çok sayıda kullanıcı için belirli sistem kaynaklarına ihtiyaç duyar. Minimum gereksinimler aşağıdaki gibidir, ancak daha iyi performans için önerilen değerler her zaman daha yüksektir:

* İşlemci (CPU): En az 2 çekirdekli bir işlemci önerilir. Yoğun kullanımlarda 4 veya daha fazla çekirdek performans artışı sağlayacaktır.
* Bellek (RAM): En az 4 GB RAM önerilir. Küçük kurulumlar için 2 GB RAM ile çalışabilse de, CI/CD işleri, birden fazla kullanıcı ve diğer servisler için 4 GB veya üzeri kritik öneme sahiptir. 8 GB veya daha fazlası idealdir.
* Disk Alanı: En az 50 GB boş disk alanı önerilir. Projelerinizin boyutuna, CI/CD önbelleklerine ve yedeklemelere bağlı olarak bu miktar hızla artabilir. Hızlı depolama (SSD) performansı önemli ölçüde artıracaktır.

Ubuntu 18.04 Sunucusu

Bu rehber, temiz bir Ubuntu 18.04 sunucusu üzerinde kurulumu hedeflemektedir. Sunucunuza SSH ile erişiminizin olması gerekmektedir.

Sudo Yetkileri

Kurulum ve yapılandırma adımları için sudo yetkilerine sahip bir kullanıcı ile oturum açmış olmanız gerekmektedir.

Domain Adı veya Statik IP Adresi

GitLab arayüzüne erişmek için bir domain adı (örn: gitlab.example.com) veya sunucunuzun statik bir IP adresine ihtiyacınız olacaktır. Domain adı kullanmak, özellikle HTTPS yapılandırması için şiddetle tavsiye edilir. DNS kayıtlarınızın (A kaydı) sunucunuzun IP adresini işaret ettiğinden emin olun.

Güvenlik Duvarı Ayarları

GitLab’a web üzerinden erişim sağlamak için güvenlik duvarınızda HTTP (port 80) ve HTTPS (port 443) portlarının açık olması gerekmektedir. SSH (port 22) portunun da yönetim erişimi için açık olması gerekir.

Sistemin Güncellenmesi ve Temel Paketlerin Kurulumu

Kuruluma başlamadan önce, Ubuntu sisteminizin güncel olduğundan emin olmak ve GitLab’ın ihtiyaç duyduğu bazı temel paketleri kurmak iyi bir uygulamadır. Bu, bağımlılık sorunlarını önlemeye yardımcı olur.

İlk olarak, paket listesini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:

sudo apt update
sudo apt upgrade -y

Ardından, GitLab’ın repository’sini eklemek ve e-posta gönderme yetenekleri için gerekli olan bazı paketleri kuralım. postfix, GitLab’ın bildirim e-postaları göndermesi için bir e-posta sunucusu görevi görecektir.

sudo apt install -y curl ca-certificates apt-transport-https software-properties-common postfix

postfix kurulumu sırasında size bir yapılandırma ekranı sunulabilir. Genellikle “Internet Site” seçeneğini seçip, sisteminizin tam nitelikli alan adını (FQDN) veya GitLab’ı barındıracağınız domain adını girmeniz yeterlidir. Eğer bu ekranı kaçırırsanız veya yanlış yapılandırırsanız, daha sonra sudo dpkg-reconfigure postfix komutu ile tekrar yapılandırabilirsiniz. Postfix, GitLab’ın kullanıcı kayıtları, parola sıfırlamaları, bildirimler gibi e-posta tabanlı işlemleri gerçekleştirmesi için kritik öneme sahiptir.

GitLab Depolarının Eklenmesi

GitLab’ı doğrudan Ubuntu’nun varsayılan depolarından yükleyemezsiniz. GitLab, kendi paket depolarını sağlar. Bu depoyu sisteminize eklemeniz gerekmektedir.

Öncelikle, GitLab’ın resmi GPG anahtarını sisteminize ekleyerek paketlerin orijinalliğini doğrulayabiliriz:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

Bu komut, GitLab’ın paket imzalama anahtarını ekleyecek ve GitLab CE (Community Edition) deposunu /etc/apt/sources.list.d/gitlab_gitlab-ce.list dosyasına otomatik olarak ekleyecektir. sudo bash ile çalıştırıldığı için ek yetki istemeyecektir.

Depo eklendikten sonra, yeni paketin listesini almak için apt update komutunu tekrar çalıştırmanız gerekir:

sudo apt update

Artık sisteminiz GitLab paketini tanıyacaktır.

GitLab Kurulumu

Gerekli tüm ön hazırlıklar tamamlandığına göre, GitLab CE paketini yüklemeye geçebiliriz.

sudo apt install gitlab-ce -y

Bu komut, GitLab Community Edition’ı ve tüm bağımlılıklarını sisteminize kuracaktır. Kurulum süreci, internet bağlantınızın hızına ve sunucunuzun performansına bağlı olarak biraz zaman alabilir (genellikle 5-15 dakika). Kurulum sırasında, GitLab birçok bileşeni (Nginx, PostgreSQL, Redis, Unicorn vb.) otomatik olarak kuracak ve temel yapılandırmaları yapacaktır.

Kurulum tamamlandığında, terminalde başarılı bir kurulum mesajı görmelisiniz. Ancak bu, GitLab’ın henüz tam olarak yapılandırıldığı anlamına gelmez. Sadece paketler yüklenmiştir.

GitLab’ın Yapılandırılması (Initial Configuration)

GitLab’ın tüm servislerini doğru bir şekilde çalışır hale getirmek ve web arayüzüne erişebilmek için bazı temel yapılandırmalar yapmamız gerekiyor. Tüm GitLab yapılandırmaları /etc/gitlab/gitlab.rb dosyasında bulunur. Bu dosya, GitLab’ın dahili web sunucusu (Nginx), veritabanı (PostgreSQL), Redis, Unicorn gibi tüm bileşenlerinin davranışını kontrol etmenizi sağlar.

Yapılandırma dosyasını bir metin düzenleyici ile açın (örneğin nano veya vim):

sudo nano /etc/gitlab/gitlab.rb

Harici URL Ayarı

Bu dosyadaki en önemli ayar, GitLab’a web tarayıcısı üzerinden erişeceğiniz URL’dir. external_url satırını bulun ve yorum satırını kaldırarak kendi domain adınızı veya IP adresinizi girin:

external_url 'https://gitlab.example.com' # Kendi domain adresinizi veya IP adresinizi girin

Eğer domain kullanıyorsanız, https kullanmanız şiddetle tavsiye edilir. Bu, bir sonraki adımda Let’s Encrypt ile otomatik SSL sertifikası almayı kolaylaştıracaktır.

HTTPS/SSL Yapılandırması (Let’s Encrypt ile Örnek)

Güvenli bir bağlantı için HTTPS kullanmak zorunludur. GitLab, Let’s Encrypt ile otomatik SSL sertifikası entegrasyonuna sahiptir, bu da süreci oldukça basitleştirir.

gitlab.rb dosyasında aşağıdaki satırları bulun ve düzenleyin:

# Let's Encrypt'i etkinleştirin
letsencrypt['enable'] = true

Let's Encrypt sertifikası için iletişim e-posta adresinizi girin

letsencrypt['contact_emails'] = ['admin@example.com'] # Kendi e-posta adresinizi girin

Sertifikaların otomatik yenilenmesini etkinleştirin (varsayılan olarak true'dur, emin olmak için kontrol edin)

letsencrypt['auto_renew'] = true letsencrypt['auto_renew_hour'] = 1 letsencrypt['auto_renew_minute'] = 30 letsencrypt['auto_renew_second'] = 45

contact_emails kısmına geçerli bir e-posta adresi girdiğinizden emin olun. Let’s Encrypt, sertifika süresi dolduğunda veya bir sorun olduğunda bu adrese bildirim gönderecektir.

SMTP Yapılandırması (E-posta Gönderimi İçin)

GitLab’ın kullanıcı bildirimleri, parola sıfırlamaları, CI/CD durum güncellemeleri gibi e-postaları göndermesi için bir SMTP sunucusu yapılandırmanız gerekir. Eğer sunucunuzda zaten bir SMTP sunucusu (Postfix gibi) yüklüyse ve GitLab’ın yerel olarak e-posta göndermesini istiyorsanız, bu bölümü atlayabilirsiniz. Ancak, daha güvenilir ve harici bir SMTP hizmeti (Gmail, SendGrid, Mailgun vb.) kullanmak genellikle daha iyi bir yaklaşımdır.

Örnek olarak, harici bir SMTP sunucusu yapılandırması:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com" # SMTP sunucunuzun adresi
gitlab_rails['smtp_port'] = 587 # Veya 465 (SSL)
gitlab_rails['smtp_user_name'] = "smtp_kullanici_adi" # SMTP kullanıcı adınız
gitlab_rails['smtp_password'] = "smtp_parolaniz" # SMTP parolanız
gitlab_rails['smtp_domain'] = "example.com" # E-posta domaininiz
gitlab_rails['smtp_authentication'] = "login" # Veya "plain", "cram_md5"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false # Eğer port 465 kullanıyorsanız true olabilir, aksi halde false
gitlab_rails['smtp_pool'] = false

gitlab_rails['gitlab_email_from'] = 'gitlab@example.com' # GitLab'dan gönderilen e-postaların gönderen adresi
gitlab_rails['gitlab_email_display_name'] = 'GitLab'

Kendi SMTP sunucunuzun ayarlarını (adres, port, kullanıcı adı, parola, domain) buraya girmeniz gerekmektedir. smtp_tls ve smtp_enable_starttls_auto ayarları, kullandığınız SMTP sunucusunun güvenlik gereksinimlerine göre değişebilir.

Diğer Önemli Ayarlar (İsteğe Bağlı)

gitlab.rb dosyasında yedekleme dizinleri, log seviyeleri, CI/CD runner ayarları gibi birçok başka yapılandırma seçeneği de bulunmaktadır. İhtiyaçlarınıza göre bu ayarları inceleyebilirsiniz. Ancak ilk kurulum için yukarıdaki ayarlar yeterlidir.

Yapılandırma dosyasında değişiklikleri yaptıktan sonra kaydedin ve kapatın (nano için CTRL+O, Enter, CTRL+X).

GitLab’ın Yeniden Yapılandırılması

gitlab.rb dosyasında yaptığınız değişikliklerin etkili olması için GitLab’ı yeniden yapılandırmanız gerekmektedir. Bu işlem, GitLab’ın tüm bileşenlerini (Nginx, PostgreSQL, Redis, Unicorn vb.) güncel yapılandırma ile baştan başlatır.

sudo gitlab-ctl reconfigure

Bu komut, GitLab’ın temelini oluşturan Chef tabanlı bir aracı çalıştırır. Bu araç, gitlab.rb dosyasını okur, gerekli servisleri durdurur, yapılandırma dosyalarını günceller, veritabanı şemasını kontrol eder ve tüm servisleri yeniden başlatır. Bu işlem, sisteminizin performansına ve yaptığınız değişikliklerin karmaşıklığına bağlı olarak 5-10 dakika sürebilir.

Yeniden yapılandırma sırasında terminalde birçok çıktı göreceksiniz. Her şey yolunda giderse, sonunda “gitlab Reconfigured!” veya benzeri bir başarı mesajı almalısınız. Eğer bir hata olursa, hata mesajını dikkatlice okuyarak sorunu gidermeye çalışın. Özellikle Let’s Encrypt ile ilgili hatalar genellikle DNS kayıtlarının doğru olmamasından veya güvenlik duvarı ayarlarından kaynaklanır.

Güvenlik Duvarı Ayarları

GitLab web arayüzüne erişebilmek için güvenlik duvarınızda gerekli portların açık olması gerekmektedir. Ubuntu’da UFW (Uncomplicated Firewall) yaygın olarak kullanılır.

UFW’nin durumunu kontrol edin:

sudo ufw status

Eğer UFW etkin değilse, etkinleştirebilirsiniz:

sudo ufw enable

Gerekli portları açın:

* SSH (22): Sunucuya erişim için.
* HTTP (80): İlk erişim ve Let’s Encrypt doğrulama için.
* HTTPS (443): Güvenli web erişimi için.

sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https

Portları açtıktan sonra UFW durumunu tekrar kontrol ederek değişikliklerin uygulandığından emin olun:

sudo ufw status

Çıktıda 80, 443 ve 22 portlarının izin verilenler listesinde olduğunu görmelisiniz.

GitLab Arayüzüne Erişim ve İlk Giriş

Tüm kurulum ve yapılandırma adımları tamamlandıktan sonra, GitLab web arayüzüne erişmeye hazırsınız.

Web tarayıcınızı açın ve gitlab.rb dosyasında external_url olarak ayarladığınız adrese gidin (örn: https://gitlab.example.com).

İlk erişiminizde, GitLab sizden root kullanıcısı için yeni bir parola oluşturmanızı isteyecektir. Bu, GitLab’ın ilk yönetici hesabıdır. Güçlü bir parola belirleyin ve bu parolayı güvenli bir yerde saklayın.

Parolayı belirledikten sonra, giriş ekranına yönlendirileceksiniz.
* Kullanıcı Adı: root
* Parola: Az önce belirlediğiniz parola

Giriş yaptıktan sonra, GitLab’ın ana kontrol paneline yönlendirileceksiniz. Artık GitLab’ı kullanmaya başlayabilirsiniz!

GitLab Kullanımına Başlama

GitLab kontrol paneline eriştikten sonra, projelerinizi yönetmeye ve geliştirme süreçlerinizi optimize etmeye başlayabilirsiniz.

Proje Oluşturma

GitLab’da bir proje, kod depolarınızı, sorun izleyicilerinizi, CI/CD ardışık düzenlerinizi ve daha fazlasını barındıran temel bir birimdir.
* Sol üst köşedeki “Menu” düğmesine tıklayın.
* “Projects” -> “Your projects” seçeneğine gidin.
* “New project” düğmesine tıklayın.
* “Create blank project” seçeneğini seçin.
* Projenize bir ad verin, isteğe bağlı bir açıklama ekleyin ve görünürlük seviyesini (Private, Internal, Public) belirleyin.
* “Create project” düğmesine tıklayın.

Kullanıcı Ekleme

Ekibinizdeki diğer üyelerin GitLab’ı kullanabilmesi için onları sisteme eklemeniz gerekir.
* Sol üst köşedeki “Menu” düğmesine tıklayın.
* “Admin” -> “Overview” -> “Users” seçeneğine gidin.
* “New user” düğmesine tıklayın.
* Kullanıcının adını, e-posta adresini ve isteğe bağlı diğer bilgileri girin.
* Parola oluşturma seçeneğini işaretleyebilir veya kullanıcının ilk girişte parolasını sıfırlamasını sağlayabilirsiniz.
* “Create user” düğmesine tıklayın.
* Oluşturulan kullanıcıya bir projede veya grupta uygun yetkileri (Developer, Maintainer vb.) vermeniz gerekecektir.

Grup Oluşturma

Gruplar, birden fazla projeyi bir araya getirerek kullanıcı yetkilerini ve görünürlüğü daha kolay yönetmenizi sağlar.
* Sol üst köşedeki “Menu” düğmesine tıklayın.
* “Groups” -> “Your groups” seçeneğine gidin.
* “New group” düğmesine tıklayın.
* Gruba bir ad verin, isteğe bağlı bir açıklama ekleyin ve görünürlük seviyesini belirleyin.
* “Create group” düğmesine tıklayın.
* Oluşturulan gruba kullanıcıları davet edebilir ve grup içindeki tüm projelere otomatik olarak erişimlerini sağlayabilirsiniz.

SSH Anahtarı Ekleme

Git deposuna git clone, git push gibi komutlarla erişmek için genellikle SSH anahtarları kullanılır. Her kullanıcının kendi SSH genel anahtarını GitLab profiline eklemesi gerekir.
* Kullanıcılar kendi GitLab hesaplarına giriş yapar.
* Sağ üst köşedeki kullanıcı avatarına tıklayın ve “Preferences” seçeneğini seçin.
* Sol menüden “SSH Keys” seçeneğine tıklayın.
* Yerel makinenizde oluşturduğunuz genel SSH anahtarınızı (genellikle ~/.ssh/id_rsa.pub dosyasının içeriği) “Key” alanına yapıştırın ve bir başlık verin.
* “Add key” düğmesine tıklayın.

CI/CD Genel Bakış

GitLab’ın en güçlü özelliklerinden biri entegre CI/CD’sidir. Projenizin kök dizinine .gitlab-ci.yml adında bir dosya ekleyerek CI/CD ardışık düzenlerini tanımlayabilirsiniz. Bu dosya, kodunuz her push edildiğinde otomatik olarak çalışacak testleri, derlemeleri ve dağıtımları belirler.

Yedekleme ve Geri Yükleme

GitLab verilerinizin düzenli olarak yedeklenmesi kritik öneme sahiptir. GitLab, bu işlem için basit komutlar sunar.

Yedekleme Oluşturma

GitLab’ın tüm verilerini (veritabanı, depolar, yapılandırma dosyaları vb.) yedeklemek için aşağıdaki komutu kullanın:

sudo gitlab-rake gitlab:backup:create

Bu komut, /var/opt/gitlab/backups dizininde zaman damgalı bir yedekleme dosyası oluşturacaktır. Bu dosyaları güvenli bir depolama alanına (uzak bir sunucu, bulut depolama vb.) taşımanız şiddetle tavsiye edilir.

Yedeklemeyi Geri Yükleme (Genel Bilgi)

Bir yedeklemeyi geri yüklemek, genellikle yeni bir sunucuya GitLab kurduktan sonra yedekleme dosyasını /var/opt/gitlab/backups dizinine kopyalayıp aşağıdaki komutla yapılır:

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

Yedekleme dosyasının adını buraya girin (örn: 1678886400_2023_03_15_15.0.0_gitlab_backup.tar)

sudo gitlab-rake gitlab:backup:restore BACKUP=1678886400_2023_03_15_15.0.0 sudo gitlab-ctl start sudo gitlab-ctl reconfigure sudo gitlab-rake gitlab:check SANITIZE=true

Geri yükleme işlemi sırasında GitLab servislerinin durdurulması ve yeniden yapılandırılması gerektiğini unutmayın.

Sorun Giderme (Troubleshooting)

Kurulum veya çalışma sırasında sorunlarla karşılaşmanız durumunda, GitLab’ın sunduğu bazı araçlar ve log dosyaları size yardımcı olabilir.

GitLab Servis Durumunu Kontrol Etme

Tüm GitLab servislerinin düzgün çalışıp çalışmadığını kontrol etmek için:

sudo gitlab-ctl status

Bu komut, Nginx, PostgreSQL, Redis, Unicorn gibi tüm GitLab bileşenlerinin durumunu listeler. Herhangi bir servisin down veya fail olduğunu görürseniz, ilgili log dosyalarını kontrol etmeniz gerekir.

Log Dosyalarını Görüntüleme

GitLab’ın tüm log dosyaları /var/log/gitlab/ dizininde bulunur. Belirli bir servisin loglarını görüntülemek için:

sudo gitlab-ctl tail

Bu komut, tüm servislerin loglarını gerçek zamanlı olarak gösterir. Belirli bir servisin loglarını görüntülemek için (örn: Nginx):

sudo gitlab-ctl tail nginx

Ayrıca, ilgili log dosyalarını doğrudan inceleyebilirsiniz:
* /var/log/gitlab/nginx/gitlab_access.log
* /var/log/gitlab/nginx/gitlab_error.log
* /var/log/gitlab/gitlab-rails/production.log
* /var/log/gitlab/postgresql/current
* /var/log/gitlab/redis/current

Yapılandırma Kontrolü

gitlab.rb dosyasındaki yapılandırmanızda bir hata olup olmadığını kontrol etmek için:

sudo gitlab-ctl check-config

Bu komut, yapılandırma dosyanızdaki potansiyel sorunları veya uyarıları size bildirecektir.

Sonuç

Bu kapsamlı rehberde, GitLab Community Edition’ı Ubuntu 18.04 sunucunuza nasıl kuracağınızı ve temel olarak nasıl yapılandıracağınızı adım adım öğrendiniz. Sistem ön gereksinimlerinden başlayarak, temel paketlerin kurulumu, GitLab depolarının eklenmesi, GitLab paketinin yüklenmesi, gitlab.rb dosyası üzerinden harici URL, HTTPS (Let’s Encrypt) ve SMTP gibi kritik ayarların yapılması, güvenlik duvarı konfigürasyonu ve son olarak web arayüzüne ilk erişim süreçlerini başarıyla tamamladık. Ayrıca, GitLab’ı kullanmaya başlama, yedekleme ve temel sorun giderme yöntemleri hakkında da bilgi edindiniz.

Kendi GitLab sunucunuzu kurmak, geliştirme süreçleriniz üzerinde tam kontrol sahibi olmanızı sağlar. Kod depolarınızı yönetebilir, CI/CD ardışık düzenleri ile otomatik test ve dağıtım yapabilir, proje yönetimi araçlarıyla iş akışlarınızı düzenleyebilir ve tüm ekibinizin tek bir platformda işbirliği yapmasını sağlayabilirsiniz. GitLab’ın sunduğu geniş özellik yelpazesi, yazılım geliştirme döngünüzü daha verimli ve güvenli hale getirecektir.

Unutmayın ki GitLab oldukça kapsamlı bir platformdur ve bu rehber sadece başlangıç noktasıdır. Kurulum sonrası, kullanıcı yönetimi, grup ayarları, CI/CD runner’ları, entegrasyonlar ve daha birçok gelişmiş özelliği keşfederek GitLab deneyiminizi zenginleştirebilirsiniz. Düzenli yedeklemeler almayı, GitLab’ı güncel tutmayı ve güvenlik duvarı ayarlarınızı gözden geçirmeyi ihmal etmeyin. Başarılı bir DevOps yolculuğu dileriz!

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version