Nginx Server Configuration

Depreciated

Yeni versiyonda artık Treafik web server kullanılmaktadır. Gerekli dökümantasyon için bakınız

Mikromax ERP servislerini dış dünyaya açmak için tavsiye edilen yöntem Nginx’i bir Docker konteyneri olarak çalıştırmaktır. Bu sayede Nginx, uygulama servisleriyle aynı Docker ağı üzerinde yer alır ve servis adlarını upstream adres olarak kullanabilir.

Klasör Yapısı

Aşağıdaki klasör yapısını sunucuda /etc/mikromax altında oluşturun:

/etc/mikromax/
└── nginx/
    ├── conf.d/                 # Her servis için ayrı .conf dosyaları
    │   ├── identity.conf
    │   ├── api.conf
    │   ├── web.conf
    │   └── ...                 # Diğer servisler
    └── certs/                  # SSL sertifikalarınızı buraya kopyalayın
        ├── cert.crt
        └── key.key

Not: Docker yönetimi Portainer üzerinden yapıldığı için sunucuda docker-compose.yml veya .env dosyası bulundurmanıza gerek yoktur. Stack tanımı ve ortam değişkenleri Portainer arayüzünden yönetilir.

Portainer Stack Tanımı

Nginx konteyneri Portainer üzerinden bir stack olarak dağıtılır. Portainer arayüzünde Stacks → Add stack menüsüne giderek aşağıdaki tanımı yapıştırın:

services:
  nginx:
    image: nginx:alpine
    container_name: nginx-proxy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /etc/mikromax/nginx/conf.d:/etc/nginx/conf.d:ro
      - /etc/mikromax/nginx/certs:/etc/nginx/certs:ro
    networks:
      - mikromax-network

networks:
  mikromax-network:
    external: true

Not: mikromax-network, diğer uygulama servislerinin bağlı olduğu Docker ağının adıdır. Portainer üzerinden ağ adını doğrulayın ve gerekirse güncelleyin. Ortam değişkenleri Portainer stack ayarlarındaki Environment variables bölümünden tanımlanabilir.

Not: SSL sertifikalarınızı ./nginx/certs/ dizinine cert.crt ve key.key adlarıyla kopyalayın. Sertifika dosya adları farklıysa aşağıdaki konfigürasyonlarda ssl_certificate satırlarını buna göre güncelleyin.

Örnek Server Block (Şablon)

Her servis için ./nginx/conf.d/<site-adi>.conf adında bir dosya oluşturun.

Nginx, docker ağı üzerinden diğer konteynerlere servis adı ile erişir; localhost veya port numarasına gerek yoktur.

server {
    listen 80;
    server_name <your-subdomain.yourdomain.com>;

    # HTTPS'e yönlendir
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name <your-subdomain.yourdomain.com>;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass         http://<docker-service-name>:8080;
        proxy_http_version 1.1;
        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 https;
        proxy_set_header   Upgrade           $http_upgrade;
        proxy_set_header   Connection        keep-alive;
        proxy_read_timeout 300s;
    }
}

Değişiklikleri uygulamak için:

docker exec nginx-proxy nginx -t
docker exec nginx-proxy nginx -s reload

Servis Port Listesi

Aşağıdaki servisler Docker Compose dosyasında açık port ile yayınlanmaktadır. Her biri için yukarıdaki şablonu kullanarak ayrı bir Nginx konfigürasyonu oluşturun.

# Servis Konteyner Adı Varsayılan Port Açıklama
1 mmx-identity identity 7071 Kimlik doğrulama servisi
2 mmx-api api 7072 Ana REST API servisi
3 mmx-web web 7073 Web arayüzü
4 mmx-printing printing 7074 Yazdırma servisi (kullanıcıların da erişmesi gerekir)
5 mmx-bpm bpm 7076 BPM (İş Süreci Yönetimi) servisi
6 mmx-notificator notificator 7077 Bildirim servisi
7 mmx-reporting reporting 7078 Raporlama servisi
8 mmx-erp-extentions erp-extentions 7079 ERP eklenti servisi
9 seq seq 5341 Log görüntüleme arayüzü (altyapı)
10 rabbitmq rabbitmq 15672 RabbitMQ yönetim arayüzü (altyapı)
11 mmx-dashboard dashboard 7080 Dashboard arayüzü
12 portainer portainer 9000 Portainer arayüzü

Not: mmx-mikro-transfer ve mmx-migrator servisleri harici port açmamaktadır; bu servisler için Nginx konfigürasyonu gerekmez.


Servis Başına Konfigürasyon Örnekleri

Her dosyayı ./nginx/conf.d/ dizinine kaydedin. Nginx konteyneri yeniden başlatıldığında tüm .conf dosyaları otomatik olarak yüklenir.

1. mmx-identity → ./nginx/conf.d/identity.conf

server {
    listen 80;
    server_name identity.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name identity.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-identity:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

2. mmx-api → ./nginx/conf.d/api.conf

server {
    listen 80;
    server_name api.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name api.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-api:8080;
        proxy_http_version 1.1;
        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 https;
        proxy_read_timeout 300s;
    }
}

3. mmx-web → ./nginx/conf.d/web.conf

server {
    listen 80;
    server_name web.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name web.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-web:8080;
        proxy_http_version 1.1;
        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 https;
        proxy_set_header   Upgrade           $http_upgrade;
        proxy_set_header   Connection        keep-alive;
    }
}

4. mmx-printing → ./nginx/conf.d/printing.conf

server {
    listen 80;
    server_name printing.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name printing.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-printing:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

5. mmx-bpm → ./nginx/conf.d/bpm.conf

server {
    listen 80;
    server_name bpm.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name bpm.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-bpm:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

6. mmx-notificator → ./nginx/conf.d/notificator.conf

server {
    listen 80;
    server_name notificator.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name notificator.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-notificator:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

7. mmx-reporting → ./nginx/conf.d/reporting.conf

server {
    listen 80;
    server_name reporting.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name reporting.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-reporting:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

8. mmx-erp-extentions → ./nginx/conf.d/erp-extentions.conf

server {
    listen 80;
    server_name ext.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name ext.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    location / {
        proxy_pass         http://mmx-erp-extentions:8080;
        proxy_http_version 1.1;
        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 https;
    }
}

9. seq — Log Arayüzü → ./nginx/conf.d/seq.conf

Seq arayüzüne yalnızca yetkili personelin erişmesi önerilir. Gerekirse IP kısıtlaması ekleyin.

server {
    listen 443 ssl;
    server_name seq.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    # İsteğe bağlı: erişimi belirli IP'lerle kısıtla
    # allow 10.0.0.0/8;
    # deny all;

    location / {
        proxy_pass         http://seq:80;
        proxy_http_version 1.1;
        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 https;
    }
}

10. rabbitmq — Yönetim Arayüzü → ./nginx/conf.d/rabbitmq.conf

RabbitMQ yönetim arayüzüne yalnızca yetkili personelin erişmesi önerilir.

server {
    listen 443 ssl;
    server_name rabbitmq.yourdomain.com;

    ssl_certificate     /etc/nginx/certs/cert.crt;
    ssl_certificate_key /etc/nginx/certs/key.key;

    # İsteğe bağlı: erişimi belirli IP'lerle kısıtla
    # allow 10.0.0.0/8;
    # deny all;

    location / {
        proxy_pass         http://rabbitmq:15672;
        proxy_http_version 1.1;
        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 https;
    }
}

Nginx Konteynerini Yeniden Yükleme

Yeni bir konfigürasyon dosyası ekledikten veya mevcut birini düzenledikten sonra:

# Konfigürasyonu test et
docker exec nginx-proxy nginx -t

# Nginx'i yeniden yükle (kesintisiz)
docker exec nginx-proxy nginx -s reload

Alternatif olarak Portainer arayüzünden Containers → nginx-proxy → Recreate seçeneğini kullanarak konteyneri yeniden başlatabilirsiniz.