本文将带大家从一台全新的 CentOS 服务器开始,部署一套完整的前后端分离项目。操作步骤非常详细,新手友好型文章~
后端技术栈:SpringCloud 微服务架构 + Redis + RabbitMQ + MySql;
前端技术栈:Vue + ElementUI;
部署工具:后端用 Docker 容器化部署,并把命令封装成脚本自动执行;前端用 Nginx 做代理。
一、前期准备
系统版本为:CentOS 7.6 64位。
1.1 连接服务器
要对远程服务器进行操作,首先要连上服务器才行。打开命令行工具,输入以下命令,再输入服务器实例的密码,即可远程连接到服务器。
ssh root@xxx.xx.xx.xx
@
之后是服务器的公网 ip,假如服务器 ip 地址为:120.456.78.123,那么连接服务器的命令为:
ssh root@120.456.78.123
敲回车之后会让输入密码,输入正确的密码即可。
1.2 安装 Docker
Docker 容器化部署的优点就不多说了,直接上干货如何安装 Docker。
下面直接把代码框里的命令拷贝到命令行执行就可以。
先移除旧版本(如果有):
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装一些必要的工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
sudo yum makecache fast
安装 Docker-ce:
sudo yum -y install docker-ce
启动 Docker 后台服务
sudo systemctl start docker
测试运行 hello-world(这步可要可不要,目的是验证身份安装 Docker 成功,如果成功会打印出 Hello World)
docker run hello-world
1.3 安装 mysql
拉取 mysql5.7 版本的镜像
docker pull mysql:5.7
运行 MySql
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
命令说明:
- -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
- **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
注意在运行之前切换到合适的目录,因为 MySql 容器映射到本机的目录是映射的当前目录的相对目录。比如当前目录为 /root/abc
,那执行完上面的命令后,会在 /root/abc
下创建 MySql 挂载出来的目录和文件。
1.4 安装 redis
也可以直接执行运行命令,如果系统检测到没有安装此镜像,则会拉取安装,再运行。
下载并运行 redis:4.0.8
:
docker run -p 6379:6379 -t -dit redis:4.0.8
1.5 安装 RabbitMQ
跟上面一样也是直接执行运行命令安装并运行 rabbitmq:3.7.7
:
docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.7-management
到此部署微服务后端项目的前期环境准备工具已经做完。如果要部署前端还需要安装 Nginx,这个在前端部署的章节再讲。
二、后端部署
部署后端需要做的工作有两个,一个是修改每个微服务模块的配置文件 application.yml
,另一个是编写 Dockerfile
。
先看目录结构:
一共有 5 个模块,其中 common
是纯 java 代码用于各模块公共代码的提取,剩下四个每个是一个独立的微服务模块,所以我们要部署 eureka
、user
、education
、gateway
四个模块,也就是最后会运行四个独立的 docker 容器。
具体的业务逻辑就不做过多说明了,本文只讲部署。
2.1 配置文件 application.yml
为了本地调试和服务器部署互不影响,我们把原来的 application.yml
拆分为三个文件:
application.yml
:总配置,指定应该用下面哪个配置application-dev.yml
:开发环境配置application-pro.yml
:生成环境配置
另外为了方便,把 Dockerfile 也放到同级目录下。如图:
下面是三个配置文件的代码:
application.yml
spring:
profiles:
active: pro
application-dev.yml
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
server:
port: 8899
spring:
application:
name: education
datasource