WCF 服务容器化的一些问题

背景

目前项目当中存有 .NET Framework 和 .NET Core 两种类型的项目,但是都需要进行容器化将其分别部署在 Windows 集群和 Linux 集群当中。在 WCF 进行容器化的时候,遇到了以下几个问题:

  1. 某些服务使用到了 WSHttpBinding 保护服务安全,要在容器里面加载 SSL 证书。
  2. WCF 服务的日志,如何重定向到标准输出流?

基于 Godaddy 与阿里云, 一键申请 SSL 证书

部署

acme.sh 的部署我采用的是 docker 方式进行部署,相应的 docker-compose.yaml 文件内容如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
version: "3"

services:
  acme.sh:
    image: neilpang/acme.sh:latest
    container_name: acme.sh
    command: daemon
    volumes:
      - "./Volume:/acme.sh"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - DEPLOY_DOCKER_CONTAINER_LABEL=__nginx__
      - DEPLOY_DOCKER_CONTAINER_RELOAD_CMD="nginx -s reload -c /etc/nginx/nginx.conf"
    restart: always
    networks:
      - internal-network

networks:
  internal-network:
    external: true

其中 ./Volume 是用于挂载证书文件夹的。

限制容器在 Docker 输出的日志大小

默认情况下,Docker 容器如果不被销毁的话,那么它的日志会一直保留。如果我们有一个连续运行一年的 NGINX 服务容器,那么它的日志文件就会非常大。 Docker 容器的日志都会挂在到 /var/lib/docker/containers/ 文件夹下,并且以下面的格式进行命名。

1
/var/lib/docker/containers/<container id>/<container id>-json.log

有三种方式限制日志大小,默认情况是全局设置,这样设置的话会对所有容器进行应用。

使用 NGINX 转发 Github Pages 站点

背景

新的 Blog 是基于 Hugo 搭建的,原始博客内容和生成的静态资源,都是托管在 Github 仓库里面的。但 Github Pages 有时候会抽风,并且访问速度并不是很稳定,因此萌生了使用 NGINX 反向代理 Github Pages 的想法。

解决

基本原理就是将目标站点(Github Pages) 作为一个 upstream 服务,然后 NGINX 负责将所有流量都转发到 upstream 即可。因此,我们的配置文件编写就比较简单了,只需要注意 Host 等信息需要使用 upstream 站点的信息(Github Pages)。

Built with Hugo
主题 StackJimmy 设计