Doküman

Debian 12’de Docker Kullanarak Gitea DevOps Platformu Nasıl Kurulur

Gitea, Git platformunu temel alan açık kaynaklı bir kod barındırma çözümüdür. Go dilinde yazılmıştır ve Linux, macOS, Windows ve amd64, i386, ARM ve diğerleri gibi mimariler dahil olmak üzere birden fazla işletim sistemine kurulabilir. Bir depo dosyası düzenleyicisi, sorun izleme, çekme istekleri, kullanıcı yönetimi, bildirimler, yerleşik wiki, LFS Desteği, Git kancaları ve çok daha fazlasını içerir.

Hafif bir uygulamadır. Bu nedenle düşük güçlü sistemlere kurulabilir. Daha küçük bir bellek platformuna sahip, kendi kendine barındırılan bir Git platformu arıyorsanız Gitea’ya göz atmalısınız.

Bu makale Gitea’nın Debian 12 sunucusuna kurulmasını ve yapılandırılmasını ve ilk Git deponuzun kurulmasını kapsayacaktır. Gitea kaynaktan, ikili dosyadan, docker paketinden veya paketten kurulabilir. Eğitimimiz için Docker kullanarak kuracağız.

Önkoşullar

  • Debian 12 çalıştıran bir sunucu.
  • Sudo ayrıcalıklarına sahip, root olmayan bir kullanıcı.
  • Sunucunuza işaret eden gitea.example.com gibi Tam Nitelikli Etki Alanı Adı (FQDN).
  • 1 GB RAM’e sahip bir sunucudaysanız, sunucunuzda takas depolamanın etkin olduğundan emin olun.
  • Her şeyin güncellendiğinden emin olun.
    $ sudo apt update && sudo apt upgrade
  • Devam etmeden önce birkaç temel pakete ihtiyacımız var. Bunlardan bazıları sunucunuza zaten yüklenmiş olacak.
    $ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

Adım 1 – Güvenlik Duvarını Yapılandırın

İlk adım güvenlik duvarını yapılandırmaktır. Debian varsayılan olarak ufw ile birlikte gelir.

Güvenlik duvarının çalışıp çalışmadığını kontrol edin.
$ sudo ufw status

Aşağıdaki çıktıyı alacaksınız.
Status: inactive

Güvenlik duvarının etkinleştirildiğinde mevcut bağlantıyı kesmemesi için SSH bağlantı noktasına izin verin.
$ sudo ufw allow OpenSSH

HTTP ve HTTPS bağlantı noktalarına da izin verin.
$ sudo ufw allow http
$ sudo ufw allow https

Güvenlik Duvarını Etkinleştirme
$ sudo ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Güvenlik duvarının durumunu tekrar kontrol edin.
$ sudo ufw status

You should see a similar output.
Status: active

Adım 2 – Docker ve Docker Compose’u yükleyin

Debian 12, Docker’ın eski bir sürümüyle birlikte gelir. En son sürümü yüklemek için öncelikle Docker GPG anahtarını içe aktarın.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker.gpg

Docker deposu dosyası oluşturun.
$ echo \ “deb [arch=”$(dpkg –print-architecture)” signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \ “$(. /etc/os-release && echo “$VERSION_CODENAME”)” stable” | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Sistem deposu listesini güncelleyin.
$ sudo apt update

Install the latest version of Docker.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Çalıştığını doğrulayın.

$ sudo systemctl status docker ? docker.service – Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Sat 2023-11-18 07:13:39 UTC;

Docker varsayılan olarak root ayrıcalıklarına ihtiyaç duyar. Docker komutunu her çalıştırdığınızda sudo kullanmaktan kaçınmak istiyorsanız kullanıcı adınızı docker grubuna ekleyin.
$ sudo usermod -aG docker $(whoami)

Bu değişikliği etkinleştirmek için sunucudan çıkıp aynı kullanıcı olarak tekrar giriş yapmanız veya aşağıdaki komutu kullanmanız gerekecektir.
$ su – ${USER}

Kullanıcınızın Docker grubuna eklendiğini doğrulayın.
$ groups
navjot sudo users docker

3. Adım – Git kullanıcısı oluşturun

Kullanıcıların ana makineye SSH aracılığıyla erişebilmesi için ana bilgisayarda ayrı bir git kullanıcısı oluşturmanız gerekecektir. Git kullanıcısını oluşturmak için aşağıdaki komutu çalıştırın.
$ sudo adduser –system –shell /bin/bash –gecos ‘Git Version Control’ –group –disabled-password –home /home/git git

Daha iyi anlamak için yukarıdaki komuttaki tüm seçenekleri ve parametreleri inceleyelim.

  • --system – Normal bir kullanıcı yerine bir sistem kullanıcısı oluşturur. Sistem kullanıcıları sistem hizmetlerini çalıştırmak içindir ve etkileşimli oturum açma işlemleri için kullanılamaz.
  • --shell /bin/bash – sistem kullanıcısının oturum açma kabuğunu Bash kabuğuna ayarlar.
  • --gecos 'Git Version Control' – Kullanıcı için açıklayıcı bir alan ayarlar. İsteğe bağlıdır ve atlanabilir ancak sisteminizde çok sayıda kullanıcı varsa kullanışlıdır.
  • --group – kullanıcıyla aynı adı taşıyan bir grup oluşturur.
  • --disabled-password – hesabın güvenliğini sağlamaya yardımcı olan kullanıcı için şifre tabanlı oturum açmayı devre dışı bırakır.
  • --home /home/git – kullanıcının ana dizinini, kullanıcının dosyalarını ve yapılandırmasını saklayan /home/git olarak ayarlar.
  • git – kullanıcı adını belirtir. Burada hesabın kullanıcı adı olarak git’i kullanıyoruz.

Komutu çalıştırdığınızda aşağıdaki çıktıyı alacaksınız.
Adding system user `git’ (UID 105) …
Adding new group `git’ (GID 111) …
Adding new user `git’ (UID 105) with group `git’ …
Creating home directory `/home/git’ …

Bir sonraki adımda ihtiyaç duyacağımız UID ve GID değişkenlerinin değerlerini not edin. Bizim durumumuzda UID 105 ve GID 111’dir.

Adım 4 – Gitea’yı Yapılandırma ve Yükleme

Sistem Saat Dilimini Yapılandırma

Sisteminizin geçerli saat dilimini aşağıdaki komutla kontrol edebilirsiniz.
$ timedatectl
Local time: Sat 2023-11-18 07:15:53 UTC
Universal time: Sat 2023-11-18 07:15:53 UTC
RTC time: Sat 2023-11-18 07:15:53
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes NTP
service: active RTC in local TZ: no

Sistemin GMT veya UTC saat dilimine ayarlandığını görebilirsiniz. Farklı bir saat dilimine sahip bir bölgede yaşıyorsanız veya bunu değiştirmek istiyorsanız, bunu yapmak için aşağıdaki komutu kullanın.
$ sudo timedatectl set-timezone Asia/Kolkata

Check the timezone again.
$ timedatectl Local time: Sat 2023-11-18 12:46:29 IST
Universal time: Sat 2023-11-18 07:16:29 UTC
RTC time: Sat 2023-11-18 07:16:29
Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: yes NTP
service: active RTC in local TZ: no

Saat diliminin GMT+5:30 olan IST’ye güncellendiğini görebilirsiniz.

Gitea Dizinleri Oluşturun

Gitea için dizini oluşturun.
$ mkdir ~/gitea-docker

Gitea dizinine geçin.
$ cd ~/gitea-docker

Gitea verilerini ve PostgreSQL veritabanlarını depolamak için dizinler oluşturun.
$ mkdir {gitea,postgres}

Gitea Docker Oluşturma Dosyasını Yapılandırma

Düzenleme için Docker Compose dosyasını oluşturun ve açın.
$ nano docker-compose.yml

İçine aşağıdaki kodu yapıştırın. Daha önce oluşturulan UID ve GID değerlerini yapıştırın.

services:
server:
image: gitea/gitea:1.21.0
container_name: gitea
environment:
- USER_UID=105
- USER_GID=111
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /home/git/.ssh/:/data/git/.ssh
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2221:22"
depends_on:
- db

db:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data

networks:
gitea:
external: false

Ctrl + X tuşlarına basarak ve istendiğinde Y girerek dosyayı kaydedin.

Bir önceki adımda oluşturduğumuz kullanıcı için UID (Kullanıcı Tanımlayıcı) ve GID (Grup Tanımlayıcı) değerlerini kullanıyoruz.

Yukarıdaki Docker Compose dosyası, biri Gitea ve diğeri PostgreSQL için olmak üzere iki konteyner dağıtır. Veritabanı ayrıntılarını yapılandırmak için birkaç ortam değişkeni ekledik. PostgreSQL veritabanını Gitea konteynerine bağlamak için dosyada PostgreSQL servisinin adı olarak hostu belirttik.

“3000:3000” ve “2221:22” bağlantı noktası parametreleri, sol bağlantı noktasının ana bilgisayar bağlantı noktasını ve sağ bağlantı noktasının konteyner bağlantı noktasını gösterdiği bağlantı noktası eşlemesini belirtir. Gitea, web hizmeti için 3000 numaralı bağlantı noktasını kullanıyor; biz de sunucuya bunu gösterdik. SSH için sistemimiz zaten oturum açma amacıyla 22 numaralı bağlantı noktasını kullanıyor. Bu nedenle SSH işlemlerini gerçekleştirmek için özel bir port belirliyoruz. Bizim durumumuzda 2221 numaralı bağlantı noktasını kullanıyoruz. Bu bağlantı noktasının, bu eğitimin 1. adımında zaten yaptığımız gibi, güvenlik duvarınız aracılığıyla da açılması gerekir.

Hem Gitea hem de PostgreSQL konteynerleri, gitea adı verilen ortak bir dahili Docker ağı aracılığıyla bağlanır. Docker kurulumunuzu başlattığınızda birim bağlantıları geçerli klasörde otomatik olarak gitea ve postgres dizinleri oluşturacaktır. Oluşturma dosyasında belirtilen kullanıcı kimliği, Gitea konteynerinin gitea dizinini oluşturmak için kullanacağı kimliktir. Öte yandan PostgreSQL konteyneri, varsayılan davranış olan systemd-coredump kullanıcısı tarafından yönetilecektir. Bu davranışı değiştirebilirsiniz, ancak bu gerekli değildir.

Gitea Kurulumunuzu özelleştirin

~/gitea-docker/gitea/gitea/conf dizinine bir app.ini dosyası ekleyerek Gitea kurulumunuzu özelleştirebilirsiniz. Kurulumdan sonra bu dosya konteynerin içinden /data/gitea/conf/app.ini konumundan düzenlenebilir. Başvuru için Gitea’nın Github deposundaki örnek ini dosyasını kullanabilirsiniz.

Gitea’yı yükleyin

Gitea kapsayıcılarını başlatmak için aşağıdaki komutu çalıştırın.
$ docker compose up -d

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b5ce50a04fe gitea/gitea:1.21.0 "/usr/bin/entrypoint…" 43 seconds ago Up 42 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:2221->22/tcp, :::2221->22/tcp gitea
0908cb9ec3b7 postgres:15 "docker-entrypoint.s…" 43 seconds ago Up 42 seconds 5432/tcp

Adım 5 – Nginx’i yükleyin

Debian 12, Nginx’in eski bir sürümüyle birlikte gelir. En son sürümü yüklemek için resmi Nginx deposunu indirmeniz gerekir.

Nginx’in imzalama anahtarını içe aktarın.
$ curl https://nginx.org/keys/nginx_signing.key | gpg –dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginx’in kararlı sürümü için depoyu ekleyin.
$ echo “deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/debian `lsb_release -cs` nginx” \ | sudo tee /etc/apt/sources.list.d/nginx.list

Sistem depolarını güncelleyin.
$ sudo apt update

Nginx’i yükleyin.
$ sudo apt install nginx

Kurulumu doğrulayın. Debian sistemlerinde aşağıdaki komut yalnızca sudo ile çalışacaktır.
$ sudo nginx -v nginx version: nginx/1.24.0

Nginx sunucusunu başlatın.

$ sudo systemctl start nginx

Check the service status.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Sat 2023-11-18 15:47:20 IST; 1s ago
Docs: https://nginx.org/en/docs/
Process: 4225 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 4226 (nginx)
Tasks: 2 (limit: 2315)
Memory: 1.8M
CPU: 7ms
CGroup: /system.slice/nginx.service
??4226 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??4227 "nginx: worker process"

Sunucunuzun IP adresini web tarayıcınızda açın. Sunucunuzun çalışır durumda olduğu anlamına gelen aşağıdaki sayfayı görmelisiniz.

Adım 6 – SSL’yi yükleyin

SSL sertifikasını oluşturmak için Certbot’u kurmamız gerekiyor. Certbot’u Debian’ın deposunu kullanarak kurabilir veya Snapd aracını kullanarak en son sürümü alabilirsiniz. Snapd sürümünü kullanacağız.

Debian 12, Snapd yüklü olarak gelmiyor. Snapd paketini yükleyin.
$ sudo apt install snapd

Snapd sürümünüzün güncel olduğundan emin olmak için aşağıdaki komutları çalıştırın.
$ sudo snap install core && sudo snap refresh core

Certbot’u yükleyin.
$ sudo snap install –classic certbot

/usr/bin dizinine sembolik bir bağlantı oluşturarak Certbot komutunun çalıştırılabileceğinden emin olmak için aşağıdaki komutu kullanın.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbot’un düzgün çalışıp çalışmadığını doğrulayın.
$ certbot –version certbot 2.7.4

SSL sertifikasını oluşturun.
$ sudo certbot certonly –nginx –agree-tos –no-eff-email –staple-ocsp –preferred-challenges http -m [email protected] -d gitea.example.com

Yukarıdaki komut, sunucunuzdaki /etc/letsencrypt/live/gitea.example.com dizinine bir sertifika indirecektir.

Diffie-Hellman grup sertifikası oluşturun.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbot yenileme planlayıcı hizmetini kontrol edin.
$ sudo systemctl list-timers

NEXT                        LEFT           LAST                        PASSED      UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------
Sat 2023-11-18 18:41:45 IST 2h 49min left Sat 2023-11-18 12:22:34 IST 3h 29min ago apt-daily.timer apt-daily.service
Sat 2023-11-18 20:40:00 IST 4h 47min left - - snap.certbot.renew.timer snap.certbot.renew.service
Sun 2023-11-19 00:00:00 IST 8h left - - dpkg-db-backu

SSL yenilemenin düzgün çalışıp çalışmadığını kontrol etmek için işlemin provasını yapın.
$ sudo certbot renew –dry-run

Hiçbir hata görmüyorsanız, her şey hazır demektir. Sertifikanız otomatik olarak yenilenecektir.

Adım 7 – Nginx’i yapılandırın

Sitenize bir yapılandırma dosyası eklemek için aşağıdaki komutu çalıştırın.
$ sudo nano /etc/nginx/conf.d/gitea.conf

Aşağıdaki kodu editöre yapıştırın.

# Connection header for WebSocket reverse proxy
map $http_upgrade $connection_upgrade {
default upgrade;
"" close;
}

map $remote_addr $proxy_forwarded_elem {

# IPv4 addresses can be sent as-is
~^[0-9.]+$ "for=$remote_addr";

# IPv6 addresses need to be bracketed and quoted
~^[0-9A-Fa-f:.]+$ "for=\"[$remote_addr]\"";

# Unix domain socket names cannot be represented in RFC 7239 syntax
default "for=unknown";
}

map $http_forwarded $proxy_add_forwarded {

# If the incoming Forwarded header is syntactically valid, append to it
"~^(,[ \\t]*)*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*([ \\t]*,([ \\t]*([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?(;([!#$%&'*+.^_`|~0-9A-Za-z-]+=([!#$%&'*+.^_`|~0-9A-Za-z-]+|\"([\\t \\x21\\x23-\\x5B\\x5D-\\x7E\\x80-\\xFF]|\\\\[\\t \\x21-\\x7E\\x80-\\xFF])*\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem";

# Otherwise, replace it
default "$proxy_forwarded_elem";
}

# Redirect all non-encrypted to encrypted
server {
listen 80;
listen [::]:80;
server_name gitea.example.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name gitea.example.com;

ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/gitea.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

access_log /var/log/nginx/gitea.access.log main;
error_log /var/log/nginx/gitea.error.log;

tcp_nopush on;

# security headers
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
add_header Permissions-Policy "interest-cohort=()" always;

# . files
location ~ /\.(?!well-known) {
deny all;
}

location / {
client_max_body_size 100M;
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Forwarded $proxy_add_forwarded;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}

İşiniz bittiğinde, düzenleyiciyi kapatmak için Ctrl + X tuşlarına basın ve dosyayı kaydetmeniz istendiğinde Y tuşuna basın.

Düzenlemek için /etc/nginx/nginx.conf dosyasını açın.
$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; satırının önüne aşağıdaki satırı ekleyin.
server_names_hash_bucket_size 64;

Ctrl + X tuşlarına basarak ve istendiğinde Y girerek dosyayı kaydedin. Nginx yapılandırmasını test edin.
$ sudo nginx -t

Yapılandırmanızın doğru olduğunu gösteren aşağıdaki çıktıyı görmelisiniz.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx hizmetini yeniden yükleyin.

$ sudo systemctl reload nginx

Adım 8 – Gitea’ya Erişim ve Kurulum

Tarayıcınızda https://gitea.example.com URL’sini ziyaret ettiğinizde aşağıdaki kurulum ekranı görünecektir.

Alanların çoğu, Docker oluşturma dosyasındaki değerlere göre sizin için önceden doldurulacaktır.

Sunucu Etki Alanı olarak gitea.example.com adresini ve Gitea Temel URL’si olarak https://gitea.example.com adresini girin. SSH Server Port değerini 22’den 2221’e değiştirin. Geri kalan ayarları olduğu gibi bırakın.

Posta özelliklerini kullanmak istiyorsanız SMTP sunucu ayrıntılarınızı ekleyebilirsiniz. Sayfanın E-posta Ayarları bölümünü genişletin ve değerleri ekran görüntüsünde gösterildiği gibi girin. Gösterildiği gibi SMTP bağlantı noktanızı ana makine adıyla birlikte eklediğinizden emin olun. Eğitimimiz için Amazon SES hizmetini kullanıyoruz. İstediğiniz herhangi bir SMTP hizmetini kullanabilirsiniz.

Kurulumdan önce kontrol etmeniz gereken birkaç ayar daha var. Bunları değiştirmek için sayfanın Sunucu ve Üçüncü Taraf Hizmet Ayarları bölümünü genişletin.

Ayarları ihtiyacınıza göre değiştirin. Daha fazla gizlilik sağlamak için E-posta Adreslerini Varsayılan Olarak Gizle seçeneğini ve Git sitemizi gizli tutmak için Sayfaları Görüntülemek için Oturum Açmayı Gerektir seçeneğini etkinleştirdik. İnsanların hesap açmasını istemiyorsanız Kendi Kendine Kaydı Devre Dışı Bırak seçeneğini etkinleştirin.

Son fakat en az değil, yönetici hesabınızı kurun. Sayfanın Yönetici Hesabı Ayarları bölümünü genişletin ve gerekli değerleri girin.

Kurulumu tamamlamak için işiniz bittiğinde Gitea’yı Yükle düğmesine tıklayın. Gitea kontrol paneline yönlendirileceksiniz. Herhangi bir nedenle 502 hatası alırsanız sayfayı yenileyin.

Adım 8 – İlk Depoyu Oluşturun

İlk depomuzu oluşturalım. Bunu yapmak için kontrol panelindeki + işaretini tıklayın.

Depo ayrıntılarını girin. Açılır menüden seçim yaparak Varsayılan Sayı etiketini seçin. Deponuz için uygun bir lisans seçin.

Deponuz için varsayılan dalı seçin.

Memnun kaldığınızda, Gitea kurulumunuzda ilk deponuzu oluşturmak için Depo oluştur düğmesine tıklayın. Depo evinize yönlendirileceksiniz.

Adım 9 – SSH’yi kurun

Yeni oluşturduğumuz repository ile kullanmak üzere SSH kurulumunu yapalım.

Eğitimimiz için Ubuntu’nun önceden yüklendiği yerel bir bilgisayar kullanacağız. Ancak komutlar herhangi bir işletim sistemi terminalinde çok fazla değişiklik yapmadan çalışmalıdır.

Yerel bilgisayarınızda Gitea ile kullanmak için yeni bir SSH anahtarı oluşturun.

$ ssh-keygen -f ~/.ssh/gitea-demo -t rsa -b 4096 -C “HowtoForge Gitea Demo” -q -N “yourpassphrase”

Yukarıdaki komutta yer tutucunun yerine güçlü bir parola girin. Bu, ~/.ssh/gitea-demo konumunda bir SSH anahtarı oluşturacaktır.

Daha sonra, profil resminizdeki açılır menüye tıklayıp Ayarlar seçeneğini seçerek Gitea profil ayarlarınızı gösterildiği gibi açın.

Daha sonra sayfadaki SSH/GPG Anahtarları sekmesine geçin.

SSH anahtarınız için bir ad ekleyin. Yerel bilgisayarınızdaki terminale geri dönün ve Gitea’nın genel anahtarının çıktısını almak için aşağıdaki komutu çalıştırın.

$ cat ~/.ssh/gitea-demo.pub

Ortaya çıkan çıktıyı kopyalayın ve Gitea’nın SSH anahtarları sayfasındaki İçerik kutusuna geri yapıştırın.

Anahtarı eklemeyi tamamlamak için Anahtar Ekle düğmesini tıklayın.

Yerel bilgisayarınıza geri dönün ve SSH aracısını 1 saat boyunca aktif kalacak şekilde ayarlayın.

$ eval $(ssh-agent -t 3600)

Yeni oluşturulan SSH anahtarını SSH aracısına ekleyin.

$ ssh-add ~/.ssh/gitea-demo

Enter passphrase for /home/navjot/.ssh/gitea-demo:

Identity added: /home/navjot/.ssh/gitea-demo (HowtoForge Gitea Demo)

Parolanız istenecektir.

Adım 10 – SSH kullanarak Depoyu Klonlayın

Yeni oluşturduğumuz repository’yi SSH kullanarak klonlayalım. Depo sayfasını tekrar ziyaret edin ve SSH seçeneğini seçtikten sonra SSH URL’sini kopyalayın.

Aşağıdaki gibi görünmelidir.

ssh://[email protected]:2221/navjot/howtoforge.git

Run the following command on your local PC to clone the repository using SSH.

$ git clone ssh://[email protected]:2221/navjot/howtoforge.git
Cloning into 'howtoforge'...
The authenticity of host '[gitea.example.com]:2221 ([128.199.48.13]:2221)' can't be established.
ED25519 key fingerprint is SHA256:H7t5hNmEpZkYC9u3sXbA1mnGXCnoqaUZGL+gpAG9uNs.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[gitea.example.com]:2221' (ED25519) to the list of known hosts.
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.

Toplantı sahibi kimlik bilgilerini eklemeniz istenecektir. Depoyu klonlamaya devam etmek için evet girin.

Klonlanmış depoyu sisteminizde göreceksiniz.

$ ls howtoforge

Dizine geçin.

$ cd howtoforge

Yeni klonlanan havuzun Git durumunu kontrol edin. Bunun için yerel bilgisayarınızda Git’in kurulu olması gerekir.

$ git status
On branch main
Your branch is up to date with ‘origin/main’. nothing to commit,
working tree clean

This concludes that SSH is working perfectly.

Adım 11 – İlk Commit’in Test Edilmesi

Artık ilk depomuzu kurduğumuza göre, bazı değişiklikler yapıp bunları geri almanın zamanı geldi.

README.md dosyasını güncelleyelim. Yerel bilgisayarınızda düzenlemek için benioku dosyasını açın.

$ nano README.md

Dosyayı düzenleyin ve bittiğinde Ctrl + X tuşlarına basarak ve istendiğinde Y girerek kaydedin.

Check the Git status again.

$ git status

On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")

Bu, Benioku dosyasının düzenlendiğini ancak kaydedilmediğini gösterir. İşleme hazırlamak için dosyayı ekleyin.

$ git add README.md

Dosyayı commit edin.

$ git commit -m "Update the Readme file for Gitea tutorial."
[main bb2956f] Update the Readme file for Gitea tutorial.
1 file changed, 3 insertions(+), 1 deletion(-)

Dosyayı Gitea Sunucunuza gönderin.

$ git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 378 bytes | 378.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To ssh://gitea.example.com:2221/navjot/howtoforge.git
bd1248f..bb2956f main -> main

Onaylamak için Gitea deposu sayfasına geri dönün.

Benioku dosyasının güncellendiğini ve en son taahhüt mesajının da gösterildiğini fark edebilirsiniz. Değişiklikleri görüntülemek için commitmesajına tıklayın; farklılıkların bulunduğu aşağıdaki sayfayı görüntüleyebilirsiniz.

Bu, depomuz için ilk commitimizi tamamlıyor. Projeleriniz için Gitea kurulumunuz üzerinde çalışmaya başlayabilirsiniz.

Adım 12 – Gitea’yı Yedekleyin ve Geri Yükleyin

Gitea, tek bir komut kullanarak yedekleme gerçekleştirebilen bir komut satırı aracıyla birlikte gelir. Yedeklemeyi gerçekleştirmek üzere docker konteynerinin içindeki komut satırı aracını çalıştırmak için aşağıdaki komutu çalıştırın.

$ docker exec -u git -it -w /app/gitea gitea bash -c ‘/usr/local/bin/gitea dump -c /data/gitea/conf/app.ini’

Yukarıdaki komutta -u git flagını kullanarak, 3. adımda oluşturduğumuz ve kurulum sırasında yapılandırdığımız kullanıcıyla aynı kullanıcı olarak komutu çalıştırıyoruz. -w /app/gitea bayrağı, docker konteynerinin içinde, yedekleme dosyasının saklanacağı klasörü tanımlar. Yedekleme klasörü, git kullanıcısının üzerine yazma iznine sahip olacağı şekilde seçilmelidir. Liman konteynerinin içinde bu türden yalnızca iki klasör vardır. Biri /data klasörü, diğeri /app/gitea klasörüdür. /data klasörünü kullanamayız çünkü komut satırı aracı, sunucu alanınızı doldurabilecek hedef olarak kullanırsak belirsiz bir döngüye giren veri klasörünün tamamını yedekler. Bu nedenle yedeği yalnızca /app/gitea klasöründe saklayabiliriz.

Komuttaki bir sonraki şey kapsayıcı adı gitea’dır. Bundan sonra, konteynerin içindeki komutu yürütmek için kullanılan Linux kabuğunun türünü belirtiyoruz. -c bayrağı, kabın içinde çalıştırmanız gereken komutu belirtir. Ve çalıştırılacak komut, komut satırı aracını çalıştıran ve onunla birlikte gidecek yapılandırma dosyasının konumunu belirten /usr/local/bin/gitea dump -c /data/gitea/conf/app.ini komutudur.

2023/11/20 06:21:41 ...les/setting/cache.go:75:loadCacheFrom() [I] Cache Service Enabled
2023/11/20 06:21:41 ...les/setting/cache.go:90:loadCacheFrom() [I] Last Commit Cache Service Enabled
2023/11/20 06:21:41 ...s/setting/session.go:74:loadSessionFrom() [I] Session Service Enabled
2023/11/20 06:21:41 ...es/setting/mailer.go:237:loadMailerFrom() [I] Mail Service Enabled
2023/11/20 06:21:41 ...es/setting/mailer.go:259:loadNotifyMailFrom() [I] Notify Mail Service Enabled
2023/11/20 06:21:41 ...s/storage/storage.go:176:initAttachments() [I] Initialising Attachment storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments
2023/11/20 06:21:41 ...s/storage/storage.go:166:initAvatars() [I] Initialising Avatar storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars
2023/11/20 06:21:41 ...s/storage/storage.go:192:initRepoAvatars() [I] Initialising Repository Avatar storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars
2023/11/20 06:21:41 ...s/storage/storage.go:186:initLFS() [I] Initialising LFS storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/git/lfs
2023/11/20 06:21:41 ...s/storage/storage.go:198:initRepoArchives() [I] Initialising Repository Archive storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive
2023/11/20 06:21:41 ...s/storage/storage.go:208:initPackages() [I] Initialising Packages storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages
2023/11/20 06:21:41 ...s/storage/storage.go:219:initActions() [I] Initialising Actions storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_log
2023/11/20 06:21:41 ...s/storage/storage.go:223:initActions() [I] Initialising ActionsArtifacts storage with type: local
2023/11/20 06:21:41 ...les/storage/local.go:33:NewLocalStorage() [I] Creating new Local Storage at /data/gitea/actions_artifacts
2023/11/20 06:21:41 cmd/dump.go:265:runDump() [I] Dumping local repositories... /data/git/repositories
2023/11/20 06:21:41 cmd/dump.go:306:runDump() [I] Dumping database...
2023/11/20 06:21:41 cmd/dump.go:318:runDump() [I] Adding custom configuration file from /data/gitea/conf/app.ini
2023/11/20 06:21:41 cmd/dump.go:334:runDump() [I] Custom dir /data/gitea is inside data dir /data/gitea, skipped
2023/11/20 06:21:41 cmd/dump.go:346:runDump() [I] Packing data directory.../data/gitea
2023/11/20 06:21:41 cmd/dump.go:430:runDump() [I] Finish dumping in file gitea-dump-1700441501.zip

Şimdi restorasyon sürecine geçelim. Gitea’nın yeni ve yeni bir Docker kurulumunun çalışıyor olması gerekir. Ancak kurulum sürecine geçmeyin.

Docker kabuğunda oturum açın.

$ docker exec –user git -it gitea bash

app/gitea dizinine geçin.

$ cd app/gitea

Yedekleme dosyasını açın.

$ unzip gitea-dump-1700441501.zip

Çıkarılan dizine geçin.

$ cd gitea-dump-1700441501

/data/gitea klasörünü geri yükleyin.

$ mv data/* /data/gitea

Depoları geri yükleyin.

$ mv repos/* /data/git/gitea-repositories/

Dosya izinlerini düzeltin.
$ chown -R git:git /data

Git Hooks’u yeniden oluşturun.
$ /usr/local/bin/gitea -c ‘/data/gitea/conf/app.ini’ admin regenerate hooks

Liman işçisi kabuğundan çıkın.
$ exit

Adım 13 – Gitea’yı yükseltin

Gitea’yı yükseltmek basit bir işlemdir.

Mevcut kapsayıcıları kapatın ve çıkarın. Veriler ana bilgisayardaki konteynerlerin dışında kaldığından saklanacaktır.

$ cd ~/gitea-docker $ docker compose down –remove-orphans

docker-compose.yml dosyasını açın ve Gitea konteynerinin sürümünü değiştirin. Ardından yeni Gitea görüntüsünü çekin.

$ docker pull

Yeni kapsayıcıları başlatın.

$ docker compose up -d

Durumu kontrol edin.

$ docker ps

Yazının orijinalini buradan okuyabilirsiniz