0%

搭建奇文网盘

奇文网盘官网项目地址:

准备阶段

  • 一台运行内存至少1G的机器(一开始在512M机器上搭建,一直启动失败,排错很久才发现是内存不够,刚好1G的机器,内存也吃紧,需要有swap分区,这里搭建环境是1G 内存+1G swap交换空间)

  • 下载奇文网盘项目的release里的源码,直接clone下来的代码缺一些文件

    后端release源码

    前端release源码

  • 编译环境

    • JDK (这里为JDK8)

    • maven环境 (这里为3.8.1)

    • idea (非必须)

    • nodejs (这里14.17.0)

  • 官方教程中提到的环境

    image-20210716111415582

开始

编译后端

  • 用idea打开后端项目qiwen-file,可以看到项目结构如下,如果是git clone下来的代码,则没有file-common这个文件夹,也就无法按他官方的方法编译出release文件夹,所以需要下载release的源码包

    image-20210716104349853

  • 打开file-web/src/main/resources/config,可以看到有3个SpringBoot的配置文件,从上到下,第一个为公共配置内容,第二个为开发环境配置内容,第三个即为生产环境配置内容

    image-20210716104555673

  • 修改application.properties,加入一行server.address=localhost,之所以加这个是,如果不加这个,则SpringBoot的默认tomcat配置会监听0.0.0.0即所有ip的请求,因为后面用的是nginx进行转发,所以没有必要暴露接口到公网;修改spring.profiles.active值为prod即选择生产环境;端口看需求,自行选择是否更改,这里维持默认值。

    image-20210716104830244

  • 打开application-prod.properties,修改里面的mysql连接信息,修改里面的mysql服务的ip,端口,用户名和密码,这里默认连接的是file数据库,可以修改为其他,但这里保持默认即可

    image-20210716105359.png

  • 上面properties配置修改完后,打开file-common/src/main/resource/conf/settings.xml,修改localRepository的值为你的maven本地仓库路径,这步很重要

    image-20210716110048.png

  • 编译生成release文件夹,打开终端在项目根路径下运行以下命令

    1
    mvn clean install -s file-common/src/main/resources/conf/settings.xml
  • 等待编译完成,不出意外即可看到生成了release文件夹,目录结构如下

    image-20210716110615353

  • 至此后端编译完成

前端编译

  • 前端编译比较简单,在前端项目qiwen-file-web根路径运行以下命令,运行时如果提示需要"npm audit fix",则按提示运行一遍npm audit fix即可

    1
    2
    3
    npm install

    npm run build
  • 编译完成后会生成一个dist文件夹

    image-20210716111828276

服务器部署(以ubuntu 20.04为例)

  • 安装一些常用命令

    1
    2
    3
    4
    sudo 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 mysql
  • docker拉取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
    3
    sudo apt install mysql-client -y

    mysql -h 127.0.0.1 -u root -p
  • mysql命令界面创建数据库,注意如果在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
    16
    server
    {
    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
    3
    export 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请求失败,接下来启动后端让前后端联动

    image-20210717095004070

  • 因为奇文网盘上传文件默认保存路径为release/static/,因此需要release文件夹拷至服务器需要存放数据的硬盘的目录下,否则可能会占用系统硬盘空间,如果服务器只有一块硬盘则任意目录都可

  • 运行release/bin/start.sh

    1
    bash start.sh
  • 启动后,等待启动完成,运行以下命令,查看是否出现tcp 8080端口,若出现则后端正常启动了,如果没有,首先检查机器的内存是否足够,然后再检查配置是否有误

    1
    netstat -tnl 

    image-20210717100000335

  • 关闭服务

    1
    bash stop.sh
  • 后端启动完成后,浏览器访问服务器域名或IP,可以发现首页内容更丰富了,而且可以点击注册会登录可以正常跳转页面,说明前后端都部署正常

    image-20210717100303482

    image-20210717100440345

  • 如果后续需要修改properties配置,可以修改release/conf/config目录下的properties文件,而不用重新编译

  • 实际使用中,上传文件可能还回出现以下保错 "413 Request Entity Too Large",这是nginx里面没有配置最大上传文件大小导致的,解决方法,编辑/etc/nginx/nginx.conf文件vi /etc/nginx/nginx.conf,找到http部分,在"{}"里面加入以下两句

    image-20210717100939284

    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
    3
    spring.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

  • 这样就可以上传大文件了

  • 至此成功在服务器上搭建了奇文网盘