Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 開源軟件雲收

只需三步便可部署開源項目雲收藏,打造專屬我的的收藏系統,就是這麼簡單!html

雲收藏項目已經開源2年多了,做爲當初剛開始學習 Spring Boot 的練手項目,使用了不少當時很新的技術,如今看來其實不少新技術是沒有必要使用的,但作爲學習案例來說確實是一個絕佳的 Spring Boot 實踐。java

從開源到如今,寫了一些教程給你們介紹如何部署雲收藏,如何在IDE中運行雲收藏,可是仍然有不少的朋友不知道如何使用,如何部署?就像「請提供一份雲收藏數據結構」 這樣的問題我至少都回答了一百屢次,而且在 github 關閉了近十個相似的問題。mysql

這也從另一個方面能夠看出,部署雲收藏項目對一些朋友仍是比較複雜,如今有了 Docker 咱們就能夠愉快的解決這個問題,只需三步就能夠部署雲收藏項目,打造專屬我的的收藏系統。nginx

雲收藏

一些朋友可能還不瞭解雲收藏,給你們簡單介紹一下:git

雲收藏是一個使用 Spring Boot 構建的開源網站,可讓用戶在線隨時隨地收藏的一個網站,在網站上分類整理收藏的網站或者文章,能夠做爲稍後閱讀的一個臨時存放。做爲一個開放開源的軟件,可讓用戶從瀏覽器將收藏夾內容導入到雲收藏,也支持隨時將雲收藏收集的文章導出去作備份。github

產品主頁web

http://favorites.ren spring

項目主頁sql

https://github.com/cloudfavorites/favorites-webdocker

產品截圖

Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 開源軟件雲收

核心功能點:

  • 收藏、分類、檢索文章
  • 導出、導出(包活從瀏覽器中)
  • 能夠點贊、分享、討論
  • 註冊、登陸、我的帳戶
  • 臨時收藏、查看別人收藏
  • 其它...

項目使用技術:

  • Vue
  • Bootstrap
  • jQuery
  • Thymeleaf
  • Spring Data Jpa
  • Spring Boot Mail
  • WebJars
  • Mysql
  • Tomcat
  • Redis

Redis 後期去掉是因爲服務器資源有限和部署麻煩

項目改造

依賴環境

準備一臺系統爲 Centos 7 以上的服務器,系統須要安裝 Docker 和 Docker Compos 環境,安裝方法能夠參考前面兩篇文章:

Docker 化改造

項目改造後的項目機構圖以下:

Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 開源軟件雲收

由於上一篇文章Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 實踐 已經介紹了此類項目結構和內容含義,所以這裏主要描述新增內容。

docker-compose.yaml 文件

咱們首先來看一下docker-compose.yaml文件:

version: '3'
services:
  nginx:
   container_name: favorites-nginx
   image: nginx:1.13
   restart: always
   ports:
   - 80:80
   - 443:443
   volumes:
     - ./nginx/conf.d:/etc/nginx/conf.d
     - /tmp/logs:/var/log/nginx

  mysql:
   build: ./mysql
   environment:
     MYSQL_DATABASE: favorites
     MYSQL_ROOT_PASSWORD: root
     MYSQL_ROOT_HOST: '%'
     TZ: Asia/Shanghai
   ports:
   - "3306:3306"
   volumes:
     - ./mysql_data:/var/lib/mysql
   restart: always

  app:
    restart: always
    build: ./app
    working_dir: /app
    volumes:
      - ./app:/app
      - ~/.m2:/root/.m2
      - /tmp/logs:/usr/local/logs
    expose:
      - "8080"
    command: mvn clean spring-boot:run -Drun.profiles=docker
    depends_on:
      - nginx
      - mysql

相對上一篇內容本次的docker-compose.yaml文件主要新增了兩部分的內容:

  • 一、將 Nginx 和 app 的日誌映射到宿主機上,方便咱們查看日誌
  • 二、將 Mysql 的數據存儲映射到宿主機上,這樣的好處是不至於將集羣關掉以後數據丟失

docker-compose.yaml文件中,日誌部分:

version: '3'
services:
  nginx:
   volumes:
     - /tmp/logs:/var/log/nginx
  app:
   volumes:
     - /tmp/logs:/usr/local/logs

分別將 Nginx 和雲收藏項目日誌映射到宿主機的/tmp/logs,方便咱們查看項目日誌。

定製 mysql 初始化信息

docker-compose.yaml文件中,Mysql 變化內容:

version: '3'
services:
  mysql:
   build: ./mysql
   environment:
     TZ: Asia/Shanghai
   volumes:
     - ./mysql_data:/var/lib/mysql

我將有變化的內容都摘了出來,mysql 新增了 TZ 環境變量將時區指向上海,另外咱們將 Mysql 鏡像內容提出來,放到項目的 mysql 目錄下單獨構建。mysql 目錄下有兩個文件,一個是 Dockerfile 定義 Mysql 鏡像,一個是 my.cnf 文件定義 Mysql 編碼等信息。

my.cnf 文件內容

#省略一部分
...
character_set_server=utf8
character_set_filesystem=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
init_connect='SET collation_connection = utf8_general_ci'
skip-character-set-client-handshake

此文件主要的做用是讓 Mysql 支持 UTF-8.

Dockerfile 文件內容

FROM mysql/mysql-server:5.7
COPY my.cnf /etc/my.cnf

使用 Mysql5.7 版本,而且將同目錄下的 my.cnf 拷貝到服務器/etc/my.cnf

這樣 Mysql 的相關信息就定義好了。

其它

其它內容變化不大,nginx 目錄下存放着 Nginx 的配置文件,項目新增application-docker.properties文件,將數據庫鏈接部分修改便可。

改造完成以後,咱們只須要將項目拷貝到部署服務器而後執行:docker-compose up就能夠啓動。

部署

我已經將項目的改造內容提交到 github 上面,這樣你們部署的時候僅須要三步,便可成功部署雲收藏項目。

一、下載源碼解壓

下載最新發布版本

wget https://github.com/cloudfavorites/favorites-web/archive/favorites-1.1.1.zip

解壓

unzip favorites-1.1.1.zip

進入目錄

cd favorites-web-favorites-1.1.1/

二、修改配置文件

修改文件application-docker.properties

vi app/src/main/resources/application-docker.properties

修改內容以下

favorites.base.path=http://xx.xxx.xx.xx/

地址爲部署服務器的地址

三、啓動項目

配置完成後,後臺啓動

[root@~]# docker-compose up -d
Creating network "favoriteswebfavorites111_default" with the default driver
Creating favorites-nginx                  ... done
Creating favoriteswebfavorites111_mysql_1 ... done
Creating favoriteswebfavorites111_app_1   ... done

啓動完成後,瀏覽器訪問上面配置地址:http://xx.xxx.xx.xx/,就能夠看到雲收藏的首頁了。

輔助內容

啓動後想查看某個容器內的服務運行狀況,可使用如下命令進入:

使用docker ps查看宿主機上面運行的 Docker 容器

[root@VM_73_217_centos ~]# docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                  PORTS                                      NAMES
a466ce6e58a5        favoriteswebfavorites111_app     "/usr/local/bin/mv..."   16 hours ago        Up 16 hours             8080/tcp                                   favoriteswebfavorites111_app_1
1b4f1b912de0        nginx:1.13                       "nginx -g 'daemon ..."   16 hours ago        Up 16 hours             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   favorites-nginx
65b481bb7741        favoriteswebfavorites111_mysql   "/entrypoint.sh my..."   16 hours ago        Up 16 hours (healthy)   0.0.0.0:3306->3306/tcp, 33060/tcp          favoriteswebfavorites111_mysql_1

根據上面查詢的 Docker 容器 ID 信息,執行下面命令

docker exec -ti CONTAINER_ID  bash
#好比進入項目容器中
[root@VM_73_217_centos ~]# docker exec -ti a466ce6e58a5 bash
root@a466ce6e58a5:/app# ps -ef|grep java
...

退出容器執行如下命令:

root@a466ce6e58a5:/app# exit
exit
[root@VM_73_217_centos ~]#

這樣之後若是咱們想部署雲收藏項目就變的很是簡單,僅僅須要三步能夠愉快的搭建本身的收藏系統了,小夥伴們趕忙動起手來。

相關文章
相關標籤/搜索