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
初始化数据库
使用源码目录中数据库脚本sql server 初始化脚本或mysql初始化脚本 初始化数据库
修改OpenAuth.Mvc/appsettings.json连接字符串,并复制到openauth/config/mvc.json:
"OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
- 修改OpenAuth.WebApi/appsettings.json连接字符串,并复制到openauth/config/api.json:
"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