20 Temmuz 2017 Perşembe

Örnek bir Spring Boot Uygulaması


Daha öncesinde Spring ve Spring Boot nedir onun hakkında yazmıştım.
Bu yazımda beraber basit bir Spring Boot uygulaması oluşturturacağız.
Bağımlılıklarla baş etmek için ben Maven kullanacağım.

Projemizin ana dizininde şu komutu çalıştırarak alt dizin oluşturalım.

mkdir -p src/main/java/hello

Şimdi projemizin ana dizininde pom.xml dosyası oluşturmalıyız.

pom.xml şu şekilde olmalı:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>spring-boot-deneme</artifactId>
    <version>0.1.0</version>
    <name>spring-boot-deneme</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Şimdi basit bir web uygulaması oluşturalım.

src/main/java/hello/HelloController.java dosyası da şu şekilde olmalı:

package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Spring Boot Merhaba Dünya";
    }



}

@RestController bayrağı o sınıfın Spring MVC tarafından web istekleriyle ilgilenmek için hazır olduğunu belirtir.
@RequestMapping ise "/" a gelen istekleri index() methoduna eşler. Böylece "http://localhost:8080/" sayfasına erişince method çalışacak ve "Spring Boot Merhaba Dünya" yazısı yazacak.

Sırada Application sınıfımız var.

src/main/java/hello/Application.java dosyamız da şu şekilde olmalı.

package hello;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {

            System.out.println("Let's inspect the beans provided by Spring Boot:");

            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }

        };
    }

}
Şimdi geldik uygulamayı çalıştırmaya;

Öncelikle bir maven paket dosyası oluşturmamış lazım.
Şu komutla target klasörünün altında bir java dosyası oluşturulur ve devamında da bunu çalıştıralım.

mvn package && java -jar target/spring-boot-deneme-0.1.0.jar


Sonrasında http://localhost:8080 adresine girelim. Tebrikler ilk Spring Boot uygulamanızı oluşturdunuz.

Sonrasında Control+c ile bağlantımızı kesebiliriz.

Daha fazlası için bu adrese başvurabilirsiniz.
İyi günler


14 Temmuz 2017 Cuma

War dosyasını Apache Tomcat'e deploy etme ve Reverse-Proxy olarak Nginx'i ayarlamak


Merhabalar bugün bir servera Tomcat kurulumu yapacağız ve nginx'i reverse proxy olarak ayarlayacağız.

Öncelikle Tomcat'i makineye kurmakla başlıyoruz. Bu yazıda ben Centos kurulu bir sunucu kullanacağım. Komutlar farklı gnu/linux dağıtımlarında farklı olabilir. Bunlara sizin bakmanız lazım.
Editör olarak da vim kullanacağım, isterseniz vim yerine nano veya başka editörleri yazarak da kullanabilirsiniz.

Tomcat Kurulumu :
   
sudo yum install tomcat

komutunu çalıştırarak  Tomcat kurulumu yapıyoruz.

sudo vim /usr/share/tomcat/conf/tomcat.conf

komutu ile tomcat.conf dosyasını açabiliriz.

JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"

satırını dosyanın hemen sonuna ekleyelim.

Buradaki Xmx ve MaxPermSize değerlerini değiştirmek Tomcat'in ne kadar hafıza kullanacağını belirleyebilirsiniz.

Şu komutla tomcat servisini başlatabilirsiniz;

sudo systemctl start tomcat


Şu komutla da durumunu sorgulayablirsiniz;

sudo systemctl status tomcat


Şu komutla da sistemin başlangıcında çalışmasını sağlayabilirsiniz.

sudo systemctl enable tomcat


Tamam kurulum işlemimiz bitti.

Şimdi http://localhost:8080 girelim. Adrese tarayıcıdan, curl veya links ile ulaşabilirsiniz.


Şimdi geldik war dosyasını deploy etmeye. Burada war dosyasını nasıl elde ederiz konusuna girmeyeceğim. İnternette bunun hakkına bir sürü yazı var. Yine de burada bir tanesini bulabileceksiniz.

sudo cp hello.war /usr/share/tomcat/webapps/

komutuyla bu dizine kopyalayalım. Tomcat bunu otomatik olarak deploy edecek.

sudo systemctl restart

komutu ile tomcat servisini yeniden başlatıyoruz.

Artık http://localhost:8080/hello adresine war dosyamız deploy edildi.



Nginx ayarları;

Nginx 'i kurmamız lazım. Öncesinde epel 'i yüklemek gerek Centos'da . Başka dağıtımlarda buna gerek olmayabilir.

sudo yum install epel-release

sudo yum install nginx

komutları sonrası nginx kurulmuş olacak.

sudo systemctl start nginx

komutu ile nginx servisi başlatılır.

sudo systemctl enable nginx

komutu ile sistem başlangıcında açılabilir hale geliyor.

Artık http://localhost adresinde bizi kurulmuş nginx bekliyor.


Geldik ayar kısmına;

sudo vim /etc/nginx/nginx.conf

komutu ile düzenlemeye başlayalım.

location / {

}


ile başlayan kısıma gidelim ve şu şekilde değiştirelim;

location / {

        proxy_pass                          http://127.0.0.1:8080/hello/;

        proxy_set_header Host               $host;

        proxy_set_header X-Real-IP          $remote_addr; 

        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;

    }

ve dosyayı kaydedelim.

sudo nginx -t

ile syntax ın doğruluğunu kontrol edelim.

sudo nginx -s reload

komutu ile tekrardan yükleyelim.

Artık http://localhost adresinde bizi war dosyamız bekliyor.


İyi günler 😊



11 Temmuz 2017 Salı

Spring ve Springboot nedir?


Spring nedir?






Spring web ve enterprise uygulamalarının geliştirilmesini  kolaylaştırmak için kullanılan Java tabanlı bir framework'dur.

Spring çatısı altında birçok proje vardır. Bu projeler geliştirici için konfigürasyon, güvenlik gibi konularda altyapı sağlar. Böylece geliştirici bu kısımlarla uğraşmayarak vakit kazanır.

Springboot ise Spring çatısındaki projelerden biridir. Springboot basmakalıp kod işlemlerinden kaçınıp yerine konfigürasyon işlemleri en aza indirgenmiş, standalone Spring projeleri oluşturmamıza olanak sağlar.


Spring'in problemleri ;

    1-) Farklı sorun ve kombinasyonlara karşı farklı çözümler içereceği için devasa bir framework'tur.

    2-) Birçok farklı imkana olanak sağladığı için çokca kurulum ve konfigurasyon aşaması vardır.

    3-) Spring'in kapasitesi ve esnekliği vardır bu da  çokca build ve deploy aşaması demektir. Tam olarak yapmak istediğin şeyi yapmak için çok şey yapmak gerekir. Aslında olasılıklar çok olduğu için bir başlangıç noktası, en iyisinin ne olduğunu söyleyecek bir rehber yoktur. Bu tamamen kullanıcıya kalmıştır.


Tipik olarak bir Spring uygulaması oluşturduğumuzda, tomcat veya başka konteynırlar içeren bir web uygulaması, bir war dosyası oluşturulur.

Springboot ise bize standalone calışabilen, direk çalıştırabildiğin (just run) ve web server'a sahip olan bir Spring projesidir. Deploy etmek için servlet konteynır bulmaya gerek yoktur. Springboot bu ve bunun gibi işleri geliştirici yerine yaparak bu problemlerden geliştiriciyi kurtarmayı hedefler.

 İsterseniz basit bir Spring Boot uygulaması nasıl oluşturulacağını burada bulabilirsiniz.


İyi günler.

4 Mart 2017 Cumartesi

Raw İmaj Dosyası Nasıl Oluşturulur?

    Bir önceki yazımda bir img uzantılı dosyayı flashlamıştık. Peki bir img dosyası nasıl yapılır? Eğer bir bölümün imajını almak isteseydik şöyle olacaktı:

dd if=/dev/sda1 of=cikti.img

Basit bir şekilde diskin imajı böyle alınır. Ama istediğimiz bu değil. Biz içerisinde parçalanmış nefes alan bir sistemin imajını almak istiyoruz. Bunun için livecd ile cihazı açıp yine "dd" komutu ile almamız lazım.

Buradaki işleme dikkat! Az önce bir bölümü (sda1) demiştik. Ama bizim istediğimiz tüm disk (sda) olduğu için aşağıdaki gibi olması gerek.

dd if=/dev/sda of=yedek.img bs=32M
sync

Böylece bir diskin tüm bölümleriyle beraber yedeğini almış olduk. Disk bölümlerini
parted yedek.img 
komutunu root ayrıcalıklarıya çalıştırırsanız içindeki disk parçacıklarını göreceksiniz.

Peki imajımızı nasıl flashlayacağız? Yine livecd ile cihazı açıp diskin bağlanmadığından emin olduktan sonra
dd if=yedek.img of=/dev/sda bs=32M
sync
komutunu girmemiz yeterli olacaktır.

    İşte canlı kanlı bir sistemin imajı böyle alınır.
    İyi günler. 

Örnek bir Spring Boot Uygulaması

Daha öncesinde Spring ve Spring Boot nedir onun hakkında yazmıştım. Bu yazımda beraber basit bir Spring Boot uygulaması oluşturturacağız...