# 项目部署

# 服务器购买和配置

我们可以前往华为云 (opens new window)腾讯云 (opens new window)、阿里云和百度云等云平台购买服务器。这里以购买华为云服务器为例,操作步骤如下:

  1. 点击此处 (opens new window)前往华为云产品折扣页面购买活动产品,如果没有华为云账号需要先进行注册和实名认证。

注:预算有限的同学可以选择腾讯云 (opens new window),具体操作差不多,算是目前优惠力度最大的云平台。

  1. 选好想要购买的云服务器后,点击立即购买,更换系统镜像为 CentOS,其它规格配置默认即可,如下所示:

  1. 进入华为云控制台 (opens new window),点击我的资源中的弹性云服务器,进入云服务器列表,如下所示:

  1. 安全组规则配置,放行 80 端口,如下所示:

  1. 重置远程登录密码,如下所示:

  1. 重置远程登录密码后,开始远程登录,如下所示:

  1. 登录成功后的界面如下所示:

# 域名购买和配置

为了学习更多的云平台,这次选择在腾讯云 (opens new window)进行域名购买和配置,其它云平台的操作也都差不多,具体步骤如下:

  1. 进入腾讯云 (opens new window),搜索域名注册,购买你想要注册的域名:

  1. 进入到腾讯云的域名控制台 (opens new window),划动到页面底部,点击解析按钮:

  1. 点击左上角添加记录按钮,添加前台门户网站(book.xxyopen.com)和后端接口(api.book.xxyopen.com)的域名解析记录(服务器公网IP可在华为云控制台的服务器列表获取):

# Docker 安装

  1. 下载并运行 Docker 一键安装脚本
curl -sSL https://get.daocloud.io/docker | sh
  1. 启动 Docker 服务
systemctl start docker
  1. 查看 Docker 版本
docker -v

# MySQL 安装和配置

  1. Docker 方式安装 MySQL8.0
docker run -itd --name mysql8.0 --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
  1. 上传 SQL 脚本文件novel_data.sqlnovel_struc.sql到服务器

  1. 导入 SQL 脚本文件到 MySQL 容器
docker cp novel_data.sql mysql8.0:/tmp/
docker cp novel_struc.sql mysql8.0:/tmp/
  1. 登入到 MySQL 容器内的 MySQL 服务
docker exec -it mysql8.0 mysql -uroot -p123456
  1. 创建数据库
create database novel default character set utf8mb4;
use novel;
  1. 执行 SQL 文件
source /tmp/novel_struc.sql
source /tmp/novel_data.sql
  1. 根据需要创建其它远程访问账号或修改 root 账号的远程访问权限

  2. 退出 MySQL 容器

exit;

# Redis 安装和配置

  1. Docker 方式安装最新版 Redis
docker run -d --name redis8.0 --restart=always -p 6379:6379 redis --requirepass "123456" 
  1. 根据需要开启 Redis 的远程访问权限

# JDK 安装和配置

yum 安装 JDK 17

yum install java-17-openjdk.x86_64 -y

# 后端服务部署

  1. 下载后端项目源码

  2. 修改 application.ymlredisson.yml 文件中的 MySQL 配置和 Redis 配置

  3. 修改 application.yml 文件中的跨域配置

  4. 项目根目录下运行mvn clean package -Dmaven.test.skip命令打包

  5. 上传打包后的 jar 文件到服务器

  6. nohup java -jar novel-<版本号>.jar & 命令启动后端服务 nohup 介绍 (opens new window)

# Nginx 安装和配置

  1. 启动一个最新版 Nginx 的 Docker 临时容器
docker run -d --name nginx nginx

其中,Nginx 运行在 Docker 容器中对应的目录如下:

  • 配置文件目录:/etc/nginx
  • 日志目录:/var/log/nginx
  • 项目根目录:/usr/share/nginx/html
  1. 复制 Nginx 的配置文件到宿主机中
mkdir nginx
cd nginx
mkdir conf
cd conf
docker cp nginx:/etc/nginx ./
cd ..
mkdir html
mkdir log
  1. 配置后端服务的反向代理
vim conf/nginx/conf.d/novel.conf
# server {
#    listen       80;
#    server_name  book.xxyopen.com;
    
#    location / {
#       root /www/novel;
#       index index.html index.htm;
#   }
# }

server {
    listen       80;
    server_name  api.book.xxyopen.com;
    
    location / {
        proxy_set_header   Host             $host;
#       proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_pass   http://192.168.0.58:8888; # 不能使用 127.0.0.1,要使用宿主机 IP
    }
}
  1. 停止之前启动的临时容器,并删除
docker stop nginx
docker rm nginx
  1. 启动新的 Nginx 容器
docker run -d -p 80:80 -p 443:443 --name nginx --restart=always -e TZ="Asia/Shanghai" -v /root/nginx/html:/usr/share/nginx/html:ro -v /root/nginx/conf/nginx:/etc/nginx/:ro -v /root/nginx/log:/var/log/nginx nginx

其中,

  • :ro:表示容器内部的 nginx 文件是只读的,想要修改配置内容,只能修改宿主机的 conf 文件夹。这样带来的好处是安全性更高
  • -e TZ="Asia/Shanghai":表示把时区设置为中国的时区
  1. 如果出现问题,查看错误日志
tail -f log/error.log

# 前端网站部署

  1. 下载前端项目源码

  2. 修改 .env.production 中的生产环境配置

  3. 项目根目录下运行 yarn build 命令构建

  4. 上传dist文件夹中的内容到到服务器/root/nginx/html目录中

上次更新: a year ago