Docker kullanarak git server oluşturma

Git HTTP sunucusu, projeler üzerinde özel olarak çalışmak ve işbirliği yapmak isteyen kişiler için çok kullanışlıdır. Bu yazıda, Docker Compose kullanarak HTTP erişilebilir bir Git sunucusunun nasıl kurulacağını göstereceğim. Hemen başlayalım.

Gereksinimler

Aşağıdaki adımları uygulamak için bilgisayarınızda Docker kurulu olmalıdır. Docker’ı henüz kurmadıysanız, bu yazımdan docker kurulumuna göz atabilirsiniz.

Docker Compose kurulumu

Docker Compose dosyasını aşağıdaki komutla çok kolay bir şekilde indirebilirsiniz:

sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/
docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

NOT: curl, Linux dağıtımınızda kurulu olmayabilir. Bu durumda curl’yi aşağıdaki komutla yükleyebilirsiniz:

sudo apt install curl -y

Docker compose dosyasını indirdikten sonra aşağıdaki komutu çalıştırın:

sudo chmod +x /usr/local/bin/docker-compose

Şimdi docker-compose komutunun çalıştığını aşağıdaki kod ile görebilirsiniz:

docker-compose version

Aşağıdaki ekran görüntüsünde gösterildiği gibi sürüm bilgilerini yazdırmalıdır.

docker-compose version 1.21.0, build unknown
docker-py version: 3.4.1
CPython version: 3.7.3
OpenSSL version: OpenSSL 1.1.1d 10 Sep 2019

Docker Compose proje ayarları

Şimdi, git depolarını ve bazı yapılandırma dosyalarını saklamak için bir gitserver adında klasör oluşturup içinde bir repos ve etc klasörü oluşturun ve gitserver klasörü içine aşağıdaki komutla girin

cd gitserver

klasör içinde etc ve repos klasörleri mevcut. etc klasöründe ayar dosyalarını ve repos klasöründe depoları saklayacağız.

git server docker dosyası yapmak için gitserver.Dockerfile dosyası içerisine aşağıdaki bilgileri giriyoruz.

FROM ubuntu:18.04
RUN apt update 2>/dev/null
RUN apt install -y git apache2 apache2-utils 2>/dev/null
RUN a2enmod env cgi alias rewrite
RUN mkdir /var/www/git
RUN chown -Rfv www-data:www-data /var/www/git
COPY ./etc/git.conf /etc/apache2/sites-available/git.conf
COPY ./etc/git-create-repo.sh /usr/bin/mkrepo
RUN chmod +x /usr/bin/mkrepo
RUN a2dissite 000-default.conf
RUN a2ensite git.conf
RUN git config –system http.receivepack true
RUN git config –system http.uploadpack true
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
CMD /usr/sbin/apache2ctl -D FOREGROUND
EXPOSE 80/tcp

etc klasörü içinde git.conf dosyası oluşturup içine aşağıdaki bilgileri giriyoruz.


ServerAdmin webmaster@localhost

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias / /usr/lib/git-core/git-http-backend/

Alias / /var/www/git


Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Require all granted

DocumentRoot /var/www/html


Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined

etc klasörü içinde git-create-repo.sh dosyası oluşturup içerisinede şu bilgileri giriyoruz.

#!/bin/bash

GIT_DIR=”/var/www/git”
REPO_NAME=$1

mkdir -p “${GIT_DIR}/${REPO_NAME}.git”
cd “${GIT_DIR}/${REPO_NAME}.git”

git init –bare &> /dev/null
touch git-daemon-export-ok
cp hooks/post-update.sample hooks/post-update
git update-server-info
chown -Rf www-data:www-data “${GIT_DIR}/${REPO_NAME}.git”
echo “Git repository ‘${REPO_NAME}’ created in ${GIT_DIR}/${REPO_NAME}.git”

Son olarak gitserver klasörü içinde docker-compose.yml dosyası oluşturup içine aşağıdaki bilgileri giriyoruz.

version: “3.2”
services:
git-server:
build:
dockerfile: gitserver.Dockerfile
context: .
restart: always
ports:
– “8080:80”
volumes:
– ./repos:/var/www/git

Şimdi docker build işlemine şu komutla devam ediyoruz:

docker-compose build

şu satırları görüyorsanız başarılı şekilde build işlemi gerçekleşmiş demektir:

Step 16/20 : ENV APACHE_LOG_DIR /var/log/apache2
—> Running in 53d751851a8e
Removing intermediate container 53d751851a8e
—> cd044ef86559
Step 17/20 : ENV APACHE_LOCK_DIR /var/lock/apache2
—> Running in 8f7a8be1e415
Removing intermediate container 8f7a8be1e415
—> ac3859364c99
Step 18/20 : ENV APACHE_PID_FILE /var/run/apache2.pid
—> Running in cb352bae035f
Removing intermediate container cb352bae035f
—> f03f1f50d866
Step 19/20 : CMD /usr/sbin/apache2ctl -D FOREGROUND
—> Running in 8b844611eb9f
Removing intermediate container 8b844611eb9f
—> 2d3e969efcf1
Step 20/20 : EXPOSE 80/tcp
—> Running in 5a2aa9a90ff1
Removing intermediate container 5a2aa9a90ff1
—> f2f06517c016

Successfully built f2f06517c016
Successfully tagged gitserver_git-server:latest

Unutmayın gitserver.Dockerfile, git.conf, git-create-repo.sh dosyalarının herhangi birinde değişiklik yaptığınızda, docker-compose build komutunu kullanarak Docker görüntüsünü yeniden oluşturmanız gerekir.

Şimdi aşağıdaki komutla docker git-server servisini başlatabiliriz.

docker-compose up -d

-d parametresi ile servisin arka planda çalışmasını sağladık.

docker-compose ps yazarak çalışan imajı görebilirsiniz.

Yeni repository oluşturma

Oluşturduğumuz git server üzerinde yeni bir repository oluşturmak için aşağıdaki komutu kullanmanız gerekiyor. Burada “test” yerine kendi oluşturmak istediğinz repo adresini yazabilirsiniz.

docker-compose exec git-server mkrepo test

yukarıdaki komutu çalıştırdığınızda aşağıdaki çıktıyı elde edeceksiniz

Git repository ‘test’ created in /var/www/git/test.git

git clone http://192.168.20.160:8080/test.git komutu ile ilk reponuzu çekebilirsiniz.

Yazının orjinal haline şu adresten ulaşabilirsiniz.

Comments are closed.