一、简介

Docfx 是微软开发的一款开源的文档生成工具,其默认支持 C# 与 VB.Net 这两种项目的文档生成,支持 DotNetCore 项目,并且还可以打包成一个静态的 Web 站点,而且还支持 markdown 文件。

这个站点就是 ImageSharp 的 API 文档,可以去参考一下。

二、安装

下载

Docfx 是即开即用的,他基于 .Net Framework 开发,所以我们可以先在 Windows 平台上面生成 API 文档试一下,DocFx 的下载地址为 https://github.com/dotnet/docfx/releases,选择最新版本下载即可。

设置环境变量

然后解压其压缩包,因为这是一个命令行程序,所以我们可以将其目录添加到环境变量以便于我们在任何地方来使用。

按住 Shift 键再点击右键在当前目录弹出 cmd 命令行窗口,输入一下命令:

setx PATH "%Path%;< 这里是你 docfx.exe 所在的目录>"

三、使用

初始化基础项目

在你需要生成基础项目的文件夹下打开命令行窗口,运行 docfx init -q 就回在当前目录下生成一个 docfx_project 文件夹,这里面包含了一些基本配置,稍后再讲。

生成 API yml 文件

docfx 支持为 csproj 与 sln 来生成 API 文档,假如你的库有很多个的话,就可以直接根据 sln 解决方案来生成 API 文档。

我们来到 API 目录下面,在 csproj 文件所在目录打开命令行窗口,运行 docfx metadata ./api.csproj 命令就会在这个目录下面生成一个 _api 文件夹,这里面会包含大量像这样的 yml 文件。

将这些文件拷贝到 docfx_project 目录下的 api 文件夹内,编辑 docfx_project 根目录的 toc.yml 文件,如下:

这里面就是管理 API 站点目录结构的,可以看到这里的每一个以 - 划分的都是一个节点,也就是在 API 站点顶部导航栏所展示的内容,而 href 则是该导航栏指向的文档目录路径。homepage 则是首页的 markdown 文件。

如果你有一些自定义的文档则可以在这里添加目录结构。

构建 API 站点

文件这些已经准备就绪,原始的站点文档都以 yml 文件与 md 文件为主,我们可以通过调用 docfx ./docfx.json 命令来将这些文件构建成一个静态的 html 站点。

预览 API 站点

如果我们想查看效果的话,可以在 docfx_project 目录执行 docfx serve ./_site 命令,它将会开启一个服务器,你也可以通过 -p 参数来指定自己的端口,例如 docfx serve ./_site -p 5000

四、部署

如果只是自己看就没什么用了,那么我们还可以通过 Docker 来将我们的站点部署到服务器上,如何来做呢?大致思路就是一个 docker 镜像生成 _site 文件夹,一个镜像来做 Web 服务器承载站点。

制作镜像

1.文档生成镜像 doc_generator

那么我们首先来编写生成 docker 镜像的 Dockerfile 文件:

FROM mono:latest
WORKDIR /work
COPY ./ .
# 构建 API 站点
RUN mono /work/docfx/docfx.exe /work/docfx.json \
&& mkdir /app
ENTRYPOINT ["cp","-r","/work/_site/*","/app"]

运行 docker build -t doc_generator . 命令生成了一个 doc_generator 镜像。

2.Web 服务器镜像 nginx

这里 Web 服务器镜像并不需要特别的定制,直接使用 nginx 的默认镜像就可以了。

运行镜像

那么我们来编写一个 Shell 运行我们的镜像:

#!/bin/bash
docker run -dti -v /temp/document_html:/app --name=doc_generator doc_generator
# 移动文件,更改文件目录结构
cp -r /temp/document_html/_site/* /temp/document_html
docker run --name=doc_nginx -d -p 20001:80 -v /temp/document_html:/usr/share/nginx/html nginx

执行脚本之后查看效果:

五、后记

结合 Jenkins 等 CI 你可以实现自动增量更新,这里就不再赘述了。

[Other]在 Docker 当中搭建 Docfx 站点的更多相关文章

  1. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  2. 使用docker快速搭建Permeate渗透测试系统实践

    一.背景 笔者最近在做一场Web安全培训,其中需要搭建一套安全测试环境:在挑选渗透测试系统的时候发现permeate渗透测试系统比较满足需求,便选择了此系统:为了简化这个步骤,笔者将系统直接封装到了d ...

  3. Docker 实践搭建php环境

    docker 安装 使用官方提供的安装脚本,安装最新版的Docker curl -sSL https://get.docker.com/ | sh 安装完成后,通过如下命令启动Docker的守护进程, ...

  4. 【架构】docker环境搭建mysql主从

    序 本文主要研究怎么在docker上搭建mysql的主从.因为在单机搭建mysql多实例然后再配主从,感觉太痛苦了,环境各有不同,配置各不大相 同,从网上找搭建方法,试了半天也没成功,最后也没耐心调试 ...

  5. docker中搭建jenkins环境

    想在docker中搭建一个jenkins环境.开始的时候我想在先pull centos,然后在里面自己搭建环境,搭建后的环境可以运行,但是不知道挂载哪的数据,这也是我不熟悉jenkins的原因. 同事 ...

  6. 本地如何使用phpstudy环境搭建多站点

    http://jingyan.baidu.com/article/e52e36154227ef40c70c5147.html 平时在开发项目的时候, 多个项目同时开发的时候会遇到都得放到根目录才能正常 ...

  7. docker快速搭建几个常用的第三方服务

    本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch: 本篇涉及内容深 ...

  8. Docker Machine搭建并加入节点

    对于集群服务器来讲,要在每台机器上手动安装Docker是一件及其痛苦的事情,还好有Docker Machine这一工具,Docker三剑客中的一角. 一.Docker Machine介绍 这个工具已经 ...

  9. centos7系统下 docker 环境搭建

    运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段)centos7一定要安装64位, docke ...

随机推荐

  1. OpenMP并行化实例----Mandelbrot集合并行化计算

    在理想情况下,编译器使用自动并行化能够管理一切事务,使用OpenMP指令的一个优点是将并行性和算法分离,阅读代码时候无需考虑并行化是如何实现的.当然for循环是可以并行化处理的天然材料,满足一些约束的 ...

  2. Android下拉列表控件spinner-andoid学习之旅(十一)

    废话不多说,下拉列表常用的就是spinner控件. 直接上代码: package peng.liu.testview; import android.app.Activity; import andr ...

  3. [mysql5.6] 主从更换ip之后重新建立同步

    情况时这样的: 主从系统 centos6.5 mysql5.6 由于机房迁移ip地址变了,导致原来的主动无法同步,于是需要重新建立主从关系. 主 192.168.1.23 从 192.168.1.22 ...

  4. (NO.00004)iOS实现打砖块游戏(六):反弹棒类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...

  5. mxgraph进阶(三)Web绘图——mxGraph项目实战(精华篇)

    Web绘图--mxGraph项目实战(精华篇) 声明     本文部分内容所属论文现已发表,请慎重对待. 需求 由于小论文实验需求,需要实现根据用户日志提取出行为序列,然后根据行为序列生成有向图的形式 ...

  6. Cocos2D中图片加-hd后缀的说明

    你可能注意到实际上游戏中的sprite都有2张图片,它都对应该精灵,并包含在资源包中(resource pack): player.png(27x40 pixels)和player-hd.png(do ...

  7. Socket层实现系列 — connect()的实现

    主要内容:connect()的Socket层实现.期间进程的睡眠和唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 应用层 int connect( ...

  8. 用Fiddler在Android上抓包(Http+https)

    Fiddler是一个HTTP协议调试代理工具,在开发网络应用的时候经常会用到,其最基本的作用是能抓HTTP的数据包,当然它还有更高级的用法,如添加断点.修改请求与相应的数据等等... 抓HTTP包 安 ...

  9. 基于Bootstrap的Metro风格模板

    这几天在看Bootstrap的一些书,这里整理一下书中的一些模板,方便以后使用. 1.BootMetro http://www.guoxiaoming.com/bootmetro/ 2.Bootswa ...

  10. 从"按层次输出二叉树"到"求解二叉树深度"的总结

    本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.csdn.net/postedit/41964669 最近在刷LeetCode上的算法题,发现好多题目的解题思路大体是一 ...