你貌似开启了广告屏蔽插件... 写博客不容易,希望能将广告过滤去掉,谢谢!

react-router简单使用方法

2017-03-08   朋也   react.js学习笔记   react-router  

react-router版本 v4.x

跟着官网 https://reacttraining.com/react-router/ 上的example学习的

使用

<Router>
    <header>
        <ul>
            <li><Link to='/home'>Home</Link</li>
            <li><Link to='/about'>About</Link</li>
            <li><Link to='/login'>Login</Link</li>
            <li><Link to='/register'>Register</Link</li>
        </ul>
    </header>
    <section>
        <Route path='/home' component={Home}/>
        <Route path='/about' component={About}/>
        <Route path='/login' component={Login}/>
        <Route path='/register' component={Register}/>
    </section>
    <footer>
        balabalabala...
    </footer>
</Router>

Tampermonkey里自己写脚本,实现破晓电影下载链接显示在页面上方便复制

2017-03-06   朋也   杂项   javascript  

原因:mac上点击破晓电影下载页面不能调用迅雷,复制链接地址也不对,就写了个脚本把下载ftp地址提取出来,供复制下载用

准备

首先在chrome里装上Tampermonkey插件 下载地址

代码

点击添加新脚本

在编辑框里写上下面代码

spring-boot启动项目之后操作的实现方法

2017-02-20   朋也   spring-boot学习笔记   spring-boot  

web项目在启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西

新建一个类:BeforeStartup.java

@Configuration
public class BeforeStartup implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private InitDB initDB;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        initDB.createUser();
    }

}

spring-boot里用freemarker做模板的国际化配置

2017-02-18   朋也   spring-boot学习笔记   spring-boot  

网上搜索到的都是用thymeleaf模板做的国际化,没找到freemarker,然后我想到了,spring-boot 用的mvc框架不就是springmvc吗,然后就搜索了下springmvc freemarker i18n,结果还真让我找到了

配置application.yml

spring:
  messages:
    basename: i18n/messages

新建文件

在src/main/resources下新建文件夹i18n

在i18n文件夹里创建文件messages.properties、messages_en_US.properties

js模板 underscore 简单使用教程

2017-02-15   朋也   javascript学习笔记   javascript  

获取

使用

创建模板

<!DOCTYPE html>
<html>
<head>
  <title>demo</title>
</head>
<body>
  <div id="box"></div>
  <script type="text/template" id="tpl">
    hello, <%=name%>
  </script>
  <script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
  <script src="//cdn.bootcss.com/underscore.js/1.8.3/underscore-min.js"></script>
  <script type="text/javascript">
    var name = 'world';
    var render = _.template($("#tpl").html());
    $("#box").html(render({name: name}));
  </script>
</body>
</html>

申请letsencrypt证书结合nginx实现网站https访问(支持泛域名)

2016-08-28   朋也   杂项   letsencrypt  

现在有更简单的方法配置了 https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

安装生成证书工具

我使用的是ubuntu系统

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

安装nginx

sudo apt install nginx

配置nginx

编辑nginx文件 /etc/nginx/sites-available/default 文件

server {
  server_name yiiu.co;

  location / {
    proxy_pass   http://127.0.0.1:3000/;
    include conf.d/proxy.conf;
  }
}

conf.d/proxy.conf 文件内容

# proxy.conf
proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    20m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;

生成证书

注意生成证书之前nginx要启动,而且域名要解析到服务器上

运行命令

sudo certbot --nginx -d yiiu.co

跟着步骤操作,最后会发现它把nginx都给配置的好好的,什么都不用管了,最后重启nginx即可

service nginx start

自动续期

letsencrypt生成的证书最多只有3个月有效期,这里利用ubuntu的系统自带的定时任务来解决这个问题

运行 crontab -e 命令,进入到定时任务的编辑界面,然后添加上下面这段命令,命令意思是7天运行一次,在夜里3点运行

0 3 */7 * * certbot renew —renew-hook "/etc/init.d/nginx reload"

申请泛域名

泛域名我开始也不知道,今天群里大佬告知后才知道,原来申请一个 *.yourdomain.com 就可以能用所有的二级域名了,这样就不用一个一个的去申请证书了,大大的方便了管理

阿里也有免费的https证书,但它不支持泛域名,网上查了一下letsencrypt,它还真支持,果断折腾,其实也就一条命令的事

certbot certonly --preferred-challenges dns --manual -d yiiu.co -d *.yiiu.co --server https://acme-v02.api.letsencrypt.org/directory

在申请证书的过程中,它要求到域名解析两个TXT记录(我看网上都说只需要配置一次就可以了,不知道为啥我申请的时候要配置两次),按照它的要求配置一下即可

注意,这种申请方式是手动的(manual),不是上面自动的(nginx),看命令参数应该就能明白,所以证书申请好了,还要自己去配置一下nginx,需要配置的内容如下,拷贝到nginx配置文件里的server { /放在这里/ }

server {
  server_name yiiu.co dev.yiiu.co;

  location / {
    proxy_pass http://localhost:3000;
    include conf.d/proxy.conf;
  }

  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/yiiu.co/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/yiiu.co/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

配置好了,保存,运行 nginx -t 检查一下配置文件的正确性,没问题就可以重启nginx了

这种方式的自动续期跟上面一样

注意事项

  1. 如果服务器上80端口被占用了,必须停掉,否则证书生成会失败,强烈建议80端口交给nginx
  2. 在生成证书的时候要停掉nginx(原因就是nginx占用了80端口)

删除证书

rm -rf /etc/letsencrypt/live/www.example.com/
rm -rf /etc/letsencrypt/archive/www.example.com/
rm /etc/letsencrypt/renewal/www.example.com.conf

如果碰到给证书续期失败的时候, 可以尝试删除生成的证书, 然后再次运行上面生成证书的命令获取证书, 就没有问题了

beego建站之上传文件权限设计

2016-08-26   朋也   Golang学习笔记   Golang beego  

beego官网

pybbs-go 里的权限设计异常的简单

共设计3张表, 两两都是多对多关联, 会产生2张中间表, 一共是5张表

结构

beego建站之上传文件

2016-08-26   朋也   Golang学习笔记   Golang beego  

beego官网 beego上传官方文档

下面说说官方文档里没有说明的地方

上传代码

func (c *FormController) Post() {
    f, h, err := c.GetFile("uploadname")
    defer f.Close()
    if err != nil {
        fmt.Println("getfile err ", err)
    } else {
        c.SaveToFile("uploadname", "/www/"+h.Filename)
    }
}

利用git仓库部署hexo搭建的博客

2016-08-25   朋也   nodejs学习笔记   nodejs  

昨天用hexo搭建了个本博客,主题用的是next,想发布博客还要将.md文件上次到服务器上,比较麻烦,本篇博客介绍一下利用ubuntu的定时任务和国内的git仓库来免传服务器部署

我用的是oschina的git仓库,当然也可以使用github,或者coding或者其他的git仓库,只要能git pull代码就可以了