<commit_before># Blog
Not only blog. Based on Vue2, Koa2, MongoDB and Redis

前后端分离 + 服务端渲染的博客系统, 前端SPA + 后端RESTful服务器

# Demo
[https://smallpath.me](https://smallpath.me)

# TODO
- [ ] 前台单页
  - [x] 开启H5模式
  - [x] disqus评论
  - [x] vue1.0升级至vue2.0
  - [x] vuex单向数据流
  - [x] server side rendering
  - [x] server side rendering部署文档
  - [x] 使用superagent替换vue-resource 
  - [x] 谷歌统计 
  - [x] 服务端sitemap定时任务
  - [x] rss
  - [x] 组件级缓存
  - [ ] 服务端谷歌统计
  - [ ] 侧边栏图片
- [ ] 后台管理单页
  - [x] 添加升级模型的管理
  - [x] 使用axios替换vue-resource
  - [ ] vue 1.0 => vue 2.0 
  - [ ] 使用element ui
  - [ ] 七牛云图片上传
- [ ] RESTful服务器
  - [x] RESTful添加select字段过滤
  - [x] 标签及分类移至文章中 
  - [ ] 文章toc
  - [ ] 七牛access_token下发及鉴权
  - [ ] OAuth1升级至OAuth2
  - [ ] koa2 unstable => koa2 stable 
- [x] 部署文档
- [x] API文档
- [ ] Docker
- [ ] 单元测试， 集成测试和系统测试用例
- [ ] 前端持续集成测试

# 构建与部署

## 前置

- Node v4
- MongoDB
- Redis

## server

博客的提供RESTful API的后端

修改 conf/config.js:

- `tokenSecret`
    - 改为任意字符串
- `defaultAdminPassword`
    - 默认密码, 必须修改, 否则服务器将拒绝启动

```
npm install
pm2 start entry.js
```

RESTful服务器在本机3000端口开启

## client/front
博客的前台单页, 支持服务端渲染

```
npm install
npm run build
pm2 start production.js
```

请将`logo.png`与`favicon.ico`放至`dist/static`目录中

再用nginx代理本机8080端口即可, 可以使用如下的模板

```
server{
    listen 80;                                      #如果是https, 则替换80为443
    server_name *.smallpath.me smallpath.me;        #替换域名
    root /alidata/www/Blog/client/front/dist;       #替换路径为构建出来的dist路径
    set $node_port 3000;
    set $ssr_port 8080;

    location ^~ / {
        rewrite ^/proxyPrefix/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_pass http://127.0.0.1:$ssr_port;
        proxy_redirect off;
    }

    location ^~ /proxyPrefix/ {
        rewrite ^/proxyPrefix/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_pass http://1192.168.127.12:$node_port;
        proxy_redirect off;
    }

    location ^~ /dist/ {
        rewrite ^/dist/(.*) /$1 break;
        etag         on;
        expires      max;
    }

    location ^~ /static/ {
        etag         on;
        expires      max;
    }
}
```


## client/back
博客的后台管理单页

```
npm install
npm run build
```

用nginx代理构建出来的`dist`文件夹即可, 可以使用如下的模板

```
server{
    listen 80;                                      #如果是https, 则替换80为443
    server_name admin.smallpath.me;        #替换域名
    root /alidata/www/Blog/client/front/dist;       #替换路径为构建出来的dist路径
    set $node_port 3000;

    index index.js index.html index.htm;

    location / {
        try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
        rewrite ^(.*)$ / last;
    }

    location ^~ /proxyPrefix/ {
        rewrite ^/proxyPrefix/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_pass http://127.0.0.1:$node_port;
        proxy_redirect off;
    }

    location ^~ /static/ {
        etag         on;
        expires      max;
    }
}
```

# 后端RESTful API

## 说明
<commit_msg>[文档] 更新TODO<commit_after># Blog
Not only blog. Based on Vue2, Koa2, MongoDB and Redis

前后端分离 + 服务端渲染的博客系统, 前端SPA + 后端RESTful服务器

# Demo
[https://smallpath.me](https://smallpath.me)

# TODO
- [ ] 前台单页
  - [x] 开启H5模式
  - [x] disqus评论
  - [x] vue1.0升级至vue2.0
  - [x] vuex单向数据流
  - [x] server side rendering
  - [x] server side rendering部署文档
  - [x] 使用superagent替换vue-resource 
  - [x] 谷歌统计 
  - [x] 服务端sitemap定时任务
  - [x] rss
  - [x] 组件级缓存
  - [ ] 服务端谷歌统计
  - [ ] 侧边栏图片
- [ ] 后台管理单页
  - [x] 添加升级模型的管理
  - [x] 使用axios替换vue-resource
  - [ ] vue 1.0 => vue 2.0 (进行中)
  - [ ] 使用element ui (进行中)
  - [ ] 七牛云图片上传
- [ ] RESTful服务器
  - [x] RESTful添加select字段过滤
  - [x] 标签及分类移至文章中 
  - [ ] 文章toc
  - [ ] 七牛access_token下发及鉴权
  - [ ] OAuth1升级至OAuth2
  - [ ] koa2 unstable => koa2 stable 
- [x] 部署文档
- [x] API文档
- [ ] Docker
- [ ] 单元测试， 集成测试和系统测试用例
- [ ] 前端持续集成测试

# 构建与部署

## 前置

- Node v4
- MongoDB
- Redis

## server

博客的提供RESTful API的后端

修改 conf/config.js:

- `tokenSecret`
    - 改为任意字符串
- `defaultAdminPassword`
    - 默认密码, 必须修改, 否则服务器将拒绝启动

```
npm install
pm2 start entry.js
```

RESTful服务器在本机3000端口开启

## client/front
博客的前台单页, 支持服务端渲染

```
npm install
npm run build
pm2 start production.js
```

请将`logo.png`与`favicon.ico`放至`dist/static`目录中

再用nginx代理本机8080端口即可, 可以使用如下的模板

```
server{
    listen 80;                                      #如果是https, 则替换80为443
    server_name *.smallpath.me smallpath.me;        #替换域名
    root /alidata/www/Blog/client/front/dist;       #替换路径为构建出来的dist路径
    set $node_port 3000;
    set $ssr_port 8080;

    location ^~ / {
        proxy_http_version 1.1;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:$ssr_port;
        proxy_redirect off;
    }

    location ^~ /proxyPrefix/ {
        rewrite ^/proxyPrefix/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:$node_port;
        proxy_redirect off;
    }

    location ^~ /dist/ {
        rewrite ^/dist/(.*) /$1 break;
        etag         on;
        expires      max;
    }

    location ^~ /static/ {
        etag         on;
        expires      max;
    }
}
```


## client/back
博客的后台管理单页

```
npm install
npm run build
```

用nginx代理构建出来的`dist`文件夹即可, 可以使用如下的模板

```
server{
    listen 80;                                      #如果是https, 则替换80为443
    server_name admin.smallpath.me;        #替换域名
    root /alidata/www/Blog/client/front/dist;       #替换路径为构建出来的dist路径
    set $node_port 3000;

    index index.js index.html index.htm;

    location / {
        try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
        rewrite ^(.*)$ / last;
    }

    location ^~ /proxyPrefix/ {
        rewrite ^/proxyPrefix/(.*) /$1 break;
        proxy_http_version 1.1;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:$node_port;
        proxy_redirect off;
    }

    location ^~ /static/ {
        etag         on;
        expires      max;
    }
}
```

# 后端RESTful API

## 说明

{'fraction_non_alphanumeric': 0.13204047217537943, 'fraction_numerical': 0.02782462057335582, 'mean_word_length': 1.9774096385542168, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 4, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 6, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '389272', 'n_tokens_mistral': 2914, 'n_tokens_neox': 2994, 'n_words': 470}