Docker Imajı ile Liman üzerine Envanter Sunucusu kurma
Published: 2024-03-18 06:13:49

Kurulumu yapmamız için sistemde dockerın kurulu olması gerekiyor. 

Dockerı indirmek için [bu linke tıklayabilirsiniz](https://www.docker.com/get-started/)

Dockerı yükledikten sonra dockerhub'da hazır halde bulunan liman, envanter gibi imajları çekip kurulumumuzu yapacağız.

Kullanacağımız docker compose dosyası şu şekilde:

docker-compose.yaml:
```yaml
version: '3.8'
services:
  limancore:
    image: aciklab/liman:latest
    depends_on:
      db:
        condition: service_healthy
    restart: always
    environment:
      # Redis settings
      - REDIS_HOST=liman-redis
      - REDIS_PASS=${DB_PASS}
      - REDIS_PORT=6379
      # DB settings
      # For using Patroni or another Postgresql Cluster
      - DB_HOST=liman-db
      - DB_DATABASE=liman
      - DB_USERNAME=liman
      - DB_PORT=5432
      - DB_PASS=${DB_PASS}
      # Nginx settings
      - NGINX_PORT=443
    container_name: liman-core
    tty: true
    ports:
      - '443:443'
      - '3000:3000'
    volumes: 
      - core:/liman
      - certs:/usr/local/share/ca-certificates
    networks:
      - liman-net
      - internal-net
    dns:
      - 127.0.0.1
      - ${DNS}
      # Add active directory DNS(s) for using Domain extension and LDAP on Liman
  db:
    image: postgres:15
    container_name: liman-db
    restart: always
    environment:
      - POSTGRES_USER=liman
      - POSTGRES_PASSWORD=${DB_PASS}
      - POSTGRES_DB=liman
    volumes: 
      - db:/var/lib/postgresql/data
    healthcheck :
      test: [ "CMD", "pg_isready", "-q", "-d", "liman", "-U", "liman" ]
      interval : 5s
      timeout : 5s
      retries : 5
    networks:
      - liman-net
  redis:
    image: redis
    container_name: liman-redis
    environment:
      - REDIS_PASSWORD=${DB_PASS}
      - REDIS_DISABLE_COMMANDS=CONFIG
    command: > 
      --requirepass ${DB_PASS} --protected-mode yes
    networks:
      - liman-net
  webssh:
    image: limanmys/webssh:latest
    restart: always
    container_name: liman-webssh
    networks:
      - liman-net
  inventory_server:
    image: aciklab/inventory-server:latest
    depends_on:
      inventory_db:
        condition: service_healthy
    restart: always
    env_file:
      - .env
    environment:
      # DB settings
      # For using Patroni or another Postgresql Cluster
      - DB_HOST=inventory-db
      - DB_NAME=inventory
      - DB_USERNAME=inventory
      - DB_PORT=5432
      - DB_PASS=${DB_PASS}
      - DB_DRIVER=postgres
      - REPORT_ENGINE_URL=http://report-engine:8001
    container_name: inventory-server
    tty: true
    volumes: 
      - core:/liman
      - certs:/usr/local/share/ca-certificates
    networks:
      - internal-net
      - liman-net
    dns:
      - 127.0.0.1
      - ${DNS}
      # Add active directory DNS(s) for using Domain extension and LDAP on Liman
  report_engine: 
    image: aciklab/report-engine:latest
    restart: always
    container_name: report-engine
    tty: true
    networks:
      - internal-net
      - liman-net
  inventory_db:
    image: postgres:15
    container_name: inventory-db
    restart: always
    environment:
      - POSTGRES_USER=inventory
      - POSTGRES_PASSWORD=${DB_PASS}
      - POSTGRES_DB=inventory
    volumes: 
      - inventory_db:/var/lib/postgresql/data
    healthcheck :
      test: [ "CMD", "pg_isready", "-q", "-d", "inventory", "-U", "inventory" ]
      interval : 5s
      timeout : 5s
      retries : 5
    networks:
      - liman-net
volumes:
  # Persistent Postgresql Database
  db:
    driver: local
  inventory_db: 
    driver: local
  # Persist Core Files
  core:
    driver: local
  # Persist Linux System Certificates
  certs:
    driver: local
networks:
  internal-net:
    name: internal-net
    driver: overlay
    internal: true
    attachable: true
  liman-net:
    name: liman-net
    driver: bridge
```

docker compose dosyamızın yanında bir de aynı dizinde ortam değişkenlerinin tutulacağı .env dosyası gerekiyor. Örnek bir .env dosyası aşağıda verilmiştir.

.env:
```yaml
APP_KEY="93610254060735082929523103547063"
DB_DRIVER="postgres"
DB_HOST="inventory-db"
DB_PORT="5432"
DB_USER="inventory"
DB_PASS="ChangeMe"
DB_NAME="inventory"
DNS=""
REPORT_ENGINE_URL="http://report-engine:8001"
```
Buraya kadarki kısımları düzgün yaptıysak sistemi ayağa kaldırabiliriz. Dosyaların bulunduğu dizinden:

`docker compose up -d`

komutunu kullanıyoruz. İmajların dockerhubdan çekilmesi ve sistemin ilk kurulumu biraz zaman alacaktır. Bütün containerlar ayağa kalktıysa "localhost" adresinden limana erişebiliyor olmamız gerekli. Limana giriş yapmak için ise bir şifreye ihtiyacımız var. Onu da 

`docker exec -it liman-core limanctl administrator`

komutu ile elde edebiliriz. Limana erişimi sağladıktan sonra envanter eklentimizi kuralım. Eklentiyi kurduktan sonra ise sunucumuzu ekleyelim.


Öncelikle yeni bir sunucu ekleme sayfasına gidiyoruz

![UI2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhrgkhs27dj8gighiux7.png)


Daha sonra kırmızı ile gösterilen yerlere sunucumuzun adresini (yani docker ağında çalıştığı için containerın ismini) ve 7825 portunu giriyor ve ilerliyoruz.

![UI3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sd3hjljtrabur5vobgtc.png)

Bu adımda Sunucumuza koymak istediğimiz ismi giriyor işletim sistemini GNU/LINUX seçip devam ediyoruz.


![UI4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gxew8ycponzucffljfsa.png)

Son adımda ise Anahtarsız girişi seçiyoruz ve ilerleyip eklemeyi sonlandırıyoruz.
Şimdi eklentiyi sunucumuza eklememiz gerekiyor.

![UI5](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmt69y54w788xnqa99nm.png)

Kırmızı ile işaretlenen yere basıp sunucumuzun menüsünü açıyoruz.


![Eklenti 4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bse4pyam8hx7oa29l4hd.png)

Daha sonra 1 ile işaretlenmiş yerden sunucunun eklentileri kısmına gelip 2 ile işaretlenmiş yere basıyoruz.

![Eklenti 5](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uldtmmxlwcqrwos5udde.png)


Açılan pencereden "Envanter Keşif" eklentisini seçip ekliyoruz. Eğer eklenti başarılı bir şekilde eklendiyse aşağıdaki gibi bir menü, sunucu sayfasında görülecektir.


![Eklenti 7](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/41vgrqyim8fta3e5u3tg.png)

Şimdi eklentinin ayarlarını yapmamız gerekiyor. Tekrardan eklentiler kısmına gelelim.


![UI6](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8q7u3c0voz0at00v8g2.png)

Kırmızı ile belirtilen kısma basarak eklenti ayarları sekmesine girelim.


![UI7](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pek51iog0mrjxq8ryrnd.png)

API Adresini şekildeki gibi girdikten sonra kaydederek kurulumu tamamlayabiliriz.