生产打包与发布

RDS购买与配置

  • RDS需要配置白名单才能访问,学习用的话,就配置0.0.0.0/0,全开
  • 注意内网连接和外网连接

ECS购买与配置

注意购买的区域要和RDS在同一区域(北京、上海等,可用区A B C等可以不一样),这样可以通过内网访问。如果不是同一个区域,则通过外网访问

配置IDEA连接ECS

实现文件传输和命令行窗口

打开IDEA,点击Tools,点击Deployment,打开Browse Remote Host,连接远程服务器。

打开Configuration,打开配置选项,增加SFTP配置。


JDK的安装与配置

进入IDEA,打开Tools,点击Start SSH Session

开启后来到窗口安装JDK。

上传JDK,解压tar -zxvf jdk-8u202-linux-x64.tar.gz

解压后重命名为:JDK1.8。

配置环境变量
来到根目录etc,找到profile文件,在最后面增加三行。

1
2
3
4
5
6
7
# gedit /etc/profile
在最后添加下面代码:

export JAVA_HOME=/root/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使配置生效的命令

1
source /etc/profile

校验配置是否生效java -version

后端Java项目发布

SpringBoot多环境打包
新增生产环境配置文件:application-prod.properties,IDEA在启动的时候可以指定prod。
-Dspring.profiles.active=prod

prom.xml设置打包后的jar命名。

1
2
3
<build>
<finalName>/dist/${artifactId}</finalName>
</build>

点击install打包,如果打包失败,需要把测试单元的数据注释。

original是不包含第三方依赖,只有自己的代码。

新建文件,做多一层映射。

上传文件,点击upload here 就可以。

进入/root 目录,输入java -jar wiki/wiki.jar 运行的是测试环境,如果想切换到生产。可以使用
java -jar -Dspring.profiles.active=prod wiki/wiki.jar

一键启动脚本
使用nohup可以让程序以后台的形式执行,否则单纯的用java命令启动,控台一关闭,程序就关闭了

deploy.sh,注意是在windows下编写的,和linux的换行有区别,需要转换下。放在任意目录下都没可以,它是从根目录下找wiki。

deploy.sh 脚本用于启动wiki.jar 项目。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
echo "publish----------"

process_id=`ps -ef | grep wiki.jar | grep -v grep |awk '{print $2}'`
if [ $process_id ] ; then
sudo kill -9 $process_id
fi

source /etc/profile
nohup java -jar -Dspring.profiles.active=prod ~/wiki/wiki.jar > /dev/null 2>&1 &

echo "end publish"

vim deploy.sh 按shirt打: 输入set ff=unix按回车,转换成linux的换行。
输入:wq保存并退出。

执行脚本:sh deploy.sh 就不会错了。

ps -ef | prep java 查看正在执行的java相关的进程。

nginx安装与配置

安装nginx:yum install nginx
启动nginx:service nginx start/stop
修改/etc/nginx/nginx.conf,将启动用户从nginx变成root,否则会有权限问题

查看是否成功,curl http://8.136.214.129

前端Vue项目发布

编译后的静态文件在dist文件夹下面

web.conf

1
2
3
4
5
6
7
8
9
10
11
server{
listen 80;
server_name wiki.zikaols.com;

location / {
alias /root/web/;
index index.html;
try_files $uri $uri/ /index.html;
}

}

自定义的nginx配置可以放到这个目录下:/etc/nginx/conf.d/*.conf,必须以.conf结尾,nginx会自动识别。

域名准备

  • 只要是买国内的ECS,都需要备案。备案按提示来不复杂。否则可以考虑用香港服务器,或用IP访问而不用域名。
  • 多个项目可以用二级域名区分开,生产正式项目还是推荐一个项目一个域名。

nginx配置域名

网站域名配置

web.conf

1
2
3
4
5
6
7
8
9
10
11
server{
listen 80;
server_name wiki.zikaols.com;

location / {
alias /root/web/;
index index.html;
try_files $uri $uri/ /index.html;
}

}

nginx配置刷新:nginx -s reload

服务端域名配置

反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server{
listen 80;
# server_name 8.133.184.84;
server_name wiki-server.zikaols.com;

location / {
proxy_pass http://localhost:8880;

# 针对websocket,需要增加下面的配置
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 代理时长设置600秒,默认60秒,websocket超时会自动断开
proxy_read_timeout 600s;
}

}

解决前后端交互Long类型精度丢失的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.javami.wiki.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
* 统一注解,解决前后端交互Long类型精度丢失的问题
*/
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}