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>
原因:mac上点击破晓电影下载页面不能调用迅雷,复制链接地址也不对,就写了个脚本把下载ftp地址提取出来,供复制下载用
首先在chrome里装上Tampermonkey插件 下载地址
点击添加新脚本
在编辑框里写上下面代码
spring-boot 使用 spring-security 博客 https://kielczewski.eu/2014/12/spring-boot-security-application/
web项目在启动之后有时候还会做点其它的东西(比如,导入数据脚本),下面就说说spring-boot里怎么在程序启动后加入自己要执行的东西
新建一个类:BeforeStartup.java
@Configuration
public class BeforeStartup implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private InitDB initDB;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
initDB.createUser();
}
}
网上搜索到的都是用thymeleaf模板做的国际化,没找到freemarker,然后我想到了,spring-boot 用的mvc框架不就是springmvc吗,然后就搜索了下springmvc freemarker i18n,结果还真让我找到了
spring:
messages:
basename: i18n/messages
在src/main/resources下新建文件夹i18n
在i18n文件夹里创建文件messages.properties、messages_en_US.properties
创建模板
<!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>
现在有更简单的方法配置了 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文件 /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了
这种方式的自动续期跟上面一样
rm -rf /etc/letsencrypt/live/www.example.com/
rm -rf /etc/letsencrypt/archive/www.example.com/
rm /etc/letsencrypt/renewal/www.example.com.conf
如果碰到给证书续期失败的时候, 可以尝试删除生成的证书, 然后再次运行上面生成证书的命令获取证书, 就没有问题了
下面说说官方文档里没有说明的地方
上传代码
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)
}
}
昨天用hexo搭建了个本博客,主题用的是next,想发布博客还要将.md文件上次到服务器上,比较麻烦,本篇博客介绍一下利用ubuntu的定时任务和国内的git仓库来免传服务器部署
我用的是oschina的git仓库,当然也可以使用github,或者coding或者其他的git仓库,只要能git pull代码就可以了