带https证书的blazorserver的docker部署

准备工作

$ dotnet --version
5.0.400

IDE: Visual Studio for mac 2019

项目实施

  1. 新建项目:App->Blazor Server App->.Net 5.0+individual Authentication+Configure for Https->Create a project directory within the solution direction

  2. 添加docker支持:选择项目->add docker support,会自动添加docker部署需要的文件

    ├── TestBlazorHTTPS
    │   ├── App.razor
    │   ├── Areas
    │   ├── Data
    │   ├── Dockerfile                   //add
    │   ├── Pages
    │   ├── Program.cs
    │   ├── Properties
    │   ├── Shared
    │   ├── Startup.cs
    │   ├── TestBlazorHTTPS.csproj
    │   ├── _Imports.razor
    │   ├── app.db
    │   ├── appsettings.Development.json
    │   ├── appsettings.json
    ├── TestBlazorHTTPS.sln
    ├── docker-compose.dcproj             //add
    ├── docker-compose.override.yml       //add
    └── docker-compose.yml                //add
    

    查看docker-compose.override.yml内容

    version: '3.4'
    
    services:
    testblazorhttps:
        environment:
        - ASPNETCORE_ENVIRONMENT=Development
        - ASPNETCORE_URLS=https://+:443;http://+:80
        ports:
        - "80"
        - "443"
        volumes:
        - ~/.aspnet/https:/root/.aspnet/https:ro
        - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro
    
  3. 准备证书(mac版本):

    dotnet dev-certs https -ep ${HOME}/.aspnet/https/TestBlazorHTTPS.pfx -p 123456
    dotnet dev-certs https --trust
    

    将在${HOME}/.aspnet/https/目录下生成证书文件TestWithoutIdentity.pfx,密码为123456

    TestBlazorHTTPS.pfx的命名必须与项目名称相同

  4. 在docker-compose.override.yml中添加证书信息:

      - ASPNETCORE_Kestrel__Certificates__Default__Password=123456
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.aspnet/https/TestBlazorHTTPS.pfx
    

    即如下:

    version: '3.4'
    
    services:
    testblazorhttps:
        environment:
        - ASPNETCORE_ENVIRONMENT=Development
        - ASPNETCORE_URLS=https://+:443;http://+:80
        - ASPNETCORE_Kestrel__Certificates__Default__Password=123456
        - ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.aspnet/https/TestBlazorHTTPS.pfx
        ports:
        - "80"
        - "443"
        volumes:
        - ~/.aspnet/https:/root/.aspnet/https:ro
        - ~/.microsoft/usersecrets:/root/.microsoft/usersecrets:ro
    
  5. 运行docker-compose up,查看docker ps

    CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                           NAMES
    8a4967efe61d   testblazorhttps   "dotnet TestBlazorHT…"   35 seconds ago   Up 30 seconds   0.0.0.0:53283->80/tcp, 0.0.0.0:53282->443/tcp   testblazorhttps_testblazorhttps_1
    
  6. 浏览器打开 https://localhost:53282

参考

  1. https://docs.microsoft.com/en-us/aspnet/core/security/docker-compose-https?view=aspnetcore-5.0

  2. visual studio from mac 2019 add docker support

  3. https://docs.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide#create-a-self-signed-certificate

    • 证书的名称必须要与项目的名称相同。The certificate name, in this case aspnetapp.pfx must match the project assembly name.