8000 GitHub - jineryao/blog: blog
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

jineryao/blog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blog

个人博客系统, SPA + RESTful 风格

Demo

博客: http://smcay.xyz

Contents

部署

依赖

目前线上的环境

  • Node v9.10.0
  • pm2 v2.10.1
  • MongoDB v3.6.3
  • Redis v4.0.9
  • Nginx v1.12.2

应用配置

server基础配置

基础配置文件: /blog/server/conf/base.js

{
    // node 服务配置
    serverPort: 3000    // 监听端口
    origin: [String],   // Access-Control-Allow-Origin白名单数组

    // MongoDB 配置
    mongoName: "",          // 权限用户名
    mongoPwd: "",           // 权限用户密码
    mongoHost: "127.0.0.1", // 链接地址
    mongoPort: 27017,       // 链接端口号
    mongoDatabase: "blog",  // 数据库名

    // Redis 配置
    redisHost: "127.0.0.1", // 链接地址
    redisPort: 6379,        // 链接端口号
    redisPassword: "",      // 权限密码

    // Token 配置
    tokenSecret: "",            // 生成时撒的盐
    tokenExpiresIn: 60 * 60,    // 过期设置(秒)

    // admin 管理员用户信息
    adminName: "",          // 用户名
    adminPassword: "",      // 用户密码
    adminDisplayName: "",   // 用户称呼
    adminEmail: "",         // 用户邮箱

    // 静态资源存储目录
    staticDirName: "./static",  // 总目录,以server为根目录
    uploadImgDirName: "images", // 图片的存储目录,以`staticDirName`为根目录

    // 日志
    logDirPath: "./var/log", // 存储目录
    logFileName: "foo.log",  // 文件名

    // RESTful
    prefix: "/api" // 接口根路由
}
nginx配置

nginx 配置文件: /etc/nginx.conf
注意: nginx配置的参数对应server的配置

#压缩
gzip on;  
gzip_min_length 1k;  
gzip_comp_level 2;  
gzip_types      text/plain text/css text/javascript image/jpeg image/gif image/png image/jpg;  
gzip_vary       on;  
gzip_disable    "MSIE [1-6]\.";  

server {                                    #amdin入口
    listen       80;  
    server_name admin.smcat.com;  
    location / {  
        root   /mnt/www/blog/admin/dist;    #admin打包后存储目录
        index  index.html index.htm;  
        try_files $uri $uri/ /index.html;  
    }  
}  

server {                        #front(博客)入口
    listen    80;  
    server_name smcat.xyz;
    client_max_body_size 20M;   #上传文件大小限制
    location ~ ^/(images)/ {    #图片静态目录入口
        root  /mnt/www/blog/server/static/;  
        autoindex on;
        expires 30d;
    }
    location /api/ {
        proxy_pass     http://localhost:3000;   #RESTful请求监听
        proxy_set_header  Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    location / {
        proxy_pass     http://localhost:8080;   #front监听
        proxy_set_header  Host $host;
        proxy_set_header X-Forwarded-For	$remote_addr;
        proxy_set_header X-Forwarded-Proto	$scheme;
    }
}  
pm2配置

pm2 配置文件: /blog/pm2.json
pm2 全局安装, 启动命令(blog 目录下): pm2 startOrRestart pm2.json

{
    "apps": [
        {
            "name": "blog",
            "script": "front/production.js",
            "cwd": "",
            "exec_mode": "cluster",
            "instances": 0,
            "max_memory_restart": "256M",
            "autorestart": true,
            "node_args": [],
            "args": [],
            "env": {}
        },
        {
            "name": "server",
            "script": "server/app.js",
            "cwd": "",
            "watch": false,
            "max_memory_restart": "256M",
            "exec_mode": "cluster",
            "autorestart": true
        }
    ]
}

server

安装依赖: npm i
启动由 pm2 完成
注意: 静态文件目录和nginx同步

front

安装依赖: npm i
打包程序: npm run build
启动由 pm2 完成
注意: favicon.ico存储在front根目录

admin

安装依赖: npm i
打包程序: npm run build
程序由 ngxin 托管
注意: 打包后的dist目录的位置

RESTful-API

说明

服务器配置默认 3000 端口
请求接口默认博客路由/api

接口示例: http://smcat.xyz/api/xxx

权限验证

验证数据提交方式: 头信息 header 中的authorization设置为服务器下发的 Token
获取 Token 的方式: http://smcat.xyz/api/admin/login 提交 用户名,密码

目前RESTful接口需要通过验证的:

  • 登录
  • user 表请求
  • 所有非 get 请求

示例

已支持的动词

get
post
put
delete

查询

查询所有文章

GET http://smcat.xyz/api/post

带有参数的查询

GET http://smcat.xyz/api/post?limit=1&skip=0&select={"title":1,"pathName":1}&conditions={"isPublic":true}&sort={"createdAt":-1}

// 请求的参数列表:
{
    limit: 1,           // 返回值条数
    skip: 0,            // 过滤掉几条数据
    select: {           // 需要的字段(_id默认返回,不需要则添加 _id:0 )
        "title":1,
        "pathName":1
    },
    conditions: {       // 查询条件(公开的post)
        "isPublic":<
6A7D
span class="pl-c1">true
    },  
    sort: {             // 排序(按新建时间倒序)
        "createdAt":-1
    }
}

// 响应值列表:
{
    "total": 1,      // 总条数
    "result": [
        {
            "_id":"5ace23d9151c1c8570574702",
            "title":"起始,记录整站构思和体验",
            "pathName":"start"
        }
    ]
}

新增

需要验证 Token, body 中存储需要新增的文档(JSON格式)
modelName 可支持的数值, 查看/server/model/目录下的模型 key

POST https://smcat.xyz/api/:modelName

更新

需要验证 Token, body 中存储需要更新的文档(JSON格式)
modelName 可支持的数值, 查看/server/model/目录下的模型 key
id 为被更新的文档 _id

PUT https://smcat.xyz/api/:modelName/:id

删除

同更新

DELETE https://smcat.xyz/api/:modelName/:id

About

blog

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0