Bu proje, dinamik olarak bulut üzerinde oluşturulan altyapı üzerinde dağıtık yük testi gerçekleştirmeyi ve bu hizmeti web servis aracılığı ile sunmayı hedeflemektedir.
- Minikube, Digital Ocean, Azure ve Aws ile farklı ortamlarlarda dinamik olarak test koşma olanağı.
- Kullanıcı verilerinin veritabanına işlenmesi.
- JWT access key ile kimlik doğrulaması.
- Websocket ile anlık test durumunun kullanıcıya bildirilmesi.
- Koşulan testlerin sonuçlarının dashboard üzerinden sergilenmesi ve servis edilmesi.
- Http isteklerinin simülasyonu.
-
Docker
-
Minikube
-
NodeJs
-
MongoDb
-
bash
-
kubectl
-
doctl
-
az
-
aws
-
terraform
-
Digital Ocean
-
Azure
-
AWS
-
Bash scriptlerinin çalıştırılabilmesi için linux makine kullanılması önerilir. Bu sebeple Digital Ocean'dan bir dropleti projeyi çalıştırmak için kullanabilirsiniz. Aşağıda önce Digital Ocean dropletinin konfigürasyonunu ve sonrasında da gerekli programların kurulumları ve gerekli konfigüraysonları anlatılmaktadır.
-
Eğer projenin çalıştırılacağı makine uzak bir makine ise, web consolunu veya ssh bağlantısını kullanarak makineye bağlanabilirsiniz.
- doctl Kurulumu
snap install doctl
- Güvenlik Duvarı İzinleri
mkdir ~/.config
export XDG_CONFIG_HOME=~/.config
doctl auth init
doctl compute firewall list
doctl compute firewall create --name porthost --inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0"
doctl compute firewall create --name portwebsocket --inbound-rules "protocol:tcp,ports:8080,address:0.0.0.0/0"
doctl compute firewall create --name portmongodb --inbound-rules "protocol:tcp,ports:27017,address:0.0.0.0/0"
- Docker Kurulumu
apt install docker.io
- Node Js Kurulumu
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install node
nvm alias default node
node -v
- Terraform Kurulumu
apt install unzip
curl -O https://releases.hashicorp.com/terraform/1.1.0/terraform_1.1.0_linux_amd64.zip
unzip terraform_1.1.0_linux_amd64.zip
sudo mv terraform /usr/local/bin/
- Kubectl Kurulumu
snap install kubectl --classic
- Aws Kurulumu
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
- Az Kurulumu
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
- Minikube Kurulumu
wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
cp minikube-linux-amd64 /usr/local/bin/minikube
chmod 755 /usr/local/bin/minikube
minikube version
- Minikube Memory ve Cpu konfigürasyonu
minikube config set memory 4096
minikube config set cpus 2
minikube config get memory
minikube config get cpus
- kubectl dosyasının yetkilendirilmesi
chmod 777 /root/.kube/config
- İletişim anahtarı oluşturulması
ssh-keygen -t rsa -b 2048
- Azure yetkilendirmesi.
az login
- AWS yetkilendirmesi.
aws configure
-
Digital Ocean, Azure ve Aws ile terraform aracılığı ile dinamik kaynak oluşturmak için bu sağlayıcılardan anahtar alıp bu anahtarları terraform dosyalarına constant olarak vermemiz gerekmekte.
-
Anahtarları oluşturduktan sonra sırasıyla Provider/script dosyalarının içerisindeki token.sh dosyası ile kaydedebildiğimiz gibi, Backend/src/Terraform/tokenAll.sh dosyasını kullanarak bütün tokenlarımızı gerekli klasörlere set edebiliyoruz.
sh tokenAll.sh <digitalocean api key> <azure service principle id> <azure service principle password> <aws access_key> <aws secret_key>
- Verilerin işlenmesi MongoDb ile yapılmaktadır. Veritabanını docker container'ı ayağa kaldırarak çalıştırıyoruz ve volume kullanarak verilerimizin saklıyoruz (şifreyi değiştirin).
docker run -d -p 27017:27017 --name mongo-c -v "$(pwd)/database:/data/db" -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo
- Veritabanını ayağa kaldırdıktan sonra MongoDb Compass yardımıyla veritabanına gui modunda erişebiliyoruz. Bağlantı stringi olarak bunu kullanıyoruz.
mongodb://admin:admin123@<remoteIp>/?authMechanism=DEFAULT&authSource=admin
- Backend dizinde paketlerin yüklenmesi.
npm install
- Backend servisini çalıştırılması.
npm run start
- loadman_frontend repo'sunda vue frontendi ile servisler kullanılmaktadır.
- Buna alternatif olarak geliştirilme aşamasında da Backend/src/request üzerinden de istekler simüle edilebilir.