http://www.ityouknow.com/springboot/2018/04/02/docker-favorites.html

云收藏项目已经开源2年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时很新的技术,现在看来其实很多新技术是没有必要使用的,但做为学习案例来讲确实是一个绝佳的 Spring Boot 实践。

从开源到现在,写了一些教程给大家介绍如何部署云收藏,如何在IDE中运行云收藏,但是仍然有很多的朋友不知道如何使用,如何部署?就像“请提供一份云收藏数据结构” 这样的问题我至少都回答了一百多次,并且在 github 关闭了近十个类似的问题。

这也从另外一个方面可以看出,部署云收藏项目对一些朋友还是比较复杂,现在有了 Docker 我们就可以愉快的解决这个问题,只需三步就可以部署云收藏项目,打造专属个人的收藏系统。

云收藏

一些朋友可能还不了解云收藏,给大家简单介绍一下:

云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章,可以作为稍后阅读的一个临时存放。作为一个开放开源的软件,可以让用户从浏览器将收藏夹内容导入到云收藏,也支持随时将云收藏收集的文章导出去做备份。

产品主页

http://favorites.ren

项目主页

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

产品截图

核心功能点:

  • 收藏、分类、检索文章
  • 导出、导出(包活从浏览器中)
  • 可以点赞、分享、讨论
  • 注册、登录、个人账户
  • 临时收藏、查看别人收藏
  • 其它…

项目使用技术:

  • 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 ~]#

这样以后如果我们想部署云收藏项目就变的非常简单,仅仅需要三步可以愉快的搭建自己的收藏系统了,小伙伴们赶紧动起手来。

(转)Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏的更多相关文章

  1. Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

    Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏 云收藏项目已经开源3年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时 ...

  2. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  3. Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 开源软件云收藏

    云收藏项目已经开源2年多了,作为当初刚开始学习 Spring Boot 的练手项目,使用了很多当时很新的技术,现在看来其实很多新技术是没有必要使用的,但做为学习案例来讲确实是一个绝佳的 Spring ...

  4. spring boot(十六)使用Jenkins部署spring boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  5. 使用 Docker 部署 Spring Boot 项目,带劲!!

    上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...

  6. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  7. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  8. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

  9. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

随机推荐

  1. 2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)

    本章主要内容如下: 1) 窗口组件(QWidget) 2) QT坐标系统 3) 消息处理(信号与槽) 窗口组件(QWidget) 介绍 Qt以组件对象的方式构建图形用户界面 Qt中没有父组件的顶级组件 ...

  2. 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数

     上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的”:”后面,比如: class Line : public Object //继承方式是publi ...

  3. Android开发过程中的坑及解决方法收录(二)

    bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...

  4. POJ2484

    A Funny Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6178   Accepted: 3861 Desc ...

  5. PHP全路径无限分类导航LINK代码实现

    <?php /** * @param php全路径无限分类 */ include('db.inc.php'); function getPathCate($cateid){ $sql = &qu ...

  6. Git学习(一)

    版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制. 一.集中式版本控制系统 v.s ...

  7. 微信小程序调用地图选取位置后返回信息

    先看一下wxml的代码,绑定个事件! <view class='carpool_data_all'> <view class='aa'> <text>*出发地< ...

  8. django模型基础(三)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...

  9. vivo怎么录屏 手机录制屏幕详细教程

    在手机上我们经常可以刷到许多类似于手机游戏之类的屏幕视频我想肯定会有很多人好奇怎么录制的,今天小编所说的便是教大家如何在安卓手机上进行屏幕录像,下面便是关于vivo怎么录屏的具体操作方法,希望能对你们 ...

  10. Nginx 部署多个 web 项目(虚拟主机)

    1,创建 www 目录 2,在 www 目录下创建 test1 和 test2 目录,表示两个项目 3,test1 下创建 test1.html 4,test2 下创建 test2.html 5,配置 ...