MDServe

MDServe

MDServe是一个简约的网络服务器,将用Markdown编写的页面转换为HTML。它将使用文件路径作为访问点来将位于“pages”目录中的任何Markdown文件作为HTML进行服务。文件名为“index.md”的文件被视为基本路由。例如:

  • 文件“pages/index.md”在“/”处可访问
  • 文件“pages/blog/ireland.md”在“/blog/ireland”处可访问
  • 文件“pages/blog/index.md”在“/blog”处可访问

网站的布局由“public/index.html”中的HTML定义。打开该文件,您会注意到标记“%APP%”,这是页面转换后的HTML被注入的地方。

浏览器Javascript #

默认情况下,MDServe不启用客户端Javascript。如果您的应用程序需要它,您有几个选择:

  • 如果只需要纯Javascript,请将其添加到“public”目录,并在“public/index.html”中添加引用的<script>标签。
  • 如果您喜欢Typescript,位于“src/js/”目录中的文件由特殊的“/js*”处理程序提供服务。 Op 在 public/index.html 文件中,取消注释引用 /js/main.js 的脚本标签。js/main.js 文件是由 Typescript 编译器从 src/js/main.ts 中生成的。您可以在 src/js/ 中添加其他的 Typescript 代码,但由于它在浏览器中执行,因此需要打包才能使用 require/import 语句。

项目结构 #

  • pages/ - 存储 Markdown 页面并定义网站的路由
  • public/ - 静态资源
  • src/ - ExpressJS 服务器

系统要求 #

入门指南 #

  1. 克隆这个仓库

    git clone https://github.com/dan-lovelace/md-serve.git
    
  2. 切换到新目录

  3. 使用以下选项之一启动服务器:从源代码运行使用 Docker 运行

从源代码运行 #

  1. 安装依赖项
  2. 启动开发服务器 ## 使用Docker运行
  • 使用默认配置构建和运行容器

    docker compose up --build
    
  • 使用特定的环境文件构建和运行

    docker compose --env-file=".env.development" up --build
    

本地开发 #

npm run dev 命令从源代码启动服务器,并监视 pagespublicsrc 目录的更改。所有页面继承的基本HTML可以在 public/index.html 中找到,public 目录中的所有内容都以静态方式提供。

有一个 src/js 目录,用于存储浏览器所需的任何Javascript。默认情况下没有提供捆绑解决方案,但可以根据需要添加。

Docker和AWS #

构建并推送镜像到ECR #

  1. 在ECR中创建一个新的存储库

    aws ecr create-repository md-serve
    
  2. 使用Docker登录到新的存储库 - 替换你自己的 ACCOUNT_NUMBERREGION

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ACCOUNT_NUMBER.dkr.ecr.REGION.amazonaws.com/md-serve
  1. 构建最新的镜像
    • 注意: 你可以使用 --env-file 标志提供一个环境文件,例如: docker compose --env-file=".env.production" build
  2. 创建指向 ECR 存储库的标签 - 使用你自己的 ACCOUNT_NUMBERREGION
docker tag md-web-server:latest ACCOUNT_NUMBER.dkr.ecr.REGION.amazonaws.com/md-serve
  1. 将镜像推送到远程存储库
docker push ACCOUNT_NUMBER.dkr.ecr.REGION.amazonaws.com/md-serve

部署 #

以下是一些AWS部署选项的非常基本的步骤,还有无数其他用于托管Docker容器的选项。

EC2 #

  1. 使用具有Linux和Docker的映像创建新的EC2实例。 - 在AWS市场中查找
  • 创建一个弹性IP并将其与实例关联
  • SSH进入机器并运行上面的aws ecr get-login-password ... | docker login ...命令来登录到docker
  • 运行aws configure以设置凭据或手动编辑~/.aws/config~/.aws/credentials
  • 拉取镜像docker pull ACCOUNT_NUMBER.dkr.ecr.REGION.amazonaws.com/md-serve-repo:latest
  • 使用docker images获取镜像ID
  • 使用镜像ID运行并公开正确的端口docker run -d -p 8000:8000 2ce25025a251
  • 导航到实例的公共IP
  • 主页应该显示

ECS #

  • 创建一个新的ECS集群
  • 使用ECR镜像创建一个新的ECS任务定义
  • 创建一个使用新任务定义的新ECS服务
  • 等待任务启动并选择它
  • 导航到任务的公共IP
  • 主页应该显示

为ECS服务分配静态IP #

[https://repost.aws/knowledge-center/ecs-fargate-static-elasti 参考链接 (opens new window)