DevOpsGenel

Multi Tier Web Application Stack Project

Architecture of Project Services

Nginx (Load balancer servicing
Apache Tomcat (Java Web Application Service)
Rabbit MQ
Memcached (Database Caching Servers)
Mysql

Architecture of Automated Setup
Vagrant
VirtualBox
Gitbash
This is Web App Project Java

Flow

-Vagrant ile sanal makienelerin kurulumlarını otomatik olarak gerçekleştireceğiz.
-Vagrant’ın iletişim kuracağı hypervisor olarak Oracle Virtual Box kullanacağız.
-Servis kurumları için Bash script kullanacağız.
    -Nginx
    -Apache Tomcat
    -Memcached
    -Rabbit MQ
    -My Sql

 1-Clone Source Code Git-Hub

https://github.com/devopshydclub/vprofile-project.git

Bu örneği bir windows cihazda yapacağımız için Manual_Provisioning file içine giriyoruz. Ve dilerseniz burdaki kurulumlarını belirttiğimiz vagrant file vm’lerin ip adresi vb gibi konfiglerini değiştirebilirsiniz.


Verilen ip adresleri lab ortamınızda bulunan farklı bir ip adres bloğu ile çakışmamalıdır.

Kurulumlara başlamadan önce 2 vagrant plugin yüklememiz gerekiyor.
vagrant plugin install vagrant-hostmanager

vagrant plugin install vagrant-vbguest

Tüm hazırlıklarımız tamam ise vagrant up komutu ile vagrantfile içerisinde bulunan sanal makinelerimizi ayağa kaldıralım.

Kurulumlar cihazınıza bağlı olarak 30-40 dk arası sürmekte.

Kurulumlar başarıyla tamamlandı. VirtualBox açtığımda hepsi vermis olduğum isimle running durumda.

Test amaçlı vagrant ssh web01 makinesine ssh ile bağlanarak cat /etc/hosts dosyasını kontrol ediyoruz

Ip adreslerimiz ve makine isimlerimiz başarılı bir şekilde match durumda. Uygulamaların kurulumlarına başlayabiliriz.

1-MYSQL SETUP
Herşeyden önce yeni bir OS kurulumu yaptıktan sonra mutlaka yum update -y ile tüm package’lerimiz update etmemiz gerekiyor. Db01 makinesine login olduktan sonra güncellemeler ile başlıyoruz.
Biraz zaman alacaktır.

$ vagrant ssh db01

Update OS with latest patches

# yum update -y

Set Repository# yum install epel-release -y

Install Maria DB Package
Not: MariaDB ve MySql aynı servisler fakat paket isimleri farklı. CentOS-Fedora’da MariaDB olarak geçmekte, Ubuntu’da ise MySql olarak geçmektedir. O yüzden MariaDB install diyerek kurulumu yapıyoruz.

# yum install git mariadb-server -y

Kurulum tamamlandı. Aşağıdaki komutlar ile servisi başlatıyoruz.
# systemctl start mariadb
# systemctl status mariadb (Kontrol)
# systemctl enable mariadb
(Restart sonrası otomatik olarak start olması için)

MySql sunucumuzu daha güvenli bir hale getirmek için aşağıdaki komut ile bir script çalıştıracağız ve karşımıza çıkan sorulara aşağıdaki ekran görüntülerinde belirttiğim gibi cevap veriyoruz.

# mysql_secure_installation

-İlk soru aslında Linux makineye ait root şifresi değil.MySql servisine ait bir password. Enter diyerek geçiyoruz.

MariaDB Login oluyoruz ve account isimli bir database oluşturuyoruz.
Login olurken az önce oluşturduğumuz root ve admin123 şifresi ile giriyoruz.

account isimli database’de bir admin account oluşturuyoruz. Ve tam yetkileri veriyoruz.
‘admin’ yanında yer alan % işareti bu kullanıcının localden veya remote olarak login olabileceği anlamına geliyor.
Cache temizleyip exit ile çıkıyoruz.
grant all privileges on accounts.* TO ‘admin’@’%’ identified by ‘admin123’;
FLUSH PRIVILEGES;
exit;


Database kurulumu tamamlandı. Şimdi database içerisine biraz data ekliyoruz.
git clone -b local-setup https://github.com/devopshydclub/vprofile-project.git

Sırasıyla aşağıdaki komutları çalıştırıyoruz;

mysql -u root -padmin123 accounts < src/main/resources/db_backup.sql

MariaDB’de yer alan accounts database admin username ile login oluyoruz.

mysql -u admin -padmin123 accounts

show tables;

Son olarak database servisi restart ediyoruz ve status check diyoruz; running durumda.
# systemctl restart mariadb
# systemctl status mariadb

Database kurulumu ve tablo oluşturulması işlemlerini başarılı bir şekilde tamamladık.

MEMCACHE SETUP

mc01 makinesine login olup yum update başlatıyoruz.

Kurulumu başlatıyoruz ve yine servis makine restart olduktan sonra otomatik olarak running duruma geçmesi için komutları yazıyoruz.
#yum install memcached -y
#systemctl start Memcached
#systemctl enable Memcached
#systemctl status Memcached

Memcached dinlediği tcp ve udp portlarının tanımlamalarını yapıyoruz.
memcached -p 11211 -U 11111 -u memcached -d

Doğrulama için ss -tunlp | grep 11211 komutunu yazıyoruz

Memcache kurulumu tamamlandı.

RABBIT MQ QUEUE Service Install

rmq01 makinesine login olup yum update başlatıyoruz.

Rabbit Mq kurmadan önce bazı dependencies kurulumları yapmamız gerekiyor.
Önce wget kurulumunu yapıyoruz ve ardından RabbitMQ Runtime olan Erlang kurulumunu yapacağız.

#sudo yum install wget -y
#cd /tmp/
#wget http://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
#sudo rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
#sudo yum -y install erlang socat

Install RabbitMq Server
cd /tmp/ dizininde aşağıdaki scripti çalıştırıyoruz. Ve Repository kurulumunu yapıyoruz.
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

Şimdi RabbitMq Server kurulumunu yapacağız.
sudo yum install rabbitmq-server -y

Servisleri hem şimdi hem de restart sonra otomatik olarak başlayacak şekilde ayarlıyoruz ve kontrol ediyoruz.
#sudo systemctl start rabbitmq-server
#sudo systemctl enable rabbitmq-server
#sudo systemctl status rabbitmq-server

Son olarak log dosyasında bazı değişiklikler yapıyoruz bir test user oluşturup pass olarak yine test ismini veriyoruz.

sudo sh -c ‘echo “[{rabbit, [{loopback_users, []}]}].” > /etc/rabbitmq/rabbitmq.config’
#sudo rabbitmqctl add_user test test
#sudo rabbitmqctl set_user_tags test administrator

Enabling the firewall and allowing port 25672 to access the rabbitmq permanently

# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd –get-active-zones
# firewall-cmd –zone=public –add-port=25672/tcp –permanent
# firewall-cmd –reload


TOMCAT INSTALL
App01 sunucusuna login olduktan sonra bir önce ki sunucularda yaptığımız gibi aşağıdaki komutları uyguluyoruz.

#yum update -y
#yum install epel-release -y

Dependencies Install

# yum install java-1.8.0-openjdk -y
# yum install git maven wget -y

cd /tmp
dizinine girdikten sonra tomcat.tar dosyasını download ediyoruz. Ve aynı dizine açıyoruz.
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
tar xzvf apache-tomcat-8.5.37.tar.gz

Tomcat isimli bir user oluşturuyoruz. Ve yetkilendiriyoruz. Daha sonra indirdiğimiz apache tomcat dosyalarını bu dizine kopyalıyoruz.
useradd –home-dir /usr/local/tomcat8 –shell /sbin/nologin tomcat

cp -r /tmp/apache-tomcat-8.5.37/* /usr/local/tomcat8/

ls -l /usr/local/tomcat8  komutu ile tomcat dizininde yer alan dosyaların ownership kontrolünü yapıyoruz ve hepsinde root yetkili. Hemen değiştirelim.

chown -R tomcat.tomcat /usr/local/tomcat8

Vi editor ile tomcat.service dosyasının içerisine aşağıdaki komutları instert ediyoruz.

vi /etc/systemd/system/tomcat.service

[Unit]
Description=Tomcat
After=network.target

[Service]
User=tomcat
WorkingDirectory=/usr/local/tomcat8
Environment=JRE_HOME=/usr/lib/jvm/jre
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_HOME=/usr/local/tomcat8
Environment=CATALINE_BASE=/usr/local/tomcat8
ExecStart=/usr/local/tomcat8/bin/catalina.sh run
ExecStop=/usr/local/tomcat8/bin/shutdown.sh
SyslogIdentifier=tomcat-%i [Install]
WantedBy=multi-user.target

cat /etc/systemd/system/tomcat.service (Kontrol ediyoruz kaydettiğine dair)

# systemctl daemon-reload
# systemctl start tomcat
# systemctl enable tomcat

Servis başarılı bir şekilde ayağa kalkmış durumda.
IP adresinden erişim test edebilirsiniz.

Bir sonraki adım olan code build ve deploy adımına geçiyoruz…

CODE BUILD-DEPLOY >app01

cd /tmp/ directory altına linkte yer alan source kodlarını klonlıyoruz.
git clone -b local-setup https://github.com/devopshydclub/vprofile-project.git

Uygulamamızın backend servisleriyle konuşabilmesi için klonladığımız vprofile-project dizininde yer alan application.properties dosyasını editliyoruz ve sunucu isimlerini, username, password detaylarını gözden geçiriyoruz.
vi src/main/resources/application.properties

Kodlarımızı klonladığımız vprofile-project dizinine giriyoruz

Mvn install komutu ile Kodları build edip artifact olarak çıktısını alıyoruz.

mvn install

Maven kodları build ederken POM.xml (Project Object Model) dosyasına bakar. Bu dosya içerisinde proje hakkında bilgiler ve konfigürasyonlar her alır.
Detaylı bir şekilde incelemek isterseniz kopyaladığınız git dosyasını tarayıcıda açıp bakabilirsiniz.

Kodlar build edildi ve kırmızı ile belirtilen vprofile-v2.war isimli bir artifact oluşturuldu

Kendi kodlarımızı yayınlamak için servisi durdurup tomcat default web site files siliyoruz.
systemctl stop tomcat
rm -rf /usr/local/tomcat8/webapps/ROOT*

Ve oluşturduğumuz vprofile-v2.war artifacti bu dizine kopyalıyoruz. Ve kontrol ediyoruz.
cp target/vprofile-v2.war /usr/local/tomcat8/webapps/ROOT.war

systemctl start tomcat ile servisi tekrar başlatıyoruzve ROOT dizini otomatik olarak geldi.
Ve kısa bir süre sonra uygulamamız başarılı bir şekilde ayağa kalktı.

Tarayıcı üzerinden sunucu adresini yazarak erişim sağlıyoruz.
http://192.168.61.11:8080/login

NGINX SETUP

web01
ubuntu makinemize  vagrant ssh web01 komutu ile login oluyoruz.
sudo apt update && sudo apt upgrade -y ile package manager upgrade ediyoruz.
apt install nginx -y komutu ile nginx kurulumunu başlatıyoruz.

Kurulum tamamlandıktan sonra nginx dosyası üzerinde konfigürasyon ayarları yapıyoruz.
ngnix 8080 portundan gelen istekleri tomcat server yönlendireceğiz ngnix burada aslında bir load balancer servisi olarka hizmet verecek.

sites-available dizini altında vproapp isimli bir dosya oluşturup aşağıdaki konf ekliyoruz.
Frontend 80 portunu dinleyecek ve eğer nginx servisine 80 portu üzerinden bir erişim istek olursa bu isteği app01 sunucusuna yönlendirecek. Eğer load balancer arkasında 2 sunucumuz olsaydı server app01:8080; satırının altına örnek server app02:8080; ekleyecektik.

vi /etc/nginx/sites-available/vproapp

upstream vproapp {

server app01:8080;
}
server {
listen 80;
location / {
proxy_pass http://vproapp;
}}

Ngnix default web sayfasını siliyoruz.
rm -rf /etc/nginx/sites-enabled/default

Active olan web site dizinine link ekliyoruz.

ln -s /etc/nginx/sites-available/vproapp /etc/nginx/sites-enabled/vproapp

Kontrol ediyoruz. Web01 makinesinin ip adresini tarayıcıya yazdığımızda ngnix servisi 80 portundan bir istek geldiği için otomatik olarak backend sunucumuz olan App01’in 8080 portuna yönlendirme yapıyor

VALIDATE
Login ekranından admin paneline
username: admin_vp pass: admin_vp ile giriş yapabildik.
Db01 makinesinde bulunan sql server ile başarılı bir şekilde haberleşiyor.

Rabbitmq
Anasayfada yer alan RabbitMq tıklıyoruz. Servis cevap dönüyor

Memcache
Memcache kontrolü için yine ana sayfada bulunan All Users butonuna tıklıyoruz ve all user’ları database’den çekip memcache üzerine alıyoruz.
Ve herhangi bir user adına tıklıyoruz karşımıza “Data is From DB and Data Inserted In Cache !!” uyarısı çıktı.

Aynı kullanıcıya ait bilgilere erişmek için tekrar tıkladığımda bu sefer cache’den bilgi döndü.

FLOWS EXECUTED