本文最后更新于 2024-05-09,

若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。

本站只有Telegram群组为唯一交流群组, 点击加入

文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请

项目展示

1715219866745.webp
1715219871942.webp

轻量版后端: https://github.com/zhouyqxy/aurora_Lite

服务器要求

下面的建议不包含minio的内存占用,如需使用minio,请参考文章末尾

核心数和内存大小有两种方案:
2核4G(使用ES搜索策略)
2核2G(使用MySQL搜素策略)
带宽大小有两种方案:(目前此博客使用的是2C 2G 3M)
使用oss对带宽没有要求(本人亲测:1M带宽+oss 访问速度很快)
使用minio需要大一点的带宽(小带宽也可以,但需要使用cdn加速)

安装Docker

详阅 Docker的安装使用

安装mysql

通过数据卷挂载的方式运行容器,将容器内的部分重要文件映射到宿主机上。直接操作宿主机对应的映射文件就能和容器内作同步,方便操作的同时还能保证容器内的数据在宿主机上有一个备份。

下面的命令分别对mysql的日志文件、配置文件、数据文件进行了映射,你也可以自己修改。

docker run --name mysql --restart=always -p 3306:3306 -v /mnt/aurora/mysql/log:/var/log/mysql -v /mnt/aurora/mysql/data:/var/lib/mysql -v /mnt/aurora/mysql/conf:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=123456 -d mysql

安装redis

下载Redis镜像

docker pull redis

设置redis数据库密码并运行redis服务

(这里我在教程中设置的密码是123456)大家按照自己的习惯修改

docker run --name redis  --restart=always -p 6379:6379 -d redis --requirepass "123456"

安装rabbitmq

下载RabbitMQ镜像

docker pull rabbitmq:management

启动RabbitMQ,默认guest用户,密码也是guest。

docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672  -d  rabbitmq:management

这里我设置RabbitMQ的账号为admin,密码设置为123456(大家自行更改)。

docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456  -d  rabbitmq:management

安装elasticsearch

docker pull elasticsearch:7.9.2
mkdir -p  /home/elasticsearch/data/
mkdir -p  /home/elasticsearch/config/

编写配置文件

echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml

修改文件夹权限

chmod -R 777 /home/elasticsearch/

启动elasticseach镜像

docker run --name elasticsearch -p 9200:9200
-p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
-v /home/elasticsearch/config/elasticsearch.yml:/usr/shellare/elasticsearch/config/elasticsearch.yml
-v /home/elasticsearch/data:/usr/shellare/elasticsearch/data
-v /home/elasticsearch/plugins:/usr/shellare/elasticsearch/plugins
-d elasticsearch:7.9.2

接下来我们就是拿浏览器访问啦。

在浏览器上输入:服务器IP地址:9200

(假设你的服务器公网ip是123.123.123.123则访问路径为:123.123.123.123:9200)

可能出现的问题:

  • 防火墙相关(我用的云服务器,没有测试,如果有问题,还是需要大家自行去百度||谷歌一下)。
  • -e ES_JAVA_OPTS="-Xms64m -Xmx128m":配置内存大小出现了问题。
  • 可能是配置文件中出现了问题。
echo 'http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml

http.host: 0.0.0.0 在冒号后面有一个空格的,这里的配置文件是yml格式,所以一定要严格按照yml格式来书写。

安装ik分词器

进入已经启动成功的elasticsearch容器。

docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.2/elasticsearch-analysis-ik-7.9.2.zip

ps: 安装的ik分词器的版本一定要与elasticsearch的版本保持一致

下载过程中如果遇到选择,直接输入 y回车就可以了。

下载完成之后,退出去,重新启动elasticsearch容器。

docker restart elasticsearch

测试ik分词器是否安装成功

安装完成后,我们再来进行测试遍,看看有什么样的变化。

postman post请求分词测试:http://服务器IP地址:9200/_analyze

{
	"tokenizer":"ik_smart",
	"text":"我爱技术"
}

结果

{
    "tokens": [
        {
            "token": "我",
            "start_offset": 0,
            "end_offset": 1,
            "type": "CN_CHAR",
            "position": 0
        },
        {
            "token": "爱",
            "start_offset": 1,
            "end_offset": 2,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "技术",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 2
        }
    ]
}

安装MaxWell

下载MaxWell镜像

docker pull zendesk/maxwell

运行MaxWell

docker run --name maxwell --restart=always  -d  zendesk/maxwell bin/maxwell  --user='数据库用户名' --password='数据库密码'  --host='IP地址'  --producer=rabbitmq --rabbitmq_user='MQ用户名' --rabbitmq_pass='MQ密码' --rabbitmq_host='IP地址' --rabbitmq_port='5672' --rabbitmq_exchange='maxwell_exchange'  --rabbitmq_exchange_type='fanout' --rabbitmq_exchange_durable='true' --filter='exclude: *.*, include: aurora.t_article.article_title = *, include: aurora.t_article.article_content = *, include: aurora.t_article.is_delete = *, include: aurora.t_article.status = *'

演示(假设你的服务器公网ip是123.123.123.123)

docker run --name maxwell --restart=always  -d  zendesk/maxwell bin/maxwell  --user='root' --password='123456'  --host='123.123.123.123'  --producer=rabbitmq --rabbitmq_user='guest' --rabbitmq_pass='guest' --rabbitmq_host='123.123.123.123' --rabbitmq_port='5672' --rabbitmq_exchange='maxwell_exchange'  --rabbitmq_exchange_type='fanout' --rabbitmq_exchange_durable='true' --filter='exclude: *.*, include: aurora.t_article.article_title = *, include: aurora.t_article.article_content = *, include: aurora.t_article.is_delete = *, include: aurora.t_article.status = *'

注意:上述命令中aurora为数据库名称。

填写aurora-springboot中的yml文件

此处省略,操作比较简单,就是配置一些简单的ip+端口+用户名+密码,前提是服务器上对应的端口已经打开

打包运行后端项目

  • 使用idea右侧Maven的package命令

  • 在服务器的/usr/local/下面创建名为docker的文件夹

  • 将打包好的jar包传到服务器上面的/usr/local/docker下面

  • /usr/local/docker路径下使用vim Dockerfile编写Dockerfile

    FROM openjdk:8
    VOLUME /tmp
    ADD aurora-springboot-0.0.1.jar blog.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/blog.jar"]
    

    注意:Dockerfile文件只需要上传到指定目录下即可,不需要手动执行其他操作。

编写aurora-start.sh,同时将编写好的aurora-start.sh上传到服务器的/usr/local/docker下面

SOURCE_PATH=/usr/local/aurora-springboot
SERVER_NAME=aurora-springboot-0.0.1.jar
TAG=latest
SERVER_PORT=8080
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
if [ -n "$CID" ]; then
  echo "存在容器$SERVER_NAME,CID-$CID"
  docker stop $CID
  echo "成功停止容器$SERVER_NAME,CID-$CID"
  docker rm $CID
  echo "成功删除容器$SERVER_NAME,CID-$CID"
fi
if [ -n "$IID" ]; then
  echo "存在镜像$SERVER_NAME:$TAG,IID=$IID"
  docker rmi $IID
  echo "成功删除镜像$SERVER_NAME:$TAG,IID=$IID"
fi
echo "开始构建镜像$SERVER_NAME:$TAG"
cd $SOURCE_PATH
docker build -t $SERVER_NAME:$TAG .
echo "成功构建镜像$SERVER_NAME:$TAG"
docker run --restart=always --name aurora-springboot-0.0.1.jar -d -p 8080:8080 aurora-springboot-0.0.1.jar:latest
echo "成功创建并运行容器$SERVER_NAME"


注意事项:sh文件需要用notepad++转为Unix格式

具体操作:点开notepad++中的编辑 ---> 文档格式转换 --->转为Unix

cd到/usr/local/docker下面 ,执行如下命令打包docker镜像文件

sh aurora-start.sh

启动容器

docker run  --name aurora-springboot-0.0.1.jar -d -p 8080:8080 aurora-springboot-0.0.1.jar:latest

最好的操作是在服务器的/usr/local/docker目录下直接运行指令

sh aurora-start.sh

这样后端项目就可以在服务器上跑起来了
访问测试(浏览器上访问)
ip:8080

演示(假设你的服务器公网ip是123.123.123.123

1715220310705.webp

打包运行前端项目

aurora-blog项目中,更改src/config/config.ts

其中天域验证码和QQ互联还有其他信息在沈自在的博客部署视频中都有提到

  captcha: {
    TENCENT_CAPTCHA: '你自己的天御验证码'
  },
  qqLogin: {
    QQ_APP_ID: '你自己的APP_ID',
    QQ_REDIRECT_URI: 'https://你的前台域名/oauth/login/qq'
  },

aurora-blog项目中,更改public/index.html

<script
      src="http://connect.qq.com/qc_jssdk.js"
      data-appid="你自己的APP_ID"
      data-redirecturi="https://你的前台域名/oauth/login/qq"></script>

假设我的前台想让别人访问的前台域名为poiblog.com

<script
      src="http://connect.qq.com/qc_jssdk.js"
      data-appid="你自己的APP_ID"
      data-redirecturi="https://poiblog.com/oauth/login/qq"></script>

如果你的网站没有打算使用https(解释:是否购买了域名并备案和申请颁发了SSL证书)

aurora-blog/public/index.html和aurora-admin/public/index.html中下面这一行代码给注释掉(没有备案则执行)

分别到aurora-blog和aurora-admin下面执行如下命令 (推荐关闭vscode的Eslint,本项目没有遵循Eslint的规范) 如果下列命令执行报错,可以尝试替换版本 参考版本:npm版本为:8.3.1 vue-cli的版本为:5.0.6

vue项目安装依赖

npm install

vue项目打包

npm run build

运行完成后在项目的主目录下会生成一个dist文件夹,这个dist文件夹就是打包好的项目
在服务器的/usr/local/下面创建名为vue的文件夹,
将打包好的前台代码重命名为blog, 并传输到服务器的/usr/local/vue下面
将打包好的后台代码重命名为admin, 并传输到服务器的/usr/local/vue下面

安装并启动nginx

拉取nginx镜像

docker pull nginx

/usr/local/nginx下创建nginx.conf文件,格式如下

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    client_max_body_size     50m;
    client_body_buffer_size  10m; 	  
    client_header_timeout    1m;
    client_body_timeout      1m;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;

server {

        listen  443 ssl;
        #演示
        #server_name  www.poiblog.com;
        server_name  前台域名;

        ssl on;
        #演示:这里将证书文件压缩包中的.pem和.key后缀结尾的文件在服务器的/usr/local/nginx/下
        #ssl_certificate /usr/local/nginx/www.poiblog.com_bundle.pem; 
	 #ssl_certificate_key /usr/local/nginx/www.poiblog.com.key; 

        ssl_certificate ssl证书文件位置; 
        ssl_certificate_key ssl文件位置; 
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

       location / {
            root   /usr/local/vue/blog;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        location ^~ /api/ {
	    #这里假设服务器ip为:123.123.123.123
           #proxy_pass http://123.123.123.123:8080/;
            proxy_pass http://服务器ip:8080/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    }

server {

        listen  443 ssl;
        #演示
        #server_name  admin.poiblog.com;
        server_name 后台域名;

        ssl on;
        #演示:这里将证书文件压缩包中的.pem和.key后缀结尾的文件在服务器的/usr/local/nginx/下
        #ssl_certificate /usr/local/nginx/admin.poiblog.com_bundle.pem; 
	 #ssl_certificate_key /usr/local/nginx/admin.poiblog.com.key; 
	 
        ssl_certificate ssl证书文件位置; 
        ssl_certificate_key ssl文件位置; 
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

       location / {
            root   /usr/local/vue/admin;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        location ^~ /api/ {
	    #这里假设服务器ip为:123.123.123.123
           #proxy_pass http://123.123.123.123:8080/;
            proxy_pass http://服务器ip:8080/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    }



server {
        listen       80;
        # 演示:server_name  www.poiblog.com;
        server_name  前台域名;
        rewrite ^(.*)$	https://$host$1	permanent;

    }

server {
        listen       80;
        # 演示:server_name  admin.poiblog.com;
        server_name  后台域名;
        rewrite ^(.*)$	https://$host$1	permanent;

    }
}

启动nginx

docker run --name nginx --restart=always -p 80:80 -d -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/vue:/usr/local/vue nginx

本地部署yml,Minio版(舍弃es)

server:
  port: 8080

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/aurora?serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: root
    password: 123456
    hikari:
      minimum-idle: 10
      idle-timeout: 180000
      maximum-pool-size: 100
      auto-commit: true
      pool-name: MyHikariCP
      max-lifetime: 60000
      connection-timeout: 30000
      connection-test-query: SELECT 1

  redis:
    host: 127.0.0.1
    port: 6379
    #本地未设置过的则可不填
#    password: redis密码 
    database: 1
    lettuce:
      pool:
        min-idle: 10
        max-idle: 100
        max-active: 100
        max-wait: 10000

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    listener:
      simple:
        retry:
          enabled: true
          max-attempts: 3
          initial-interval: 3000

  elasticsearch:
    rest:
      uris: 127.0.0.1:9200

  mail:
    host: smtp.163.com
    username: 邮箱
    password: 密码
    default-encoding: UTF-8
    protocol: smtp
    port: 465
    properties:
      mail:
        smtp:
          auth: true
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
            port: 465
          ssl:
            enable: true
          starttls:
            enable: true
            required: true

  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

search:
#  mode: elasticsearch
  mode: mysql

upload:
#  mode: oss
  mode: minio
 oss:
    url: http://Bucket域名/
    endpoint: OSS配置endpoint
    accessKeyId: OSS配置accessKeyId
    accessKeySecret: OSS配置accessKeySecret
    bucketName: OSS配置bucketName
  minio:
  #url二选一
    #url: http://minio的ip:9000/  #服务器
    #url: http://minio的ip:9000/桶的名称/ #本地
    url: http://localhost:9000/桶的名称/
    endpoint: http://localhost:9000/
    accesskey: 用户名
    secretKey: 密码
    bucketName: 桶的名称

website:
#这里我是根据vscode运行的前端项目,在控制台得知项目前台地址为http://localhost:8081/
  url: http://localhost:8081/

qq:
  app-id: QQ互联 APPID
  check-token-url: https://graph.qq.com/oauth2.0/me?access_token={access_token}
  user-info-url: https://graph.qq.com/user/get_user_info?openid={openid}&access_token={access_token}&oauth_consumer_key={oauth_consumer_key}


服务器配置minio

需要准备一台云服务器

1、启动 Minio 容器下载 Docker 命令:

docker run -d -p 9000:9000 -p 9001:9001 --name minio --restart=always -e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=123456" -v /minio/data:/data -v /minio/config:/root/.minio -v /etc/localtime:/etc/localtime minio/minio server /data --console-address ":9001"

解释说明:

MINIO_ROOT_USER=minio 代表 MINIO 控制台账号是 minio; MINIO_ROOT_PASSWORD=123456 代表 MINIO 控制台密码是 123456;这个密码必须大于8个数不然报错 /minio/data:/data 代表将容器 /data 目录挂载至本地 /minio/data; /minio/data:/data 代表将容器 /root/.minio 目录挂载至本地 /minio/config; /etc/localtime:/etc/localtime 代表将容器时间配置成服务器时间; -p 9000:9000 -p 9001:9001 代表容器开放 9000 和 9001, 其中 9001 为 MINIO 控制台访问端口, 9000 为存储桶S3调用端口.

2.端口开放需要防火墙开通9000端口和9001端口3、创建和配置Minio存储桶

3、浏览器输入: IP:9001 登录 MINIO 控制台2、创建存储桶.

3、设置 Minio 存储桶共有读、私有写权限

4、创建 Minio Access Key

5.minio要设置成public

6、配置Nginx 路由转发

配置Nginx配置文件

有域名的 其中 minio.poiblog.com 为自配二级域名,这个不限制

server {
  listen 80;
  server_name minio.poiblog.com;
  location / {
      proxy_pass http://IP地址:9000/创建的bucket名称/;
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  }
}