美文网首页
通过Docker部署OpenAuth.Core(一)

通过Docker部署OpenAuth.Core(一)

作者: Rakutens | 来源:发表于2020-03-17 13:16 被阅读0次

    OpenAuth.Core是非常棒的开源软件,同时也为付费用户提供优化版的前端界面及更丰富的文档,但未付费用户无法得到Docker部署文档,这为很多想测试的用户造成了一点编译和部署的小麻烦,但好在并不复杂,我们就自己动手丰衣足食吧。

    本流程仅需一个Dockerfile用于编译OpenAuth.Core的3个项目,需要重新编译时直接再次运行一次这个镜像即可,部署OpenAuth.Core时直接使用微软的aspnet官方镜像,无需自己再另行制作相对应的Dockerfile。

    默认源码及所有编译结果保存src目录中,可由宿主机自由控制(直接映射至docker容器中或生成数据卷)

    准备工作

    先建几个目录来用

    #项目根目录
    mkdir openauth
    
    #源码目录
    mkdir openauth/src
    
    #用于保存配置文件
    mkdir openauth/config
    
    #运行WebAPI时的上传目录
    mkdir openauth/upload
    
    cd openauth
    

    • 编写Dockerfile
      容器内部/app目录为build.sh文件,/src为源码及编译文件保存目录(需由外部映射)
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine
    
    WORKDIR "/app"
    
    RUN echo -e "#!/bin/sh" > build.sh \
    && echo -e "echo \"编译目录清理开始\"" >> build.sh \
    && echo -e "rm -rf /src/api " >> build.sh \
    && echo -e "rm -rf /src/mvc" >> build.sh \
    && echo -e "rm -rf /src/identity" >> build.sh \
    && echo -e "mkdir /src/api" >> build.sh \
    && echo -e "mkdir /src/mvc" >> build.sh \
    && echo -e "mkdir /src/identity" >> build.sh \
    && echo -e "echo \"编译目录清理完成\"" >> build.sh \
    && echo -e "echo \"编译项目-OpenAuth.Mvc\"" >> build.sh \
    && echo -e "cd /src/OpenAuth.Core/OpenAuth.Mvc" >> build.sh \
    && echo -e "dotnet build \"OpenAuth.Mvc.csproj\" -c Release -o /src/mvc" >> build.sh \
    && echo -e "dotnet publish \"OpenAuth.Mvc.csproj\" -c Release -o /src/mvc" >> build.sh \
    && echo -e "echo \"编译项目-OpenAuth.Identity\"" >> build.sh \
    && echo -e "cd /src/OpenAuth.Core/OpenAuth.Identity" >> build.sh \
    && echo -e "dotnet build \"OpenAuth.IdentityServer.csproj\" -c Release -o /src/identity" >> build.sh \
    && echo -e "dotnet publish \"OpenAuth.IdentityServer.csproj\" -c Release -o /src/identity" >> build.sh \
    && echo -e "echo \"编译项目-OpenAuth.WebApi\"" >> build.sh \
    && echo -e "cd /src/OpenAuth.Core/OpenAuth.WebApi" >> build.sh \
    && echo -e "dotnet build \"OpenAuth.WebApi.csproj\" -c Release -o /src/api" >> build.sh \
    && echo -e "dotnet publish \"OpenAuth.WebApi.csproj\" -c Release -o /src/api" >> build.sh \
    && echo -e "echo \"编译工作全部完成\"" >> build.sh \
    && chmod +x build.sh
    
    ENTRYPOINT ["./build.sh"] 
    
    • build.sh(仅备用,全部内容已在Dockerfile中)
    #!/bin/sh
    
    echo "编译目录清理开始"
    && rm -rf /src/api \
    && rm -rf /src/mvc \
    && rm -rf /src/identity \
    && mkdir /src/api \
    && mkdir /src/mvc \
    && mkdir /src/identity
    echo "编译目录清理完成"
    
    echo "编译项目-OpenAuth.Mvc"
    cd /src/OpenAuth.Core/OpenAuth.Mvc
    dotnet build "OpenAuth.Mvc.csproj" -c Release -o /src/mvc
    dotnet publish "OpenAuth.Mvc.csproj" -c Release -o /src/mvc
    
    echo "编译项目-OpenAuth.Identity"
    cd /src/OpenAuth.Core/OpenAuth.Identity
    dotnet build "OpenAuth.IdentityServer.csproj" -c Release -o /src/identity
    dotnet publish "OpenAuth.IdentityServer.csproj" -c Release -o /src/identity
    
    echo "编译项目-OpenAuth.WebApi"
    cd /src/OpenAuth.Core/OpenAuth.WebApi
    dotnet build "OpenAuth.WebApi.csproj" -c Release -o /src/api
    dotnet publish "OpenAuth.WebApi.csproj" -c Release -o /src/api
    
    echo "编译工作全部完成"
    

    下载源码

    .net core 3.1版的OpenAuth.Core还未发布,所以我们选用dev分支

    #创建一个子目录并将源码下载在此目录中
    
    git clone -b dev --progress --verbose https://gitee.com/yubaolee/OpenAuth.Core.git src
    

    初始化数据库

     "OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
    
     "OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
    

    切换登录认证方式(可选)

    OpenAuth.core支持两种登录认证方式:自定义认证和基于IdentityServer的OAuth认证。

    这两种方式通过配置OpenAuth.WebApi和OpenAuth.Mvc的appsettings.json可以自由切换:

    //IdentityServer服务器地址。如果为空,则不启用OAuth认证
    "IdentityServerUrl": "http://宿主机IP:12796", 
    

    同时,你还需要修改OpenAuth.Identity的Config.cs约第46行,将host改为你的服务器地址,同时你还能修改一些其它参数

    当IdentityServerUrl为空时,采用普通的token认证,这时不需要OpenAuth.Identity启动支持。

    当IdentityServerUrl配置了地址时,则采用Identity认证方式,这时必须启动OpenAuth.Identity。

    具体在OpenAuth.Mvc/WebAPI中如何控制登录访问并进行权限控制,请点击这里


    编译项目

    • 确保此时宿主机目录结构类似如下:
    openauth
    +--Dockerfile
    +--config
    +--upload
    +--src
    |   +--OpenAuth.Core
    
    • 生成编译项目所需的镜像
    docker build -t openauth-build .
    
    • 编译项目
    docker run --rm -v /home/rakutens/OpenAuth/src:/src openauth-build
    

    运行OpenAuth.Core

    • 启动OpenAuth.Identity(IdentityServer)
    docker run -d --name openauth-identity \
    --restart unless-stopped \
    -e TZ=Asia/Shanghai \
    -v /openauth/src/identity:/app \
    -w /app \
    -p 12796:12796 \
    mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine \
    dotnet OpenAuth.IdentityServer.dll
    
    • 启动OpenAuth.WebApi(API服务)
    docker run -d --name openauth-api \
    --restart unless-stopped \
    -e TZ=Asia/Shanghai \
    -v /openauth/src/api:/app \
    -v /openauth/upload:/upload \
    -v /openauth/config/api.json:/app/appsettings.Production.json \
    -w /app \
    -p 52789:52789 \
    mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine \
    dotnet OpenAuth.WebApi.dll
    
    • 启动前端网站
    docker run -d --name openauth-mvc \
    --restart unless-stopped \
    -e TZ=Asia/Shanghai \
    -v /openauth/src/mvc:/app \
    -v /openauth/config/mvc.json:/app/appsettings.Production.json
    -w /app \
    -p 56831:56831 \
    -p 1802:1802 \
    -p 1803:1803 \
    mcr.microsoft.com/dotnet/core/aspnet:3.1-alpine \
    dotnet OpenAuth.Mvc.dll
    

    浏览网站

    通过浏览器,打开地址http://ip:1802 即可看到你刚部署的OpenAuth.Core的网站了


    备忘

    • 创建数据卷
    #生成三个数据卷
    docker volume create openauth-app-api
    docker volume create openauth-app-mvc
    docker volume create openauth-app-identity
    
    #启动一个临时用于复制数据的容器
    docker run -d \
    --name openauth-data
    --mount source=openauth-app-api,target=/api \
    --mount source=openauth-app-mvc,target=/mvc \
    --mount source=openauth-app-identity,target=/identity \
    alpine
    
    #将编译好的文件复制到数据卷中
    docker cp src/api openauth-data:/api
    docker cp src/mvc openauth-data:/mvc
    docker cp src/identity openauth-data:/identity
    
    #删除临时容器
    docker rm -f openauth-data
    
    • 使用数据卷
      启动程序镜橡时替换原来针对/app的挂载参数,将相应的数据卷挂载到容器的/app目录下即可,比如:
    #for OpenAuth.WebApi
    --mount source=openauth-app-api,target=/app
    
    #for OpenAuth.Mvc
    --mount source=openauth-app-mvc,target=/app
    
    #for OpenAuth.Identity
    --mount source=openauth-app-identity,target=/app
    

    相关文章

      网友评论

          本文标题:通过Docker部署OpenAuth.Core(一)

          本文链接:https://www.haomeiwen.com/subject/ounaehtx.html