修改配置

image.png

  1. 修改数据库连接
    如果你使用的sqlite无需修改此项,如果你和我一样使用的MySQL数据库,需要将applicationsettings.json中的以下节点进行修改

ConnectionString修改为你自己对应的配置,如果你数据库数据已经进行了初始化,可将EnableInitDb设置为false,避免每次启动站点会去检查是否有修改数据库表结构。

"DbConnection": {
  "Connections": [
    {
      "ConfigId": 1,
      "DbType": "MySql", 
      "ConnectionString": "Server=127.0.0.1;User Id=root;Password=123456;Port=3306;Database=Easy.Admin;CharSet=utf8mb4;"
      "IsAutoCloseConnection": true,
      "EnableInitDb": true // 启用数据库以及数据表初始化(首次运行项目时开启可以自动创建数据库和初始化项目运行的基础数据)
    }
  ]
}
json
  1. 修改文件存储

如果你使用的了对象云存储(如:MinIO、腾讯对象云存储、阿里对象云存储等),需要修改此项配置,如果是将附件保存在站点目录中,则无需修改此项。

 "OssConnection": {
   "Enable": false, //是否启用对象存储(不启用将存储至站点目录)
   "Provider": "Minio", //OSS提供者;允许值:Minio/Aliyun/QCloud/Qiniu/HuaweiCloud/(Invalid:代表附件存储到当前站点下)
   "Endpoint": "192.168.1.123:9000", //节点
   "AccessKey": "test", //Key
   "SecretKey": "12324565", //秘钥
   //"Region": "ap-chengdu",//地域
   "IsEnableHttps": false, //是否启用HTTPS
   "IsEnableCache": true, //是否启用缓存(启用后将缓存签名URL,以减少请求次数)
   "Bucket": "oss", //默认存储根目录
   "Domain": "你的云对象存储域名或IP" //外网访问域名或IP
 }
json
  1. 修改博客登录授权

授权登录支持多种方式,本博客只实现了QQ授权登录,可根据自己需求进行扩展。

 "oauth": {
   "qq": {
     "app_id": "你的app_id",
     "app_key": "你的key",
     "redirect_uri": "https://你的域名/api/oauth/qq/callback",
     "scope": "get_user_info"
   },
   "redirect_uri": "https://www.你的域名" //授权成功后跳转地址
 }
json

发布API

image.png

image.png

image.png

image.png

上传文件到服务器

将发布后的publish整个文件夹上传至服务器

image.png
如果你需要修改API端口,请编辑publish目录下的Dockerfile文件

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

WORKDIR /app
# 容器暴露的端口
EXPOSE 8001
EXPOSE 443

COPY . .

#修改apt-get源,加速apt下载
RUN sed -i s@/deb.debian.org/@/mirrors.163.com/@g /etc/apt/sources.list.d/debian.sources
#RUN cat /etc/apt/sources.list
#安装fontconfig
RUN apt-get clean
RUN apt-get update && apt-get install -y fontconfig

# 设置时区
ENV TZ=Asia/Shanghai
# API端口
ENV ASPNETCORE_URLS 'http://*:8001'

ENTRYPOINT ["dotnet", "Easy.Admin.Web.Entry.dll"]
bash

将发布文件发布至服务器后,进入publish目录并生成Docker镜像

# 生成镜像
docker build -t blog.api .
# 命令解释 docker build -t 镜像名 .
bash

image.png

生成镜像成功后可通过命令查验

docker images
bash

image.png

启动容器

注意:下面命令端口需要和Dockerfile文件中的端口一致。

以下两种启动容器命令只需执行一种即可。

  1. 适用于使用了对象云存储
# 命令解释 docker run -d -p API端口:容器暴露的端口 --restart=always --name 容器名 镜像名或镜像Id 
docker run -d -p 8001:8001 --restart=always  --name blog.api blog.api
bash
  1. 适用于将附件上传至站点根目录

如果你没有使用对象云存储服务,需要将上传的附件wwwroot目录挂载到宿主(物理服务器),将以上命令修改为以下内容

# 命令解释 docker run -d -p API端口:容器暴露的端口 --restart=always -v 宿主挂载附件目录:容器内附件目录 --name 容器名 镜像名或镜像Id 
docker run -d -p 8001:8001 --restart=always -v /home/wwwroot:/app/wwwroot  --name blog.api blog.api
bash

命令中的/home/wwwroot目录将保存博客上传的图片或附件,你可以自定义此路径。
创建成功后可查看容器运行状态。

# 查看容器
docker ps -a
bash

image.png

验证

容器启动成功后,通过命令查看是否正常。

curl 127.0.0.1:8001/index.htnl
bash

执行效果如下图所示
image.png
你也可以通过IP+端口8001进行访问。

重新发布

后期修改代码后需要重新发布代码到服务器中,每次发布前需要删除现有的容器和镜像

# 删除容器
# 命令解释:docker rm -f 容器名或容器Id
docker rm -f blog.api

# 删除镜像
# 命令解释:docker rmi 镜像名或镜像Id
docker rmi blog.api
bash

自动部署

以下是Linux下的部署脚本,脚本执行前需要对脚本设置权限,比喻脚本名叫"blog.api.sh",请执行:chmod 777 blog.api.sh
使用此脚本需提前安装好Git工具

#!/bin/bash
# 判断文件夹是否存在
if [ -d "/home/code/" ];then
  echo "文件夹已经存在"
  cd /home/source
  echo "更新代码..."
  git pull
  else
   mkdir /home/code
  echo "拉取代码..."
# 将https://gitee.com/miss_you/easy-admin.git替换为你自己源代码地址
  git clone  https://gitee.com/miss_you/easy-admin.git /home/code/
fi

echo "获取当前容器是否存在"
containerps=$(docker ps -f name=easy.admin -q)
containerstop=$(docker ps -a -f name=easy.admin -q)
for alpha in "$containerps";do
    if [ "$alpha" == "" ];then
    echo "检查是否存在停止的容器"
        for alpha1 in "$containerstop";do
          if [ "$alpha1" == "" ];then
          echo "不存指定容器"
          else
          echo "存在停止了的 然后直接删除-----------开始------------------"
          docker rm $alpha1
          echo "存在停止了的 然后直接删除-----------完成------------------"
        fi
       done
    else
    echo "存在-停止运行 然后删除----------------------开始-----------------"
    docker stop $alpha
    docker rm $alpha
     echo "存在-停止运行 然后删除---------------------完成------------------"
    fi
done

echo "获取当前镜像是否存在-----------------------------------------------------------------"
dockerlist=$(docker images easy.admin:latest -q)
for alpha2 in "$dockerlist";do
  if [ "$alpha2" == "" ];then
     echo "不存在指定镜像-------------------------------------------------"
  else
       echo "存在当前指定的镜像 删除镜像--------------开始-----------------------------------"
      docker rmi $alpha2
     echo "存在当前指定的镜像 删除镜像--------------完成-----------------------------------"
  fi
done


cd /home/code/src/backend/

echo "--------生成镜像----------"
docker build -t easy.admin .

# 以下命令根据自身情况执行一种即可
echo --------------挂载配置文件以及上传目录以及日志目录----------------
# 第一种:使用了对象云存储,如果MinIO或者腾讯、阿里对象云存储等
docker run -d -p 8066:8066 --restart=always --name easy.admin easy.admin

# 第二种:附件保存在站点目录下(将容器的附件目录挂载到宿主/home/wwwroot目录中,此目录需要自行创建)
docker run -d -p 8066:8066 -v /home/wwwroot:/app/wwwroot --restart=always --name easy.admin easy.admin
bash