From e659e6501fac37017a02b4cf313c6fba62caa0cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BA=AF=E6=B4=81=E7=9A=84=E5=BE=AE=E7=AC=91?= Date: Mon, 26 Mar 2018 11:37:47 +0800 Subject: [PATCH] add dockercompose-springboot-mysql-nginx --- README.md | 2 +- README_EN.md | 2 + .../app/Dockerfile | 1 + .../app/pom.xml | 56 +++++++++++++++++++ .../main/java/com/neo/ComposeApplication.java | 12 ++++ .../com/neo/controller/VisitorController.java | 31 ++++++++++ .../src/main/java/com/neo/entity/Visitor.java | 41 ++++++++++++++ .../com/neo/repository/VisitorRepository.java | 8 +++ .../main/resources/application-dev.properties | 4 ++ .../resources/application-docker.properties | 4 ++ .../src/main/resources/application.properties | 5 ++ .../java/com/neo/ComposeApplicationTests.java | 18 ++++++ .../docker-compose.yaml | 36 ++++++++++++ .../nginx/conf.d/app.conf | 20 +++++++ 14 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 dockercompose-springboot-mysql-nginx/app/Dockerfile create mode 100644 dockercompose-springboot-mysql-nginx/app/pom.xml create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties create mode 100644 dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java create mode 100644 dockercompose-springboot-mysql-nginx/docker-compose.yaml create mode 100644 dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf diff --git a/README.md b/README.md index ef843e1..8378a63 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Spring Boot使用的各种示例,以最简单、最实用为标准 - [spring-boot-hello](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-hello):Spring Boot 2.0 Hello World 示例 - [spring-boot-banner](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot 定制 Banner 示例 - [spring-boot-docker](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):使用 Docker 部署 Spring Boot 示例 - +- [dockercompose-springboot-mysql-nginx](https://github.com/ityouknow/spring-boot-examples/tree/master/dockercompose-springboot-mysql-nginx) :Docker Compose + Spring Boot + Nginx + Mysql 示例 **参考文章** diff --git a/README_EN.md b/README_EN.md index 263cbbf..110abeb 100644 --- a/README_EN.md +++ b/README_EN.md @@ -15,6 +15,8 @@ Spring Boot Examples, Use the simplest and most useful scene demo. - [spring-boot-hello](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-hello):Spring Boot 2.0 Hello World Demo - [spring-boot-banner](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot Customized Banner - [spring-boot-docker](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-banner):Spring Boot with Docker +- [dockercompose-springboot-mysql-nginx](https://github.com/ityouknow/spring-boot-examples/tree/master/dockercompose-springboot-mysql-nginx) :Docker Compose + Spring Boot + Nginx + Mysql example + --- diff --git a/dockercompose-springboot-mysql-nginx/app/Dockerfile b/dockercompose-springboot-mysql-nginx/app/Dockerfile new file mode 100644 index 0000000..6ae65e4 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/Dockerfile @@ -0,0 +1 @@ +FROM maven:3.5-jdk-8 \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/pom.xml b/dockercompose-springboot-mysql-nginx/app/pom.xml new file mode 100644 index 0000000..1dc59f6 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + com.neo + dockercompose-springboot-mysql-nginx + 1.0 + jar + + dockercompose-springboot-mysql-nginx + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.RELEASE + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + mysql + mysql-connector-java + + + org.springframework.boot + spring-boot-starter-test + test + + + + + compile + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java new file mode 100644 index 0000000..9c2646d --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/ComposeApplication.java @@ -0,0 +1,12 @@ +package com.neo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ComposeApplication { + + public static void main(String[] args) { + SpringApplication.run(ComposeApplication.class, args); + } +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java new file mode 100644 index 0000000..583be10 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/controller/VisitorController.java @@ -0,0 +1,31 @@ +package com.neo.controller; + +import com.neo.entity.Visitor; +import com.neo.repository.VisitorRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +public class VisitorController { + + @Autowired + private VisitorRepository repository; + + @RequestMapping("/") + public String index(HttpServletRequest request) { + String ip=request.getRemoteAddr(); + Visitor visitor=repository.findByIp(ip); + if(visitor==null){ + visitor=new Visitor(); + visitor.setIp(ip); + visitor.setTimes(1); + }else { + visitor.setTimes(visitor.getTimes()+1); + } + repository.save(visitor); + return "I have been seen ip "+visitor.getIp()+" "+visitor.getTimes()+" times."; + } +} \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java new file mode 100644 index 0000000..43cfa34 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/entity/Visitor.java @@ -0,0 +1,41 @@ +package com.neo.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Visitor { + @Id + @GeneratedValue + private long id; + @Column(nullable = false) + private long times; + @Column(nullable = false) + private String ip; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getTimes() { + return times; + } + + public void setTimes(long times) { + this.times = times; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java new file mode 100644 index 0000000..7395c39 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/java/com/neo/repository/VisitorRepository.java @@ -0,0 +1,8 @@ +package com.neo.repository; + +import com.neo.entity.Visitor; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface VisitorRepository extends JpaRepository { + Visitor findByIp(String ip); +} diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties new file mode 100644 index 0000000..25126f0 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-dev.properties @@ -0,0 +1,4 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/test +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.jdbc.Driver \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties new file mode 100644 index 0000000..eacae62 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application-docker.properties @@ -0,0 +1,4 @@ +spring.datasource.url=jdbc:mysql://mysql:3306/test +spring.datasource.username=root +spring.datasource.password=root +spring.datasource.driver-class-name=com.mysql.jdbc.Driver \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties new file mode 100644 index 0000000..242edfd --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.jpa.properties.hibernate.hbm2ddl.auto=update +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +spring.jpa.show-sql=true + +spring.profiles.active=dev \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java b/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java new file mode 100644 index 0000000..b0f9edf --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/app/src/test/java/com/neo/ComposeApplicationTests.java @@ -0,0 +1,18 @@ +package com.neo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ComposeApplicationTests { + + @Test + public void contextLoads() { + System.out.println("Hello Spring Boot Docker Compose!"); + } + +} diff --git a/dockercompose-springboot-mysql-nginx/docker-compose.yaml b/dockercompose-springboot-mysql-nginx/docker-compose.yaml new file mode 100644 index 0000000..028978f --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/docker-compose.yaml @@ -0,0 +1,36 @@ +version: '3' +services: + nginx: + container_name: v-nginx + image: nginx:1.13 + restart: always + ports: + - 80:80 + - 443:443 + volumes: + - ./nginx/conf.d:/etc/nginx/conf.d + + mysql: + container_name: v-mysql + image: mysql/mysql-server:5.7 + environment: + MYSQL_DATABASE: test + MYSQL_ROOT_PASSWORD: root + MYSQL_ROOT_HOST: '%' + ports: + - "3306:3306" + restart: always + + app: + restart: always + build: ./app + working_dir: /app + volumes: + - ./app:/app + - ~/.m2:/root/.m2 + expose: + - "8080" + depends_on: + - nginx + - mysql + command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker \ No newline at end of file diff --git a/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf b/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf new file mode 100644 index 0000000..4860514 --- /dev/null +++ b/dockercompose-springboot-mysql-nginx/nginx/conf.d/app.conf @@ -0,0 +1,20 @@ +server { + listen 80; + charset utf-8; + access_log off; + + location / { + proxy_pass http://app:8080; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Forwarded-Host $server_name; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /static { + access_log off; + expires 30d; + + alias /app/static; + } +}