(1)环境规划:
①地址规划:
②业务流量流向图:
③业务部署流程:
1、从前往后部署
2、最后部署存储
④编译机器:负责编译前端代码和后端代码,不参与实际生产
1、编译的前端配置:{这里的地址是写4层slb的地址,因为web上的流量到了以后是要扔在4层slb上}为什么要写slb的公网地地址?代码的疏忽
[root@bd-manager tduck-front]# cat .env.production
# 页面标题;itter不提供技术支持
VUE_APP_TITLE = itter前后端分离部署
# 接口请求地址,会设置到 axios 的 baseURL 参数上
VUE_APP_API_ROOT = http://120.48.41.75:81
# 调试工具,可设置 eruda 或 vconsole,如果不需要开启则留空
VUE_APP_DEBUG_TOOL =
# 高德地图key
VUE_APP_MAP_KEY = f2200337d0d08538e78729572749882d
# 微信功能开关 开启设置 ON,关闭设置 OFF
VUE_APP_WX = OFF
[root@bd-manager tduck-front]#
(2)前端SLB部署:
①配置说明:
1、用户访问网站,首先会访问slb,slb会将流量分摊到各个web服务器,所以要起一个地址池
2、用户的流量要经过多层负载所以要加各种头部代码
3、slb配置:
[root@bd-slb1 conf.d]# cat tduck.conf
upstream tduck_front_pools {
server 192.168.0.10:80;
}
server {
listen 80;
server_name 120.48.15.242;
location / {
proxy_pass http://tduck_front_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
[root@bd-slb1 conf.d]#
(3)前端web端配置:
①配置说明:
1、负载均衡上的流量到来之后,会将流量区分
2、静态流量nginx就自己处理了,而动态流量就需要传递到后端处理
3、而后端接的设备是后端的负载均衡,所以往后扔的地址要写成后端的slb的地址
3、前端web配置:
[root@bd-web2 conf.d]# cat tduck.conf
server {
listen 80;
server_name 120.48.43.241;
location / {
# 静态文件地址
root /www/web/tduck;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /forget/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /account/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /common/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /user/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /captcha/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /login/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.9:81;
}
location /tduck-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 改为你后端接口地址 http://xxxx/tduck-api/
proxy_pass http://192.168.0.9:81/tduck-api/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
[root@bd-web2 conf.d]#
(4)后端4层slb的配置:
①说明:
1、为了区分端口,需要将4层流量的端口设置为别的端口,放置其他配置的占用同样的端口
2、4层负载需要将配置写在主配置文件中,而不是子配置文件中
3、后4层slb需要将地址指向后端服务器的地址,后端服务器很多所以需要扔到地址池
4、配置4层负载的时候需要先查询是否支持4层负载
[root@bd-slb2 nginx]# nginx -V |& grep stream
5、4层slb的配置:
[root@bd-slb2 nginx]# cat nginx.conf
user www www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream tduck_houduan_pools {
server 192.168.0.12:8999;
}
server {
listen 81;
proxy_pass tduck_houduan_pools;
}
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
[root@bd-slb2 nginx]#
(5)部署后端:
①配置jar包和yml:
1、将编译服务器上的文件传递到后端服务器:
[root@bd-manager ~]# rsync -azP application-prod.yml tduck-api.jar root2192.168.0.0.12:/server/tduck
2、配置各种服务的地址:
[root@bd-web4 tduck]# cat application-prod.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.5:3306/tduck?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&tinyInt1isBit=false
username: tduck
password: qW!tduck
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 15
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-test-query: SELECT 1 FROM DUAL
redis:
database: 0
host: 192.168.0.8
port: 6379
password:
mail:
host: smtp.163.com
username: test@163.com # 邮箱账号
password: DSXFPX24XOBURMDY #邮箱授权码
logging:
level:
com.tduck.cloud: debug
config: classpath:logback-spring.xml
# 请求日志是否打印
platform:
qq:
oauth:
appId:
secret:
oss:
ossType: 3 # 本地存储
endpoint:
accessKeyId:
accessKeySecret:
bucketName:
domain: http://localhost:8999/tduck-api/u/
upload-folder: /data/tduck/upload/
access-path-pattern: /u/** # 文件访问路径前缀 这里更改domain也需要更改
3、创建存储路径:
[root@bd-web4 tduck]# pwd
/server/tduck
[root@bd-web4 tduck]# mkdir -p /data/tduck/upload/
[root@bd-web4 tduck]
[root@bd-web4 tduck]# ll
-rw-r--r-- 1 root root 1954 Jun 9 11:53 application-prod.yml
-rw-r--r-- 1 root root 149999570 Jun 9 11:53 tduck-api.jar
[root@bd-web4 tduck]#
4、启动:{必须尽到存放yml和jar文件的目录才可以启动}
[root@bd-web4 tduck]# java -Dfile.encoding=UTF-8 -jar tduck-api.jar --spring.profiles.active=prod >/dev/null &
5、最后测试:{访问7层lsb的地址即可}
http://120.48.15.242/