前言
微服务目录结构参考:黑马 学成在线微服务模版
打包教程:鱼皮微服务打包教程:https://www.bilibili.com/video/BV1Cp4y1F7eA?vd_source=a5916dd0c483eddb098610c4f50ae397
这个教程跟鱼皮的不太重复,扩展点如下:
- 目录结构不同。相应的docker-compose需要定制化调整
- 引入了python微服务。不同语言的服务如何一键部署
- 解决了docker 仓库的网络问题,拉取镜像不再是烦恼
- 又引入了es和xxl-job两个中间件
- 小小的踩了一下坑
项目整理
服务名 | 端口 | 版本 | 备注 |
---|---|---|---|
nacos | 8848 | 2.3.2 | 注册配置中心 |
RabbitMQ | 5672|15672 | 3.13.2 | 消息队列、 guest |guest |
ElasticSearch | 9200 | 8.11.1 | 搜索引擎、elastic|123456 |
Redis | 6379 | 5.0.14 | 缓存 |
MySQL | 3306 | 8.0.30 | 数据库 |
xxl-job | 9000 | 分布式定时任务 | |
Python服务 | 10086 | 爬虫服务 | |
ischool-gateway | 9001 | 网关微服务 | |
ischool-user | 9002 | 用户微服务 | |
ischool-search | 9003 | 搜索微服务 | |
ischool-community | 9004 | 社区微服务 | |
crawl-announcement-executor | 9005 | 和搜索微服务在一个微服务下,只需暴露端口 |
创建Docker-compose和dockerfile文件
- 目前Python程序写入数据库和Java程序调用Python程序都写死了ip,先将就着用
流程
安装docker及相关组件
docker官方文档:CentOS 操作系统 |Docker 文档
-
安装软件包并设置存储库
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
在安装docker前,执行下面命令配置一下镜像,不然安装不成功
24年中不知道国家出于什么方向的考虑,把docker源和国内主流的docker镜像源全封了,包括但不限于阿里、各家大学的镜像源。因此下载的时候需要费一些功夫
sudo mkdir -p /etc/docker #创建目录 sudo touch /etc/docker/daemon.json # 创建文件 sudo vi /etc/docker/daemon.json # 添加镜像配置
PS:如果安装过docker直接vi就行了,不用创建目录和文件
镜像源是这个直接粘贴到上面那个文件中,注意这些都可能会被国家封了,到时候需要自己找镜像源
{ "registry-mirrors": ["https://docker.1panel.live", "https://hub.rat.dev/", "https://docker.chenby.cn", "https://docker.m.daocloud.io"] }
-
再去下载docker和docker套件就好了,注意网络不稳定,可能失败,再重装一下即可
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
验证是否安装成功
sudo systemctl start docker sudo docker run hello-world # 出现hello docker就显示安装成功了
启动项目
-
安装maven
sudo yum install maven
-
打包 (注意时间可能较长)
sudo mvn package -DskipTests
我推荐直接在本地打jar包上传到远程,这样步骤1、2就不用做了,好像在云服务器打还会出现找不到java的情况需要安装java,可能是我maven配置有问题
-
执行docker-compose文件命令
sudo docker compose -f docker-compose.env.yml up sudo docker compose -f docker-compose.service.yml up
注意:发布到线上还需要做两件事情:
- 同步nacos配置
- 创建mysql表结构
- xxl-job新建执行器、同步xxl-job表结构
- es新建索引
踩踩坑
如果同时通过命令行或docker-compose和内部配置文件指定了环境,会以前者的环境为准
1:解决java -jar打包失败报ischool-user-service | no main manifest attribute, in /app/iSchool-user-1.0-SNAPSHOT.jar
给需要打jar包的微服务加上这段配置
!注意别删除之前的配置,不然可能有时候你Java代码不写参数名本来可以跑但是编译以后由于没有带参数导致跑不了了
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2:解决redis RDB没有权限问题
sudo chown -R 1000:1000 /home/code/data/.redis-data
sudo chmod -R 777 /home/code/data/.redis-data
解决es没有获得节点锁的问题
sudo chown -R 1000:1000 /home/code/data/.elasticsearch-data
sudo chmod -R 777 /home/code/data/.elasticsearch-data
3:解决es访问失败问题(加上安全配置)
elasticsearch:
image: elasticsearch:8.11.1
container_name: ischool-elasticsearch
environment:
- xpack.security.enabled=false
- discovery.type=single-node
- ELASTIC_PASSWORD=123456
- ES_JAVA_OPTS=-Xms1g -Xmx1g # 一定要加,不然低配云服务器内存会被撑爆
ports:
- "9200:9200"
volumes:
- ./.elasticsearch-data:/usr/share/elasticsearch/data
networks:
- mynetwork
4:解决使用element-plus组件库内置img属性时图片不生效问题。是因为vite默认不会处理某种格式的图片,nginx加一个转发即可
location /public/ {
alias /usr/share/nginx/html/dist/; # 图片路径
}
附录
查看停止的docker容器日志:
docker inspect --format '{{.LogPath}}' 60f486ec7c33
cat xxx
删除所有容器和容器镜像
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -q)
修改mysql容器密码(没改密码,有个人把我mysql表和数据全删了!!!真的无语,不能理解这种人的动机):
docker exec -it ischool-mysql bash
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
docker-compose模版与各个微服务的Dockerfile链接: 智搜通—大数据量下的综合性教务公告检索平台
根据自己需要改写配置文件,线上中间件一定要设置密码,接口文档不要暴露出来(不过你不配nginx转发好像默认就404hh)。
然后我们一般的处理方式是创建一个开发环境和一个生产环境的配置文件,在这种场景下,每个微服务的生产环境配置文件一般写一个nacos配置即可,剩下配置比如mysql账号密码,网关转发配置的在线上nacos里面配置。本地调通发到线上解决这个docker相关配置文件编写即可,需要帮助可进qq粉丝群提问,我看到都会答疑的!
文章评论