文章目录
一 项目的准备
没有项目的同学,可以跳过
项目目录结构
项目的部分配置文件
server:
port: 2002
spring:
datasource:
username: root
password: 你的密码
#mysql8版本以上的驱动包,需要指定以下时区
url: jdbc:mysql://193.112.249.143:3306/dgut_bilibili?serverTimezone=GMT%2B8&characterEncoding=utf-8
#mysql8版本以上指定新的驱动类
driver-class-name: com.mysql.cj.jdbc.Driver
#引入Druid数据源
type: com.alibaba.druid.pool.DruidDataSource
#当前服务/应用的名字
dubbo:
application:
name: video
#注册中心的协议和地址
registry:
address: 193.112.249.143:2181
protocol: zookeeper
#通信规则(通信协议和接口)
protocol:
name: dubbo
port: 20883
#连接监控中心
monitor:
protocol: register
#配置mybatis相关文件路径
mybatis:
#映射配置文件路径
mapper-locations: classpath:mybatis/mapper/*.xml
#核心配置文件路径
# config-location: classpath:mybatis/mybatis-config.xml
type-aliases-package: com.dgut.entity.video
configuration:
map-underscore-to-camel-case: true
logging:
level:
com.dgut.video.mapper: debug
二 项目的打包
本项目部署是打包成jar包,使用docker,前后端分离部署。前后端不分离的同学,建议打包成war进行tomcat部署。本教程没有哦~~
1.项目打包需要的pom配置
首先是父工程的pom文件配置
因为是springboot的项目,所以继承spring-boot-starter-parent。
重要的需要指定每个<module>子项目。
注意父工程是不需要maven打包插件的。
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dgut</groupId>
<artifactId>dgut-bilibili</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>bilibili-client</module>
<module>user</module>
<module>service-api</module>
<module>redis</module>
<module>video</module>
<module>log</module>
<module>comment</module>
<module>album</module>
<module>admin</module>
<module>manager</module>
<module>authority</module>
</modules>
然后是子工程pom配置
你的父工程配置
<parent>
<artifactId>dgut-bilibili</artifactId>
<groupId>com.dgut</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
注意需要指定当前工程的Id
<artifactId>redis</artifactId>
<dependencies>
你的相关依赖
</dependencies>
打包一定需要,每一个子模块都需要打包插件,不然不能打包
这个需要注意的是,最后的业务项目模块才需要。如果是只需要被引用的一个单独的包,
是不需要添加打包插件的。比如单独抽离的service-api包,是被每个业务模块共同引用的,
是不需要插件打包的。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2 项目打包
使用idea打包成jar包
打包的时候注意将右上角的闪电标志点击去掉打包测试test,不然打包会很慢
直接到父工程dgut-bilibili项目打包会将所有的工程都打包成jar包
到单独的模块打包是只打包一个模块
打包后的jar包一般在target目录中
三 Centos中docker的安装和使用
本教程只是Centos镜像下的安装,如果是ubuntu的同学请另寻教程
1.Centos 6+版本,安装docker,依次执行以下命令
安装epel仓库
yum install -y epel-release
安装docker
yum install -y docker-io
安装后的配置文件查看
cat /etc/sysconfig/docker
启动docker服务
service docker start
验证docker
docker version
2.Centos 7+版本,安装docker,依次执行以下命令
安装gcc相关依赖
yum -y install gcc
yun -y install gcc-c++
卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装需要的软件包
yum install install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件索引
yum makecache fast
安装docker
yun -y install docker-ce
启动docker
systemctl start docker
测试
docker version #查看版本
docker run hello-world #运行hello-world镜像
docker ps #查看运行容器
配置阿里云镜像加速,如果不配的话镜像下载会从国外下载,会很慢。
mkdir -p /etc/docker #新建一个目录
vim /etc/docker/daemon.json # 新建编辑json文件
打开文件后输入
{
"registry-mirrors": ["https://5hrp3vzq.mirror.aliyuncs.com"]
}
然后退出保存,继续执行
systemctl daemon-reload
systemctl restart docker
配置完成
可以参考官网的配置:docker官网centos安装
四.docker中安装mysql
安装
#拉取mysql镜像,我拉取的是5.6版本,需要其他版本的可以自行拉取,注意事项未知。
docker pull mysql:5.6
#启动mysql容器
docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/logs:/logs -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
命令说明:
-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-v /home/mysql/conf:/etc/mysql/conf.d :将主机/home/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /home/mysql/logs:/logs:将主机/home/mysql目录下的 logs 目录挂载到容器的 /logs。
-v /home/mysql/data:/var/lib/mysql:将主机/home/mysql目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.6:后台程序运行mysql5.6
使用window连接服务器的mysql,使用的navicat工具,注意服务器的主机ip的外网ip,云服务器的3306端口需要对外暴露,也就是配置好安全组
五.docker中安装redis
安装
#拉取redis镜像
docker pull redis:3.2
#运行redis容器
docker run -p 6379:6379 --requirepass "mypassword" -v /home/myredis/data:/data -v /home/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
命令说明:
--requirepass "mypassword" : 设置redis的密码
window连接redis,使用的是RedisDesktopManager管理工具连接,同样的需要配置安全组,暴露6379端口,使用外网ip连接
六.docker安装配置fastDfs
安装
拉取fastDfs镜像
docker pull delron/fastdfs #拉取最新版本
启动tracker容器
docker run -d --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker
启动storage容器
docker run -d --network=host --name storage -e TRACKER_SERVER=192.168.56.1:22122 -v /var/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage
说明:
-e TRACKER_SERVER=192.168.56.1:22122 ip地址使用服务器的外网ip地址
storage的内置nginx端口是8888
可进入storage容器测试文件上传。
java使用fastDfs
pom文件中引用客户端支持
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.2</version>
</dependency>
yml中配置
# 分布式文件系统FDFS配置
fdfs:
soTimeout: 6000 #socket连接超时时长
connectTimeout: 6000 #连接tracker服务器超时时长
reqHost: 193.112.249.143 #nginx访问地址
reqPort: 8888 #nginx访问端口
thumbImage: #缩略图生成参数,可选
width: 150
height: 150
trackerList: #TrackerList参数,支持多个,我这里只有一个,如果有多个在下方加- x.x.x.x:port
193.112.249.143:22122
java上传下载工具类
public class FastDFSClientUtil {
//nginx访问地址
@Value("${fdfs.reqHost}")
private String reqHost;
//nginx访问端口
@Value("${fdfs.reqPort}")
private String reqPort;
//自动注入storage客户端
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private ThumbImageConfig thumbImageConfig; //创建缩略图 , 缩略图访问有问题,暂未解决
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
String path = thumbImageConfig.getThumbImagePath(storePath.getPath()) ;
System.out.println("thumbImage :" + path); // 缩略图访问有问题,暂未解决
return getResAccessUrl(storePath);
}
public void delFile(String filePath) {
storageClient.deleteFile(filePath);
}
public InputStream download(String groupName, String path) {
InputStream ins = storageClient.downloadFile(groupName, path, new DownloadCallback<InputStream>(){
@Override
public InputStream recv(InputStream ins) throws IOException {
// 将此ins返回给上面的ins
return ins;
}}) ;
return ins ;
}
/**
* 封装文件完整URL地址
* @param storePath
* @return
*/
private String getResAccessUrl(StorePath storePath) {
String fileUrl = "http://" + reqHost + ":" + reqPort + "/" + storePath.getFullPath();
return fileUrl;
}
}
七.zookeeper服务器的搭建
安装
#拉取镜像
docker pull zookeeper
#运行容器
docker run --privileged=true -d --name zookeeper --publish 2181:2181 -d zookeeper:latest
进行到这一步的linux的容器运行情况,应有redis,mysql,tracker,storage,zookeeper
连接使用zookeeper
服务器配置安全组,暴露2081端口
然后dubbo服务yml配置
#当前服务/应用的名字
dubbo:
application:
name: user
#注册中心的协议和地址
registry:
address: 193.112.249.143:2181 #这个端口应该是服务器的外网ip
protocol: zookeeper
#通信规则(通信协议和端口口)
protocol:
name: dubbo
port: 20882 #每个服务的协议端口不同
#连接监控中心
monitor:
protocol: register
启动单个服务进行测试服务注册
八.duboo服务部署
博主使用的是MobaXterm工具连接服务器的。同时可以上传文件,比较方便
1.上传jar包至服务器,并编写Dockerfile文件
Dockerfile文件内容
# 加载java8进项
FROM java:8
# 作者
MAINTAINER eangulee <eangulee@gmail.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /home/tmp
#注意你的包名
# 将jar包添加到容器中并更名为app.jar
ADD app-1.0-SNAPSHOT.jar app.jar
# 运行jar包
#注意你的包名
RUN bash -c 'touch /app.jar'
#注意你的包名
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
2.然后进入Dockerfile的文件目录下构建镜像
#image-name 是你要取的镜像名字
docker build -t images-name .
#查看构建的镜像
docker images
大概如下
3.运行dubbo服务容器
重点:
- 注册ip一定是外网ip
- 不同服务器访问服务,一定要使dubbo协议端口对另一台机器暴露。比如 ‘服务提供者-1’ 在linux-1上,zookeeper和‘服务消费者-1’在linux-2上,消费者需要调用服务提供者-1,则‘服务提供者-1’ 的linux-1上需要对linux-2暴露它的dubbo协议端口。
docker run -d --name serviceName -e DUBBO_IP_TO_REGISTRY=30.5.97.6 -e DUBBO_PORT_TO_REGISTRY=20881 -p 2001:2001 -p 20881:20881 imagesName
命令说明
-d 后台运行
--name 设置启动容器的名字
-e DUBBO_IP_TO_REGISTRY=30.5.97.6 这个是设置向zookeeper祖册服务的ip地址,一定要是当前服务所在机器的公网ip地址,不然不同服务器之间会访问不了,因为默认的本机的内网ip地址
-e DUBBO_PORT_TO_REGISTRY=20881 这个是协议的注册端口
-p 2001:2001 -p 20881:20881 对外暴露server端口和dubbo协议端口
serviceName 容器名称
imagesName 要运行的镜像
运行后通过
docker logs -f 容器id或者容器名
查看运行日志,日志输出格式就是项目运行的格式,都是info就对了
后面重复步骤搭建每个dubbo服务镜像,并启动每个服务,建议是先启动单独服务,需要依赖其他服务的后启动,逐个启动便可以在本机上启动前端去测试了。注意服务的安全组哦~~
下面附上我的项目全部启动后的结果
服务部署机器
各种服务器部署和数个dubbo服务部署机器
温馨提示: 服务器可以从阿里云或者腾讯云获取10块钱每月的学生机器,亚马逊云也是有学生机器的。
本博主是分别在两个地方各买一台才勉强配置完的~~~
九.docker安装nginx并部署vue项目
vue项目打包
#在vue项目目录下执行
npm run build
然后复制打包后的文件夹dist到linux服务器上
这是我的两个vue项目打包上传到服务器上的样子。
docker安装nginx
#拉取镜像
docker pull nginx
#运行容器,自定义名称和暴露端口
docker run -d --name xxx -p 3000:80 nginx:latest
复制vue项目到nginx容器内
#复制,将/home/client/目录下的全部文件复制到容器/usr/share/nginx/html/目录下
docker cp /home/client/. 容器名称或ID:/usr/share/nginx/html/
修改nginx配置文件
新建一个nginx.conf文件,如图
修改文件内容如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
client_max_body_size 20m;
server {
listen 80;
server_name localhost;
location / {
#是你vue项目在容器内存放的位置
root /usr/share/nginx/html/
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
复制文件到容器内,覆盖掉原本的配置文件
docker cp /home/nginx.conf 容器名称或ID:/etc/nginx/
操作完成后进入容器,查看对应目录是否存在和配置文件是否修改
docker exec -it 容器ID或名称 bash
#检查完毕后停止容器后在开启
docker stop 容器ID
docker start 容器ID
配置文件目录:/etc/nginx/nginx.conf
vue项目文件目录:/usr/share/nginx/html/
最后服务器设置安全组端口3000,就可以用 外网ip:端口号访问vue项目了
十.博主的项目介绍
项目是模仿bilibili的视频网站哦
使用技术:
MySQL
idea vsCode
Spring MVC,Spring,mybatis技术
Spring boot 整合dubbo,zookeeper搭建分布式微服务。
Shiro框架实现权限管理
使用maven管理,Redis服务器进行缓存管理。
使用fastdfs进行文件分布式管理。
使用docker进行服务运营。
前端使用vue、ElementUI、axios、
不多说上图:
分类查看
视频查看
评论
主页
最后放一张后台管理
图就不放太多了。
附上项目的访问地址:
客户端: http://193.112.249.143:3000
后台 http://193.112.249.143:3050
服务器学生机不能折腾哦,请收下留情,因为宽带低,网页初次加载会慢哦请等待。注:客户端不支持ie8一下哦,建议谷歌或者火狐浏览器。了解更多可以加q 820186198