{"repo":"bodhiye/paste","free":true,"listed":false,"github":"https://github.com/bodhiye/paste","clone":"git clone https://github.com/bodhiye/paste.git","description":"代码便利贴，在线代码分享平台~","language":"Go","stars":140,"topics":["golang","gin","vue","docker","docker-compose","nginx","mongodb","pastebin"],"license":"MIT","category":"deployment-docker-iac","readme_excerpt":"paste ——代码便利贴，在线代码分享平台 我们不生产代码，我们只是代码的搬运工 项目概述 Paste 是一个在线代码分享平台，允许用户上传代码片段并生成可分享的链接。平台支持多种编程语言，并提供如下特性： - 自定义代码过期时间 - 密码保护 - 一次性阅读（阅后即焚） 该项目使用前后端分离架构，后端采用 Go 语言开发，前端基于 Vue.js 框架构建。数据存储使用 MongoDB 。整个应用通过 Docker 容器化部署，使用 docker-compose 简化部署流程。 技术栈 后端 - Go 1.15.6 及以上版本 - Gin (Web 框架) - MongoDB (数据库) - logrus (日志库) - viper (配置管理) 前端 Vue.js 2.6.10 Node.js 14.17.3 axios (HTTP 客户端) vue-router (前端路由) 项目部署 部署架构 项目使用 Docker Compose 部署三个主要服务： 1. mongo : MongoDB 数据库服务，用于存储代码片段 2. server : Go 后端 API 服务，提供 API 接口 3. web : 前端 Vue.js 应用，通过 Nginx 提供静态资源服务 各服务通过内部网络相互通信，对外暴露的端口包括： - 80/443 端口： Web 前端服务 （HTTP/HTTPS） - 8000 端口：后端 API 服务 - 27017 端口： MongoDB 数据库服务 环境要求 ： - Docker - Docker Compose 部署步骤 - 如果需要，可以修改 paste/web/public/config.json 配置文件 - 使用 docker-compose 方式来部署容器服务，执行 docker-compose up -d 执行一键部署服务。 - 如需开启百度统计，取消注释并替换 paste/web/public/index.html 中的百度统计脚本 - 如需开启 https 访问，需要先上传 Nginx 服务器类型 SSL 证书到 paste/web/public/conf.d 目录下，并修改 nginx.conf 配置文件。 docker-compose up -d 命令执行过后，直接访问：http://127.0.0.1:80 。 后端设计 目录结构 核心模块 数据模型（db） 数据库模块主要负责与 MongoDB 的交互，核心数据结构为 PasteEntry ： 服务层（service） 服务层实现了具体的业务逻辑，包括以下主要功能： - PostPaste : 创建普通代码分享 - PostPasteOnce : 创建一次性代码分享 - GetPaste : 获取代码内容 路由层（router） 路由层定义了 API 接口路径映射： - POST /v1/paste : 创建常规代码分享 - POST /v1/paste/once : 创建一次性代码分享 - GET /v1/paste/:key : 获取代码内容 - ANY /health : 健康检查接口 中间件 (middleware) - 中间件提供了如下功能： - 日志记录 - 请求 ID 生成 - 异常恢复 配置管理 系统通过 config.yaml 配置文件管理各种设置： - 日志级别 - 服务器地址和端口 - MongoDB 连接信息 API接口 创建代码分享接口 Method 接口 说明 :------- :------------- :","default_branch":null,"files":null,"tree":[],"storefront":"/r/bodhiye","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/bodhiye/paste/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}