Vue+GIN前后端分离项目打包成二进制

问题

使用GIN自带静态资源服务器需要设置一个子目录,而这对于Vue项目来说显然是不合理的,如果使用根目录则会和其他路由冲突,所以需要对静态资源针对性处理

原理

阅读更多

解决Debian 10接入Cloudflare Warp后IPv6优先级低于IPv4

编辑/etc/gai.conf

找到如下部分,取消前5行的注释

1
2
3
4
5
6
7
8
9
10
11
12
# label   <mask>   <value>
# Add another rule to the RFC 3484 label table. See section 2.1 in
# RFC 3484. The default is:
#
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
#label fec0::/10 5
#label fc00::/7 6
#label 2001:0::/32 7
阅读更多

将GIN的模板资源嵌入二进制

利用statik库将静态资源嵌入二进制,但是GIN并没有提供从http.FileSystem加载模板的方法,所以得手动去加载

主要实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
func initTemplates() *template.Template {
statikFS, err := fs.New()
if err != nil {
log.Fatal(err)
}
t := template.New("")
//找出所有扩展名为.gohtml的文件,将其解析为模板
err = fs.Walk(statikFS, config.TemplateDir, func(path string, info os.FileInfo, err error) error {
if filepath.Ext(info.Name()) == ".gohtml" {
f, err := statikFS.Open(path)
if err != nil {
return err
}

b, err := ioutil.ReadAll(f)
if err != nil {
return err
}

_, err = t.New(path[1:]).Parse(string(b)) //此处去掉 path 前的 / 来作为模板的文件名
if err != nil {
return err
}
}

return nil
})

if err != nil {
log.Println("Load templates error")
log.Fatal(err)
}
return t
}
阅读更多

解决Docker下Golang程序在Alpine镜像中不读取hosts文件

今天用Docker部署gost的时候发现gost没有使用hosts文件中指定的ip,遂查阅了一番资料,得知是缺少了/etc/nsswitch.conf文件,解决方法如下:

1
echo "hosts: files dns" > /etc/nsswitch.conf

这条命令可以在运行时加入,也可以在构建镜像时加入,Dockerfile如下:

阅读更多

IPsec over GRE隧道简易配置教程

为了能够顺利根据这篇文章打通隧道,最好了解并满足如下前提:

  • 两台具有公网IP的VPS A和B,其中至少有一台拥有独立IP,并且另一台如果是NAT VPS则需要内外映射端口一致,假设A的公网IP为1.1.1.1,B的公网IP为2.2.2.2
  • 设定隧道A端内网IP为10.0.0.1,B端内网IP为10.0.0.2
  • A、B两台机器系统为Debian 10
  • 关闭防火墙

配置GRE隧道

阅读更多

用curl进行校园网模拟认证

这个学期学校网络登陆方式从拨号换到了dr.com的网页认证,通过chrome F12打开开发者工具,查看其登录其实就是发了一个GET请求,如下
请求url:http://10.160.63.9:801/eportal/
参数:

  • c:值为Portal,无需改动
  • a:值为login,代表登录,登出则是logout
  • callback:值为dr加上一个精确到毫秒的时间戳,如dr1599458671000,该值代表登陆的时间,实测该值并不影响登录,估计与上网记录的统计有关
  • login_method:值为1,无需改动
  • user_account:登陆账号,如1234123123@telecom,一般账号为学号,后面的后缀则为选的运营商,电信是telecom,其他运营商未测试
  • user_password,登陆密码,默认为身份证后六位
  • wlan_user_ip:通过DHCP获取到的内网ip
  • wlan_user_mac:值为000000000000,无需改动
  • wlan_ac_ip:值为221.178.235.146,无需改动
  • wlan_ac_name:值为JSSUZ-MC-CMNET-BRAS-KEDA_ME60X8,无需改动
  • jsVersion:值为3.0,无需改动
  • _:值为一个精确到毫秒的时间戳,猜测是打开网页的时间,实测该值并不影响登录,估计与上网记录的统计有关

关于内网ip可在路由器上获取,时间戳同样可以直接获取,如下

阅读更多

如何正确使用Cloudflare加速v2ray等代理软件

要使用Cloudflare加速梯子,首先梯子必须是用websocket作为传输方式的,比如v2ray的websocket,gost的websocket隧道,shadowsocks的v2ray-plugin等等,关于这些东西的搭建教程有很多,我就不赘述了,只讲如何使用Cloudflare,并自选ip来达到最好的加速效果,你所需要的只是一个域名

使用Cloudflare Workers反向代理

先创建一个Cloudflare账号,然后在主页面右下角点击Workers,进入创建一个Worker

接着在编辑区域粘贴以下代码

阅读更多

使用Docker部署 Prometheus+Grafana VPS监控系统

本文介绍如何使用Docker部署Prometheus + Grafana VPS监控系统
为了方便容器编排,将使用docker-compose来部署
目录结构:

1
2
3
4
5
6
7
8
9
10
moniter
├── docker-compose.yml
├── grafana
│   └── data
├── prometheus
│ ├── config
│ │   └── prometheus.yml
│ └── data
└── node_exporter
└── node_exporter

部署node_exporter

阅读更多

在Windows上使用代理连接SSH

经常碰到买的一些小鸡到国内的网络很差,SSH非常卡,所以使用代理来连接SSH十分重要

尽管Xshell等一系列GUI工具可以简单地实现代理,但是对于VSCode等依赖OpenSSH的软件来说并不简单

在Linux之类的上经常使用netcat来代理SSH,但是netcat在Windows上的实现比较残缺,少了代理的功能,所以只能用ncat来替代

阅读更多

解决Docker下Shadowsocks NAT类型严格的问题

一直使用自建的Shadowsocks服务进行游戏加速,我也写过文章展示如何用Docker部署(传送门)用起来没什么问题,但是最近玩GTA 5的时候却发现几乎无法与他人联机。使用NatTypeTester显示NAT类型为Symmetric,游戏内显示为严格

推测原因

使用Bridge模式的容器在将内部端口映射到外部时相当于做了一次NAT,而Linux内核默认是没有实现FullCone NAT

阅读更多