云服务器Linux环境部署mall电商项目完整实践教程
- 引言
- JDK8 安装
- Docker 环境安装
- MySQL安装
- rpm 包安装 Mysql5.7
- Redis 安装
- RabbitMQ 安装
- ElasticSearch 与 Kibana 安装
- MongoDB安装
- Nacos 安装
- 安装 `Nginx` 服务
- 部署后端`SpringCloud`微服务jar包
- 站点效果
- 结语
- 阿里云服务器推荐
引言
在笔者之前的文章微服务版mall电商项目本地开发环境启动前后端服务详细指导教程中笔者详细介绍了如何在开发者的本地环境把开源mall-swarm电商项目跑起来。但是最终我们的项目都是要部署到云服务器上去成为一个用户可访问的站点才有价值,包括后面的支付环节都是需要我们部署到云服务上才能申请到支付宝支付和微信支付的商户号才能打通的。
笔者在尝试将mall电商项目部署到个人的腾讯云和阿里云服务上时踩了不少坑,这篇文章相信可以帮助大家在部署微服务项目的时候少踩很多坑。由于部署mall-swarm微服务项目需要安装不少中间件以及不少于3个微服务,因此一台1核2G的云服务器根本跑不起来,因此需要不少于2台云服务器,至少有一台2核4G配置的云服务器,当然如果能租一台2核8G的云服务器一台也够了。
本文6800余字,大约需要花费您15分钟时间才能阅读完,所以建议先收藏,等晚上下了班时间充足了再进行精读,阅读完必定让您收获成为一名具备独立承接项目所必可少运维技能!
JDK8 安装
Linux 系统环境下安装JDK8非常简单,为了节约文章篇幅,笔者给大家找了一篇写得非常具有实操性且图文并茂的文章给大家参考实践。Linux环境安装JDK8
Docker 环境安装
因为我们在云服务器Linux环境下部署mall-swarm微服务项目时大部分中间件服务都是基于docker安装的,所以需要在自己的云服器上先安装docker环境。
1)安装yum-utils
yum install -y yum-utils device-mapper-persistent-data lvm2
2)为yum源添加docker仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3)安装docker
yum install docker-ce
4)启动docker
systemctl start docker
MySQL安装
数据库建议不使用docker安装,原因有以下两点:
数据安全问题:不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。
性能问题:大家都知道,MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。
rpm 包安装 Mysql5.7
笔者之前在自己的腾讯云服务器上使用rpm包安装过mysql服务,并写了一篇文章记录自己当时安装过程踩过的坑,大家可以参考这篇文章在自己的云服务器上安装mysql5.7
Linux系统云服务器上安装Mysql5.7数据库,解决不能远程访问的bug
1)安装完成之后使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
2)创建mall数据库及mallSwarm用户:
-- 创建mall数据库
create database mall character set utf8;
-- 创建mallSwarm用户和登录密码
create user mallSwarmidentified by 'mallPassword12345'with max_connections_per_hour 500 max_updates_per_hour 100 max_user_connections 500 max_queries_per_hour 200;
-- 授权mallSwarm用户操作mall数据库的权限
GRANT CREATE,DROP,ALTER,INSERT,UPDATE,SELECT,DELETE on mall.* to 'mallSwarm'@'%' with grant OPTION;
FLUSH PRIVILEGES;
3)在sql
编辑器窗口中执行项目中document/sql/mall.sql
中的全部sql
脚本。
Redis 安装
# 拉取redis镜像
docker pull redis:latest
# 运行redis
docker run -it --name redis -p 6379:6379 -d redis:latest
进入Redis容器使用redis-cli命令进行连接
docker exec -it redis redis-cli
RabbitMQ 安装
1)下载rabbitmq3.12-management的docker镜像
docker pull rabbitmq:3.12-management
2)docker 启动 RabbitMQ 服务
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-v /mydata/rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.12-management
3)开通 RabbitMQ 服务端口防火墙
# rabbitmq 客户端访问rabbitmq 服务端口号
firewall-cmd --zone=public --add-port=5672/tcp --permanent
# rabbitmq 客户端访问rabbitmq 管理后台服务端口号
firewall-cmd --zone=public --add-port=15672/tcp --permanent
# 使开通的防火墙生效
firewall-cmd --reload
开通rabbitmq 服务端口的防火墙之后还需要登录往云服务控制台中的安全组入站规则添加对 5672和15672端口的放行,否则无法通过浏览器访问rabbitmq 控制台页面。
- 访问地址查看是否安装成功:http://47.120.47.250:15672/
- 输入账号密码并登录:guest/guest
- 创建帐号并设置其角色为管理员:mall/mall1234
- 给mall用户分配权限和/mall虚拟host
- 点击mall用户进入用户配置页面并给mall用户配置该虚拟host的权限
ElasticSearch 与 Kibana 安装
ES 与 Kibana的安装请参考笔者之前写过的文章 Docker 安装7.12.1版本ElasticSearch、Kibana及中文分词器
MongoDB安装
MongoDB
的安装请参考笔者之前写过的文章文档型数据库MongoDB的安装与入门操作
Nacos 安装
Nacos
的安装笔者没有使用docker安装,而是通过上传nacos-server-2.1.0.tar.gz
压缩包到云服务器上的/usr/local
目录,然后执行以下命令完成解压和安装
# 解压
tar -zxvf nacos-server-2.1.0.tar.gz
# 进入bin目录
cd ./nacos/bin
# 以单机模式启动nacos服务
sh startup.sh -m standalone
# 启动nacos 成功后执行命令查看启动日志
cat /usr/local/nacos/logs/start.out
控制台出现 nacos
启动成功的日志
,--.,--.'|,--,: : | Nacos 2.1.0
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 1208727
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://172.29.68.237:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'2024-03-05 23:55:14,468 INFO Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@285f09de' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)2024-03-05 23:55:14,473 INFO Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)2024-03-05 23:55:14,901 INFO Tomcat initialized with port(s): 8848 (http)2024-03-05 23:55:15,345 INFO Root WebApplicationContext: initialization completed in 4955 ms2024-03-05 23:55:20,923 INFO Initializing ExecutorService 'applicationTaskExecutor'2024-03-05 23:55:21,074 INFO Adding welcome page: class path resource [static/index.html]2024-03-05 23:55:21,427 INFO Creating filter chain: Ant [pattern='/**'], []2024-03-05 23:55:21,630 INFO Initializing ExecutorService 'taskScheduler'2024-03-05 23:55:21,660 INFO Exposing 2 endpoint(s) beneath base path '/actuator'2024-03-05 23:55:21,832 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'2024-03-05 23:55:21,836 INFO Nacos started successfully in stand alone mode. use embedded storage
开通 nacos
8848 和 9848 端口防火墙,前者用于客户端与nacos
服务端http
协议通信和 grpc
通信协议端口
# nacos 客户端访问nacos 服务端http协议端口号
firewall-cmd --zone=public --add-port=8848/tcp --permanent
# nacos 客户端访问nacos 服务端 grpc 协议端口号
firewall-cmd --zone=public --add-port=9848/tcp --permanent
# 使开通的防火墙生效
firewall-cmd --reload
最后,记得登录往云服务控制台中的安全组入站规则添加对 8848 和9848端口的放行
安装 Nginx
服务
Nginx
是一个轻量级的Web服务器,后面我们要部署Vue
项目打包后的zip包这就需要用到Nginx
服务。这里我们也选择使用docker
容器来安装 Nginx
服务, 因为无论是使用tar.gz
包安装需要经过编译安装,这个过程非常容易出错,笔者一开始选择了使用tar.gz
包安装,但却在安装过程中出现各种报错。于是索性使用Docker容器安装,没想到非常顺利就把Nginx
安装好了。
执行如下命令安装并启动Nginx
# 拉取Nginx 镜像
docker pull nginx
#运行
docker run --name nginx-test -p 80:80 -d nginx
启动Nginx成功后执行如下命令进入docker使用沙箱隔离机制给Nginx
分配的系统空间
docker exec -it nginx-test /bin/bash
进入Nginx
的隔离系统后,执行ls命令可看到Docker容器给Nginx
服务分配的系统根目录
[root@iZf8zdh51orpja1xwy1mutZ bin]# docker exec -it nginx-test /bin/bash
root@4b0c1dff5fe8:/# ls
bin dev docker-entrypoint.sh home lib32 libx32 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib lib64 media opt root sbin sys usr
root@4b0c1dff5fe8:/#
docker
安装的 Nginx
服务的 几个重要文件分别在隔离系统中的以下几个目录:
nginx
配置文件位置:/etc/nginx/nginx.conf
, 其中nginx.conf
文件中引入了/etc/nginx/conf.d/default.conf
配置文件;html
目录位置:/usr/share/nginx/html
;- 访问与错误日志位置:
/var/log/nginx/access.log
,/var/log/nginx/error.log
; nginx.pid
文件位置:/run/nginx.pid
,用于存放nginx
服务的进程id
在docker
沙箱系统中我们不好修改 nginx
的配置文件,我们可以docker container cp
命令将nginx
的配置文件目录拷贝到宿主机中的/mydata/nginx
目录下:
docker container cp nginx-test:/etc/nginx /mydata/nginx/
反之,我们也可以使用docker container cp
将宿主机中的文件拷贝到docker
容器中,然后通过执行docker restart nginx-test
命令重启nginx
服务。
部署后端SpringCloud
微服务jar包
这里我们为了方便演示并考虑服务器能承受的最大运行内存,我们目前只启动3个微服务,分别是mall-gateway
、mall-auth
和 mall-portal
3 个微服务。
1)修改mall-gateway
和 mall-auth
两个子模块中的bootstrap-prod.yml
配置文件
spring:cloud:nacos:discovery:server-addr: 47.113.205.244:8848 #注意使用服务器ip地址不需要加http协议# server-addr: http://nacos-registry:8848config:
# server-addr: http://nacos-registry:8848file-extension: yamlserver-addr: 47.113.205.244:8848
logging:file:path: ./logslevel:root: infosql: debugweb: info
主要修改了nacos的地址,改为云服务上部署的nacos服务地址,并加上了日志文件位置和日志级别配置。
2)修改mall-portal
子模块中的``bootstrap-prod.yml 配置文件
spring:cloud:nacos:discovery:server-addr: 47.113.205.244:8848config:server-addr: 47.113.205.244:8848file-extension: yamldatasource:url: jdbc:mysql://134.175.187.61:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=trueusername: mallSwarmpassword: mallPassword12345druid:initial-size: 5 #连接池初始化大小min-idle: 10 #最小空闲连接数max-active: 20 #最大连接数web-stat-filter:exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据stat-view-servlet: #访问监控网页的登录用户名和密码login-username: druidlogin-password: druidrabbitmq:host: 47.120.47.250port: 5672username: guestpassword: guestredis:host: localhost # Redis服务器地址database: 0 # Redis数据库索引(默认为0)port: 6379 # Redis服务器连接端口password: # Redis服务器连接密码(默认为空)timeout: 3000ms # 连接超时时间(毫秒)
logging:file:path: ./logslevel:root: infosql: debugweb: info
主要修改了客户端连接nacos
、mysql
和 rabbitmq
三个服务的连接地址,并加上了日志文件和日志级别配置项。
3)打包上传到服务器
在IDEA中对三个子模块的Lifecycle
生命周期函数,选中跳过测试模式开关按钮,依次执行 clean
和 package
打包扣好后会在子模块对应的target
目录下出现对应的<name>-1.0-SNAPSHOT.jar
,将打包好的mall-gateway-1.0-SNAPSHOT.jar
、mall-auth-1.0-SNAPSHOT.jar
和mall-portal-1.0-SNAPSHOT.jar
依次上传到2核4G配置的阿里云服务器上新建的/usr/local/mall/gateway
、/usr/local/mall/auth
和/usr/local/mall/portal
目录下,并分别在各个子目录中新建logs
目录。
4)运行启动微服务jar包脚本
执行如下命令启动三个微服务(因为笔者最熟悉的部署方式就是这种上传jar包后执行shell脚本完成部署,因此暂时没用docker部署,未来会切换成docker容器部署微服务)
# cd切换到gateway目录
cd /usr/local/mall/gateway
# 启动mall-gateway网关微服务
nohup java -jar -Dspring.profiles.active=prod -Dserver.port=8201 ./mall-gateway-1.0-SNAPSHOT.jar>./logs/app.log 2>&1 &
# cd切换到auth目录
cd ../auth
# 启动mall-auth 认证微服务
nohup java -jar -Dspring.profiles.active=prod -Dserver.port=8401 ./mall-auth-1.0-SNAPSHOT.jar>./logs/app.log 2>&1 &
# cd切换到portal目录
cd ../portal
# 启动mall-portal电商客户侧应用微服务
nohup java -jar -Dspring.profiles.active=prod -Dserver.port=8085 ./mall-portal-1.0-SNAPSHOT.jar>./logs/app.log 2>&1 &
启动成功后控制会打印出启动成功的微服务线程ID。
5)开通微服务端口防火墙
# 开通 mall-gateway服务端口防火墙
firewall-cmd --zone=public --add-port=8201/tcp --permanent
# 开通 mall-auth服务端口防火墙
firewall-cmd --zone=public --add-port=8401/tcp --permanent
# 开通 mall-portal服务端口防火墙
firewall-cmd --zone=public --add-port=8085/tcp --permanent
# 使开通的防火墙生效
firewall-cmd --reload
6)云服务器控制台安全组添加微服务端口入站规则
添加完入站规则后点击右边的保存按钮完成对指定端口的入站放行,下面对几个微服务端口的入站规则笔者已经全部添加好了。
然后我们登录Nacos
服务的控制台(默认的登录用户名和密码为:nacos/nacos)
进入主页后点击左边菜单栏中的【服务管理】-> 【服务列表】就可以看到注册上来的三个微服务:mall-auth
、mall-portal
和 mall-gateway
。
站点效果
部署完成后,我们就可以在浏览器中输入站点网址 http://47.113.205.244
回车后进入系统首页
此时是以游客角色进入系统首页,点击任何一个链接后页面会弹框提示我们去登录
点击【重新登录】按钮进入登录界面
输入用户名zhengsan
和登录密码123456
点击登录按钮登录成功后再次进入首页
这次是以普通用户角色进入系统首页,点击下面的【小米官方旗舰店】则可跳转到【品牌详情】页
点击其中一个商品【小米 红米5A】则可进入购物页面
点击右边的【加入购物车按钮】后,然后点击【购物车】按钮进入购物车页面
继续点击【去结算】则进入【创建订单】页面
后面的流程笔者就不继续演示了,大家把mall项目部署到自己的云服务器上后就可以自行操作熟悉各种场景了。
结语
本文主要介绍了如何在付服务器Linux系统环境下搭建部署mall
电商项目所需要的基础设施以及中间件服务,包括JDK8
、Docker
、Mysql
、RabbitMq
、Redis
、MongoDB
、ElasticSearch
、Nacos
、Nginx
等,大部分基础设施服务采用了Docker
容器安装,简单高效。并以jar
包的形式部署了mall
电商项目中的三个微服务项目,分别是:mall-gateway
网关项目、mall-auth
鉴权项目以及商城门户项目mall-portal
,同时使用Nginx
的Docker
镜像服务服务部署了使用HBuilderX
打包好的mall-web-app
项目。前端访问后端接口统一走mall-gateway
网关,本文的部署实践部分也附带了很多操作过程中的截图。
最后我们通过浏览器访问的方式体验了部署到阿里云服务器上的mall电商项目的网站效果,希望大家通过本文都能掌握具备独立开发项目的运维知识和技术。整个部署过程中,笔者也踩了不少坑,下一篇文章笔者会详细列举自己在部署过程中踩过的坑以及它们对应的解决方案。
阿里云服务器推荐
大家也看到了要部署整个mall电商项目的前后端服务,需要安装8个基础设施及中间件服务,5个后台微服务(mall-gateway
、mall-auth
、mall-portal
、mall-admin
和 mall-monitor
)以及两个前端服务(mall-app-web
和 mall-admin-web
)等多达15个服务,占用的运行内存不可谓不高,所以需要至少两台云服务器才能支撑整个项目的稳定运行。如果要部署自己的mall
电商项目独立站点,那就少不了要购买云服务器。
部署好mall这样一个多模块微服务项目少购买一两台云服务器,笔者的这个mall
项目的多数jar包就部署在了一台2核4G配置的阿里云服务器上。亲身体验过,不仅好用,而且价格非常实惠。
新人购买一台2核4G配置的阿里云服务器3个月只需要60多块钱,而购买一台2核2G配置的ECS云服务器一年只需要99元,非常划算。感兴趣的老铁们可以复制下面的链接到浏览器中进入【阿里云小站】购买一台属于自己的云服务器,不仅有助于提高我们独立开发网站的能力,而且有一天说不定还能还能依靠自己的网站变现给自己带来一份不菲的副业收入,小伙伴们有想法就赶紧去行动吧!点击下面的【阿里云小站】链接就可以去选购自己想要的阿里云服务器了。
阿里云小站
下面是阿里云服务器产品预览图
原创不易,能看到这里的老铁真的是铁粉无疑了!作者需要你们的点赞、在看和转发一套三连来鼓励他写出更多更好的优质文章,谢谢!
关注微信公众号【阿福谈Web编程】,并在公众号后台发送关键字【mall项目源码】即可获得mall
前后端项目的源码git
仓库地址链接。