Hshen

人若无名 便可潜心练剑

0%

想在docker-compose里面配置nginx的变量,参考了dockerhub nginx的文档文档地址 内容如下

1
2
3
4
5
6
7
8
9
10
11
# 官方Demo
web:
image: nginx
volumes:
- ./mysite.template:/etc/nginx/conf.d/mysite.template
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

按照官方给的文档我顺利的解决了NGINX传递变量的问题,但是配置文件mysite.template里面比如有些NGINX自己的变量比如 $request_uri、$server_name 都会被替换为空,既然这样我们就替换我们需要的变量

1
2
3
"envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
# 将上面的代码修改为
"envsubst '$NGINX_HOST $NGINX_PORT' < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

但是这样并没解决我的问题,NGINX报错找不到这个变量,又是一顿谷够,找到了一片文档传送门按照大神的意思是需要对变量转义,$$NGINX_HOST $$NGINX_PORT

1
"envsubst '$$NGINX_HOST $$NGINX_PORT' < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

至此顺利的解决了我的问题

获取 raspbery CPU RAM DISK IP 信息,驱动ssd1306

Luma.OLED

Luma.OLED github

1
2
3
# 安装驱动
$ sudo apt install python-dev python-pip libfreetype6-dev libjpeg-dev build-essential libopenjp2-7 libtiff5
$ sudo -H pip install --upgrade luma.oled
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# -*- coding:UTF-8 -*-
from luma.core.interface.serial import i2c, spi
from luma.core.render import canvas
from luma.oled.device import ssd1306
import time,os,socket,fcntl,struct

def getHostIp():
try:
my = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
my.connect(('8.8.8.8', 80))
# ip = my.getsockname()[0]
ipList = my.getsockname()
finally:
my.close()
return ipList

# Return % of CPU used by user as a character string
def getCPUuse():
return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))

# Return CPU temperature as a character string
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))

def getRAMinfo():
p = os.popen('free')
i = 0
while 1:
i = i + 1
line = p.readline()
if i==2:
return(line.split()[1:4])


def getDiskSpace():
p = os.popen("df -h /")
i = 0
while 1:
i = i +1
line = p.readline()
if i==2:
return(line.split()[1:5])

def ramTotal():
return(round(int(getRAMinfo()[0]) / 1000,1))

def ramUsed():
return(round(int(getRAMinfo()[1]) / 1000,1))

def ramFree():
return(round(int(getRAMinfo()[3]) / 1000,1))


# 创建 IIC 设备
serial = i2c(port=1, address=0x3C)

# 如果使用 SPI,换成这个
# serial = spi(device=0, port=0)

# 创建屏幕的驱动实例
device = ssd1306(serial)

while True:
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
draw.text((18, 5), "Hshen raspberry" , fill="white")
draw.text((2, 14), "CPU:" + getCPUuse() , fill="white")
draw.text((62, 14), "Temp:" + getCPUtemperature() , fill="white")
draw.text((2, 23), "RAM:" + str(ramUsed()) + "/" + str(ramTotal()) , fill="white")
draw.text((2, 33), "Disk:" + str(getDiskSpace()[1]) + "/" + str(getDiskSpace()[0]) , fill="white")
draw.text((2, 42), "ip:" + getHostIp()[0] , fill="white")
draw.text((2, 52),time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) , fill="white")
time.sleep(2)

🌰: 有一下三台机器 S1、S2、S3 ===> S1的公钥分别放在了S2和S3上面,当然也可以免密分别登录S2和S3,但是当你从S1登录到S2,如果再想从S2登录到S3是需要密码,因为你S2的公钥没有放在S3上面,不过我们可以让S2充当代理的角色

实现:
  • 方案1: 编辑本地 vi /etc/ssh/ssh_config 将ForwardAgent值设置为yes,表示允许客户端进行转发
  • 方案2: ssh -A root@xxx.xxx.xxx.xxx

PAC:代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。维基百科

  • 一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理器或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议(WPAD)自动配置的。
  • 创建proxy.pac文件写入以下代码,xx.xx.xx.xx为你服务器的地址, yyyy为你Socks的端口,然后把文件放到你的服务器目录里面确保能访问到 比如:xxx.com/proxy.pac

    1
    2
    3
    function FindProxyForURL(url, host) {
    return "SOCKS xx.xx.xx.xx:yyyy";
    }

    然后再iPhone上设置 > WLAN > HTTP PROXY 选择Automatic填入刚才文件的url

SSH 免密登录,手动把自己本地的公钥copy到远程服务器上~/.ssh/authorized_keys这个文件里面,如果没有就新建一个,比较快速方法就是在Terminal执行

1
2
# root为远程登录的账户,xx.xx.xx.xx替换成你服务器ip
ssh-copy-id root@xx.xx.xx.xx

以后我们就可以ssh root@xx.xx.xx.xx 就不需要输密码了😀

在公司拉github代码还是蛮快的,但是回到家用浏览器Socks5上GitHub贼快,但是Terminal默认不走Socks5所以拉代码贼慢,解决方法:让Terminal也走Socks5

在Terminal输入以下代码

1
2
# 临时改变Terminal的代理,窗口关闭后失效
export all_proxy=socks5://proxy.hackshen.com:1080

把以下方法copy到你的~/.zshrc文件里

1
2
3
4
5
6
7
8
9
10
# Terminal proxy
function proxy_off(){
unset http_proxy
echo -e "已关闭代理"
}

function proxy_on() {
export all_proxy=socks5://proxy.hackshen.com:1080 # 配置http和https访问
echo -e "已开启代理"
}

1、查看当前系统是否有zsh

1
cat /etc/shells

2、如果没有zsh执行下面命令安装,如果已安装直接跳到第三步

1
sudo yum install zsh -y

3、安装oh-my-zsh

1
sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"