İndirilecek Dosya

offlineApinizerInstallation-RedHat86.tar (1.61 GB)
https://drive.google.com/file/d/1nTcklCjpmVhPRjSiPMo-XK7nsTNtHv5o/view?usp=share_link
POWERSHELL

Sonraki adımlarda bulunan yönergeler ilgili dosyaların içinde de mevcut olup, internete kısıtlı erişimi olabilecek sunucular için burada da açık şekilde paylaşılmıştır.

Dosyaları çıkarmak için "tar xvzf dosyaAdi.tar" veya "tar xf dosyaAdi.tar" komutlarını kullanabiliriz.


Öncelikle otomatik abonelik hatası almamak için ilk once asagıdaki satıra gidilip enabled 0 yapılır.

vim /etc/yum/pluginconf.d/subscription-manager.conf
enabled=0
POWERSHELL

net-tools-2.0-0.52.20160912git.el8.x86_64.rpm'in olduğu klasöre gidilir.

net-tools paketi yüklenir.

yum install -y --cacheonly  --skip-broken --disablerepo=* *.rpm
POWERSHELL

Apinizer kullanıcısı oluşturulur

adduser apinizer
usermod -aG wheel apinizer
passwd apinizer
POWERSHELL

Güvenlik duvarı kapatılır

sudo systemctl stop firewalld
sudo systemctl disable firewalld
POWERSHELL

Selinux kapatılır

Sunuculardaki iletişim sorunlarını önlemek için SELinux'u devre dışı bırakalım. 

sudo setenforce 0
 
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
POWERSHELL

Swap devre dışı bırakılır

Node'lardaki iletişim sorunlarını önlemek için swap'i devre dışı bırakalım.  Bunun için aşağıdaki adımlar yapılır. ve /etc/fstab dosyası içindeki swap satırı silinir.

sudo swapoff -a
sudo vi /etc/fstab             
POWERSHELL

IP Tables ayarlaması

Daha sonra vi dosyası kapatılır (:wq). 

sudo vi /etc/sysctl.d/k8s.conf
 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
net.ipv4.tcp_max_syn_backlog=40000
net.core.somaxconn=40000
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_moderate_rcvbuf=1
net.core.rmem_max=134217728
net.core.wmem_max=134217728
net.ipv4.tcp_mem=134217728 134217728 134217728
net.ipv4.tcp_rmem=4096 277750 134217728
net.ipv4.tcp_wmem=4096 277750 134217728
net.core.netdev_max_backlog=300000
POWERSHELL

Değişiklikler kaydedilir

sudo modprobe br_netfilter
sudo sysctl --system
POWERSHELL

br_netfilter Modülü Yüklenir (→ Reboot)    

sudo lsmod | grep br_netfilter
sudo reboot
POWERSHELL

Docker Kurulumu

Docker kurulumuna başlamadan önce aşağıdaki paketlerin silinmesi gerekmektedir.

yum remove podman* -y 
yum remove buildah* -y

cd apinizerOffline/docker
 
rpm -ivh --replacefiles --replacepkgs *.rpm
 
# Create required directories
sudo mkdir -p /etc/systemd/system/docker.service.d

sudo mkdir /etc/docker

sudo vi /etc/docker/daemon.json


# Create daemon json config file  

{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}    

# Start and enable Services
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

sudo usermod -aG docker apinizer
POWERSHELL

Kubernetes Kurulumu

apinizerOffline/kubernetes klasörüne gidilir ve rpm'ler çalıştırılır.

cd apinizerOffline/kubernetes 

rpm -ivh --replacefiles --replacepkgs *.rpm  
POWERSHELL

(Master ve Worker Sunucular üzerinde)

.tar halindeki kubernetes imajları docker'a yüklenir.

docker load < kube-apiserver_v1.18.20.tar
docker load < kube-proxy_v1.18.20.tar
docker load < kube-controller-manager_v1.18.20.tar
docker load < kube-scheduler_v1.18.20.tar
docker load < pause_3.2.tar
docker load < etcd_3.4.3-0.tar
docker load < coredns.tar
docker load < flannel_v0.13.1-rc2.tar
docker load < rancher.tar
docker load < rancher2.tar
docker load < metricserver.tar

POWERSHELL
systemctl enable kubelet && systemctl start kubelet
POWERSHELL


(Master Node üzerinde)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<MASTER_SERVER_IP_ADDRESS> --kubernetes-version=v1.18.20

POWERSHELL

(Master Node üzerinde)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown -R $(id -u):$(id -g) $HOME/.kube
POWERSHELL
kubectl apply -f kube-flannel.yml
POWERSHELL

Tek sunucu hem master hem de worker olarak çalışacaksa aşağıdaki kod çalıştırılır.

kubectl taint nodes --all node-role.kubernetes.io/master-
POWERSHELL

Çoklu sunucu olacaksa aşağıdaki kodun çıktısı diğer sunucularda çalıştırılır.

sudo kubeadm token create --print-join-command
POWERSHELL


Kubernetes klasöründeyken /apinizerOffline/kubernetes  aşağıdaki komutlar çalıştırılır.

kubectl apply -f service.yaml
kubectl apply -f adminuser.yaml
kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts
kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
POWERSHELL

MongoDB Kurulumu

cd apinizerOffline/mongodb

yum install -y --cacheonly  --skip-broken --disablerepo=* *.rpm

rpm -ivh --replacefiles --replacepkgs *.rpm
POWERSHELL

/etc/mongod.conf dosyasının içerisinde belirtilen alanlar aşağıdaki gibi değiştirilir.

sudo vi /etc/mongod.conf
--
port: 25080
ip 0.0.0.0
--
replication:
 replSetName: apinizer-replicaset

security:
    authorization: "enabled"

setParameter:
  transactionLifetimeLimitSeconds: 300
--
POWERSHELL
sudo systemctl start mongod
 
sudo systemctl enable mongod
POWERSHELL


ReplicaSet Konfigürasyonu ve Yetkili Kullanıcı Tanımı

mongo mongodb://localhost:25080
#Bu aşamada eğer bağlantı hatası verirse /etc/hosts altına server adresi ile sunucu adı eklenmeli ve 127.0.0.1 ifadesinin değerlerinden biri de localhost mu diye bakılmalı
 
rs.initiate()
rs.status()
POWERSHELL
use admin
db.createUser(
  {
    user: 'apinizer',
    pwd: '<YOUR_PASSWORD>',
    roles: [ { role: 'root', db: 'admin' } ],
  }
);
 
exit;
POWERSHELL

Şifre değiştirilmek istenirse;

use admin
 
db.changeUserPassword("apinizer", passwordPrompt())


Aşağıdaki komut satırını kullanarak MongoDB'ye bağlanılır ve düzgün çalıştığını kontrol etmek için bazı test komutları yürütülür.

mongo  mongodb://localhost:25080 --authenticationDatabase "admin" -u "apinizer" -p
 
cfg = rs.conf()
cfg.members[0].host = "<MONGO_IP_ADDRESS>:25080"
rs.reconfig(cfg)
rs.status()

exit;
POWERSHELL


Elasticsearch Kurulumu

Elasticsearch sistem yapılandırması yapılır.

sudo adduser elasticsearch
sudo passwd elasticsearch
 
sudo usermod -aG wheel elasticsearch
 
sudo ulimit -n 65535
  
sudo vi /etc/security/limits.conf
elasticsearch  -  nofile  65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
  
sudo sysctl -w vm.swappiness=1
sudo sysctl -w vm.max_map_count=262144
  
sudo vi /etc/sysctl.conf
vm.max_map_count=262144 elasticsearch
   
sudo sysctl -p
sudo sysctl vm.max_map_count
POWERSHELL

Elasticsearch'in kurulum dosyalarının ve logların tutulacağı klasörler oluşturulup yetki verilir.

sudo mkdir /opt/elasticsearch
sudo mkdir /mnt/elastic-data/
sudo mkdir /mnt/elastic-snapdata/
sudo chown -Rf elasticsearch:elasticsearch /opt/elasticsearch
sudo chown -Rf elasticsearch:elasticsearch /mnt/elastic-*/
sudo chmod -Rf 775 /opt/elasticsearch
sudo chmod -Rf 775 /mnt/elastic-*/
POWERSHELL

Elasticsearch kullanısına geçilir ve apinizerOffline/elasticsearch klasöründeki dosya /opt/elasticsearch/ klasörüne kopyalanır.

su elasticsearch
sudo cp ~/apinizerOffline/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar /opt/elasticsearch/
cd /opt/elasticsearch
sudo tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz
POWERSHELL


Makinenizdeki kaynaklara göre aşağıdaki komutla belirtilen güncelleme yapılarak Java-memory ayarları yapılmalıdır.

-Xms8g
-Xmx8g

sudo vi /opt/elasticsearch/elasticsearch-7.9.2/config/jvm.options
POWERSHELL

Kurulum klasöründeki dosyalar kopyalanır ve yetki verilir.

sudo cp ~/apinizerOffline/elasticsearch/elasticsearch.yml /opt/elasticsearch/elasticsearch-7.9.2/config/elasticsearch.yml
sudo cp ~/apinizerOffline/elasticsearch/elasticsearch-service.sh /opt/elasticsearch/elasticsearch-7.9.2/bin/elasticsearch-service.sh
sudo cp ~/apinizerOffline/elasticsearch/elasticsearch.service /etc/systemd/system/elasticsearch.service
sudo chown -Rf elasticsearch:elasticsearch /opt/elasticsearch/*
sudo chmod -Rf 775 /opt/elasticsearch/*
POWERSHELL

Elasticsearch.yml 'ın içerisindeki belirli alanlar "ELASTICSEARCH_IP_ADDRESS" kendi private ip adresinizle değiştirilir.

cluster.name: ApinizerEsCluster

node.name: "<ELASTICSEARCH_IP_ADDRESS>"
node.master: true
node.data: true

network.host: <ELASTICSEARCH_IP_ADDRESS>
http.port: 9200
  
cluster.initial_master_nodes: ["<ELASTICSEARCH_IP_ADDRESS>"]
  
discovery.seed_hosts: []
path.data: /mnt/elastic-data/
path.repo: /mnt/elastic-snapdata/

bootstrap.memory_lock: true
  
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length
POWERSHELL

Servisler çalıştırılır.

sudo systemctl daemon-reload
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
sudo systemctl enable elasticsearch
POWERSHELL


Apinizer Imagelarının Kubernetes'e Yüklenmesi

Apinizer imagelarının olduğu klasöre gidilir ve aşağıdaki komutlar çalıştırılır.

cd apinizerOffline/apinizerImages
 
docker load < manager_2024.xx.1.tar
docker load < worker_2024.xx.1.tar
docker load < cache_2024.xx.1.tar
docker load < integration_2024.xx.1.tar
POWERSHELL


KURULUM KONFİGÜRASYON AYARLARI

Bütün araçları kurduktan sonra son olarak Deploy aşamasına geçilmesi gerekmektedir.

Önce kubernetes klasörünün içerisine girilir ve deployment.yaml içerisindeki belirli alanlar düzenlendikten sonra deploy edilir.

cd apinizerOffline/kubernetes
vi apinizer-deployment.yaml
POWERSHELL
apiVersion: v1
kind: Namespace
metadata:
  name: apinizer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: manager
  namespace: apinizer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: manager
      version: 'v1'
  template:
    metadata:
      labels:
        app: manager
        version: 'v1'
    spec:
      containers:
        - name: manager
          image: apinizercloud/manager:<APINIZER_VERSION>
          imagePullPolicy: IfNotPresent
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: prod
            - name: SPRING_DATA_MONGODB_DATABASE
              value: apinizerdb
            - name: SPRING_DATA_MONGODB_URI
              value: 'mongodb://<MONGO_USERNAME>:<MONGO_PASSWORD>@<MONGO_IP>:<MONGO_PORT>/?authSource=admin&replicaSet=apinizer-replicaset'
            - name: JAVA_OPTS
              value: ' -Xmx2400m -Xms2400m -Dlog4j.formatMsgNoLookups=true'
          resources:
            requests:
              memory: '3Gi'
              cpu: '1'
            limits:
              memory: '3Gi'
              cpu: '1'
          ports:
            - name: http
              containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: manager
  namespace: apinizer
  labels:
    app: manager
spec:
  selector:
    app: manager
  type: NodePort
  ports:
    - name: http
      port: 8080
      nodePort: 32080
POWERSHELL

apinizer-deployment.yaml dosyası hazırlandıktan sonra aşağıdaki komut satırı Kubernetes Master sunucusu üzerinde çalıştırılır.

kubectl apply -f apinizer-deployment.yaml
POWERSHELL


Bu işlem sonrasında oluşturulan pod'u takip etmek ve logunu incelemek için aşağıdaki ilk kodu çalıştırıp pod ismi alınır ve ikinci kodda kullanılır.

kubectl get pods -n apinizer
 
kubectl logs PODADI -n apinizer
POWERSHELL


Apinizer imajları Kubernetes ortamına deploy edildikten sonra Apinizer tarafından size verilen Lisans Anahtarını'nın veri tabanına eklenmesi gerekmektedir.

Apinizer tarafından size verilen Lisans Anahtarını aşağıdaki gibi bir .js dosyasında güncelleyip veri tabanındaki lisans bilgisi güncellenebilir.

vi license.js
POWERSHELL
db.general_settings.updateOne(
{"_class":"GeneralSettings"},
{ $set: { licenseKey: '<LICENSE_KEY>'}}
)
POWERSHELL


Oluşturulan license.js dosyası çalıştırılır. Matched = 1 şeklinde bir sonuç görülmesi beklenir.

mongo mongodb://<MONGO_IP>:<MONGO_PORT>/apinizerdb --authenticationDatabase "admin" -u "apinizer" -p "<PASSWORD>" < license.js
POWERSHELL