奇文网盘官网项目地址:
官方部署教程: https://www.qiwenshare.com/essay/detail/169
官方教程不是很详细,实际搭建过程中发现有不少坑要踩,所以有了本文
准备阶段
一台运行内存至少1G的机器(一开始在512M机器上搭建,一直启动失败,排错很久才发现是内存不够,刚好1G的机器,内存也吃紧,需要有swap分区,这里搭建环境是1G 内存+1G swap交换空间)
下载奇文网盘项目的release里的源码,直接clone下来的代码缺一些文件
编译环境
JDK (这里为JDK8)
maven环境 (这里为3.8.1)
idea (非必须)
nodejs (这里14.17.0)
官方教程中提到的环境
开始
编译后端
用idea打开后端项目qiwen-file,可以看到项目结构如下,如果是git clone下来的代码,则没有file-common这个文件夹,也就无法按他官方的方法编译出release文件夹,所以需要下载release的源码包
打开file-web/src/main/resources/config,可以看到有3个SpringBoot的配置文件,从上到下,第一个为公共配置内容,第二个为开发环境配置内容,第三个即为生产环境配置内容
修改application.properties,加入一行server.address=localhost,之所以加这个是,如果不加这个,则SpringBoot的默认tomcat配置会监听0.0.0.0即所有ip的请求,因为后面用的是nginx进行转发,所以没有必要暴露接口到公网;修改spring.profiles.active值为prod即选择生产环境;端口看需求,自行选择是否更改,这里维持默认值。
打开application-prod.properties,修改里面的mysql连接信息,修改里面的mysql服务的ip,端口,用户名和密码,这里默认连接的是file数据库,可以修改为其他,但这里保持默认即可
上面properties配置修改完后,打开file-common/src/main/resource/conf/settings.xml,修改localRepository的值为你的maven本地仓库路径,这步很重要
编译生成release文件夹,打开终端在项目根路径下运行以下命令
1
mvn clean install -s file-common/src/main/resources/conf/settings.xml
等待编译完成,不出意外即可看到生成了release文件夹,目录结构如下
至此后端编译完成
前端编译
前端编译比较简单,在前端项目qiwen-file-web根路径运行以下命令,运行时如果提示需要"npm audit fix",则按提示运行一遍
npm audit fix
即可1
2
3npm install
npm run build编译完成后会生成一个dist文件夹
服务器部署(以ubuntu 20.04为例)
安装一些常用命令
1
2
3
4sudo apt update && sudo apt install git nginx curl wget unzip net-tools vim -y
# 启用nginx开机自启动
sudo systemctl enable nginx安装docker(非必须,这里使用docker,可以直接用docker拉取mysql和redis环境,省去配置的时间,mysql和redis都可以用apt安装配置)
1
curl -sSL https://get.daocloud.io/docker | sh
docker 拉取mysql镜像并启动
1
2
3# 这里密码需要根application-prod.properties里面的一致,127.0.0.1:3306:3306将本地3306转发至容器
# 不加127.0.0.1则外网也可访问数据库,不安全
docker run -itd --restart unless-stopped --name mysql -p 127.0.0.1:3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqldocker拉取redis镜像并启动
1
2# 同样只监听本地127.0.0.1即可,这里不设置密码,如果需要设置密码,则application.properties里相应的地方需要修改
docker run --restart unless-stopped -p 127.0.0.1:6379:6379 --name redis -d redis redis-server --appendonly yes安装mysql-client,连接mysql数据库,创建一个file数据库
1
2
3sudo apt install mysql-client -y
mysql -h 127.0.0.1 -u root -pmysql命令界面创建数据库,注意如果在application-prod.properties里面修改了默认连接的数据库的名称,则这里也要将file修改为相应的数据库名,否则如果数据库不存在,则启动会报错
1
create database file default character set utf8mb4 collate utf8mb4_general_ci;
创建好file数据库就可以退出mysql连接了
配置nginx,在/etc/nginx/conf.d/目录下新建一个.conf扩展名的文件,名字随意
1
vi /etc/nginx/conf.d/pan.conf
加入以下内容,注意修改域名"pan.iz4.cc"为你的域名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16server
{
listen 80;
server_name pan.iz4.cc;
index index.html index.htm index.php default.php default.htm default.html;
root /www/web;
location /api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080/;
}
}保存后重启nginx,使之生效
1
sudo service nginx restart
安装jdk
1
sudo apt install openjdk-8-jdk -y
配置环境变量JAVA_HOME和CLASSPATH
1
vi ~/.bashrc
最后面加入以下内容
1
2
3export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 替换为你的jdk安装目录
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar保存并运行
source ~/.bashrc
使之生效将后端编译生成的release和dist文件夹打包上传至服务器
将dist文件夹的内容拷贝到/www/web目录下(这里需要跟上面nginx配置里的root /www/web路径保持一致)前端部署完后,浏览器访问服务器域名会出现以下界面,但因为后端还没部署,api接口不生效,所以点击注册/登录会没有反应,开发者工具里面可以看到有xhr请求失败,接下来启动后端让前后端联动
因为奇文网盘上传文件默认保存路径为release/static/,因此需要release文件夹拷至服务器需要存放数据的硬盘的目录下,否则可能会占用系统硬盘空间,如果服务器只有一块硬盘则任意目录都可
运行release/bin/start.sh
1
bash start.sh
启动后,等待启动完成,运行以下命令,查看是否出现tcp 8080端口,若出现则后端正常启动了,如果没有,首先检查机器的内存是否足够,然后再检查配置是否有误
1
netstat -tnl
关闭服务
1
bash stop.sh
后端启动完成后,浏览器访问服务器域名或IP,可以发现首页内容更丰富了,而且可以点击注册会登录可以正常跳转页面,说明前后端都部署正常
如果后续需要修改properties配置,可以修改release/conf/config目录下的properties文件,而不用重新编译
实际使用中,上传文件可能还回出现以下保错 "413 Request Entity Too Large",这是nginx里面没有配置最大上传文件大小导致的,解决方法,编辑/etc/nginx/nginx.conf文件
vi /etc/nginx/nginx.conf
,找到http部分,在"{}"里面加入以下两句1
2
3
4
5
6# 根据需求自行修改大小
# 上传文件最大大小
client_max_body_size 10240M;
# nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中
client_body_buffer_size 8M;修改完,运行
sudo service nginx restart
,重启nginx使之生效奇文网盘里面也有设置最大上传文件大小的地方,默认为2048M,跟nginx的上传设置是互相独立的,如果在nginx里设置最大文件为10G,奇文网盘配置文件里设置为2G那么,最大上传还是只有2G,所以要两边同时修改
修改release/conf/config/application.properties,
vi release/conf/config/application.properties
,找到以下三个配置,将大小修改为你所需的大小即可1
2
3spring.servlet.multipart.max-file-size=10240MB
spring.servlet.multipart.max-request-size=10240MB
spring.servlet.multipart.enabled=true修改完运行release/bin/restart.sh,重启即可
bash release/bin/restart.sh
这样就可以上传大文件了
至此成功在服务器上搭建了奇文网盘