前言
用了几学习了尚硅谷的通用权限系统,考虑到和我毕设契合度非常高。于是为了测试部署的可行性,对该项目进行了线上部署,之前阿里云ECS的活动领取了几个月的服务器,正好可以进行本线的部署,阿里云活动的地址。如果部署了后面的服务,但无法访问,需要在服务器控制台开启相应的端口
高校计划-免费学生云服务器
安装Docker
项目部署使用的是docker工具进行操作,我们需要安装的是docker本体和docker-compose工具。在不同平台有不同的安装方法,这里提供了最方便的安装方法,我们采用的是安装脚本进行安装。如果需要网页显示docker可以安装之前文章提到的Portainer
Docekr安装
1 2 3 4
| curl -sSL https://get.daocloud.io/docker | sh
其他脚本 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
Docekr-compose安装
之前我写过安装教程,可以参考下面的文章来进行相关的操作
安装数据库环境
特别注意,在线上环境需要设置复杂密码以及设置只能内网访问等,相关的操作可以自行查阅
mysql环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # docker 中下载 mysql docker pull mysql
#启动 docker run
#进入容器 docker exec -it mysql bash
#登录mysql mysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lzslov123!';
#添加远程登录用户 CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
|
redis环境
1
| docker run -itd --name redis-test -p 6379:6379 redis
|
nginx环境
这个项目nginx并没有安装到docker里,如果需要安装到docker中可以自行查阅相关的资料。这里我用的是debian系统,如果是用的centos系统需要将命令进行替换
1 2 3 4 5
| sudo apt update
sudo apt install nginx
sudo systemctl status nginx
|
配置文件
docker的默认配置文件在/etc/nginx/nginx.conf文件中,本项目的配置可以参考如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
events { worker_connections 768; }
http {
sendfile on; tcp_nopush on; types_hash_max_size 2048;
server { listen 8080; server_name localhost; location / { root /home/www/; # /www 就是刚刚创建的目录 index index.html index.htm; }
location /prod-api/ { proxy_pass http://example.com/;
proxy_set_header Host $http_host;
proxy_cookie_path /prod-api /;
proxy_cookie_domain localhost:18080 localhost; } }
include /etc/nginx/mime.types; default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
gzip on; javascript;
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
|
nginx常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
# sudo systemctl disable nginx
|
后端打包
后端打包需要在maven中设置打包方式并且需要配置打包插件,打包之前需要设置相关的数据库、端口设置。打包之后将jar文件复制到服务器中,在jar文件的同级目录需要创建Dockerfile文件。
打包maven配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
|
Dockerfile文件
1 2 3 4 5 6 7
| FROM ascdc/jdk8:latest VOLUME /tmp ADD app.jar /app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="-Xmx512M -Xms256M -Xss256k -Duser.timezone=Asia/Shanghai" ENV APP_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]
|
运行后端
1 2 3 4 5
| // 这里注意不要少了“.” docker build -t hello .
// 第一个端口是对外端口,第二个端口是对内端口,hello是镜像的名字 docker run -p 8800:8800 -t hello
|
时区问题
如果项目的yml文件没有配置时区,在提交记录的时候,可能会出现时区的问题。这里有两种解决方法,可以在yml中指定mysql时区,可以在mysql中进行修改
mysql修改
1 2 3 4 5 6 7 8
| set global ;
set time_zone ;
flush privileges;
|
yml修改
1 2 3 4 5 6
| spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db-demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8 username: password:
|
前端修改
前端跨域相关的配置在vue.config.js文件中,需要指定后端的路径,是否跨域等配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| module.exports = { devServer: { port: port, open: true, overlay: { warnings: false, errors: true }, // before: require('./mock/mock-server.js') proxy: { '/dev-api': { // 匹配所有以 '/dev-api'开头的请求路径 target: 'http://localhost:8800/', changeOrigin: true, // 支持跨域 pathRewrite: { // 重写路径: 去掉路径中开头的'/dev-api' '^/dev-api': '' } }, '/prod-api': { // 这里写你的后端地址 target: 'http://example.com', changeOrigin: true, // 支持跨域 pathRewrite: { // 重写路径: 去掉路径中开头的'/dev-api' '^/prod-api': '' } } } } }
|
vecel修改
首先需要本地安装vercel,执行“vercel -v”有结果就说明安装成功,并且登录自己的账号,创建一个后缀为json的配置文件。文件中填写如下内容。最后进行推送即可完成相关设置
1 2 3 4 5 6
| { "version": 2, "routes": [ {"src": "/(.*)","dest": "http://example.com/$1"} ] }
|
安装vercel
登录
推送