只需三步即可部署開源專案雲收藏,打造專屬個人的收藏系統,就是這麼簡單!
雲收藏專案已經開源2年多了,作為當初剛開始學習 Spring Boot 的練手專案,使用了很多當時很新的技術,現在看來其實很多新技術是沒有必要使用的,但做為學習案例來講確實是一個絕佳的 Spring Boot 實踐。
從開源到現在,寫了一些教程給大家介紹如何部署雲收藏,如何在IDE中執行雲收藏,但是仍然有很多的朋友不知道如何使用,如何部署?就像“請提供一份雲收藏資料結構” 這樣的問題我至少都回答了一百多次,並且在 github 關閉了近十個類似的問題。
這也從另外一個方面可以看出,部署雲收藏專案對一些朋友還是比較複雜,現在有了 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 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
檔案主要新增了兩部分的內容:
- 1、將 Nginx 和 app 的日誌對映到宿主機上,方便我們檢視日誌
- 2、將 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 上面,這樣大家部署的時候僅需要三步,即可成功部署雲收藏專案。
1、下載原始碼解壓
下載最新發布版本
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/
複製程式碼
2、修改配置檔案
修改檔案application-docker.properties
vi app/src/main/resources/application-docker.properties
複製程式碼
修改內容如下
favorites.base.path=http://xx.xxx.xx.xx/
複製程式碼
地址為部署伺服器的地址
3、啟動專案
配置完成後,後臺啟動
[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 ~]#
複製程式碼
這樣以後如果我們想部署雲收藏專案就變的非常簡單,僅僅需要三步可以愉快的搭建自己的收藏系統了,小夥伴們趕緊動起手來。