Redmine, proje yönetiminde/takibinde en çok kullanılan web uygulamalarından biri. Tema ve eklenti desteği sayesinde, Redmine’a alışmak ve özelleştirmek hızlı ve kolay bir şekilde gerçekleştirilebiliyor. Bu yazıda, Redmine’ın Docker ile nasıl kurulabileceğine bakacağız. Veritabanı olarak Postgres kullanacağız. Stateful uygulamalara ait dosyaları, sunucu üzerinde oluşturacağımız volumelarda tutacağız.
Docker ile Manuel Kurulum
Network Oluşturmak
Postgres ile Redmine arasındaki iletişimin sağlanması için bir network oluşturarak başlayacağız. Komutları tek bir makine üzerinde çalıştıracağımız için bridge network oluşturacağız:
$ docker network create --driver bridge redmine_network
Volume Oluşturmak
Daha önce de belirttiğimiz gibi, stateful uygulamalar için volume oluşturacağız. Containerlar silindiğinde dosyaların otomatik olarak silinmemesi ve uygulamaların durumlarının tutulabilmesi için bu volumelara ihtiyacımız var:
$ docker volume create postgres-data
$ docker volume create redmine-data
Hangi volume’un hangi dizine ait olduğunu container oluştururken Docker’a söyleyeceğiz.
Veritabanını Başlatmak
Redmine’ı Postgres ile birlikte kuracağımızı söylemiştik. Şimdi, Postgres’i yukarıda oluşturduğumuz volume ile başlatalım:
docker container run -d \
--name postgres \
--network redmine_network \
-v postgres-data:/var/lib/postgresql/data \
--restart always \
-e POSTGRES_PASSWORD='password' \
-e POSTGRES_DB='redmine' \
postgres:latest
Redmine’ı Başlatmak
Son olarak, az önce oluşturduğumuz veritabanının adresini ve giriş bilgilerini kullanarak Redmine’ı başlatabiliriz:
docker container run -d \
--name redmine \
--network redmine_network \
-p 80:3000 \
--restart always \
-v redmine_data:/usr/src/redmine/files \
-e REDMINE_DB_POSTGRES='postgres' \
-e REDMINE_DB_DATABASE='redmine' \
-e REDMINE_DB_PASSWORD='password' \
redmine:latest
Bunun ardından, tarayıcımızı açıp IP adresini yazarak yaptığımız kurulumu görebiliriz. Varsayılan kullanıcı adı ve parola olarak admin-admin kullanabiliriz.
Docker Compose ile Kurulum
Yukarıda uyguladığımız aşamaların tamamını Docker Compose kullanarak tek bir YAML dosyası içerisinde “declarative” olarak tanımlayabiliriz. Bu durumda docker-compose.yml dosyasının içeriği şöyle olacaktır:
version: '3.1'
services:
postgres:
image: postgres:latest
restart: always
networks:
- redmine
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- 'POSTGRES_PASSWORD=password'
- 'POSTGRES_DB=redmine'
redmine:
image: redmine:latest
restart: always
networks:
- redmine
volumes:
- redmine-data:/usr/src/redmine/files
ports:
- 80:3000
environment:
- 'REDMINE_DB_POSTGRES=postgres'
- 'REDMINE_DB_DATABASE=redmine'
- 'REDMINE_DB_PASSWORD=password'
volumes:
postgres-data:
redmine-data:
networks:
redmine:
driver: bridge
Bu dosyayı oluşturduktan sonra gereken tek şey, şu komutu kullanarak yayına almak olacaktır(bu aşamada dosya içinde parola vb. alanları da düzenleyebilirsiniz):
docker-compose up
Sonuç
Redmine’ın PostgreSQL ile kurulumunu, Docker ve Docker Compose kullanarak ayrı ayrı yaptık. Manuel kurulum için hazır Docker imajları kullanılarak yapılacak kurulumu tanımladıktan sonra, aynı altyapının Docker Compose ile tek bir dosya içerisinde nasıl tanımlanacağını gördük. Tüm servislerin, networklerin ve volume’ların tek bir dosyada tanımlanması; servislerin tamamının veya bir kısmının tek bir komutla ayağa kaldırılabilmesi; servislere ait logların tek bir ekrandan canlı takip edilebilmesi bu yöntemin artılarından birkaç tanesi olarak göze çarpıyor. Test dışındaki amaçlarla bu imajları ve yöntemleri kullanırken, production öncesindeki gerekli tüm önlemleri aldığınızdan emin olmayı unutmayın.