升级certbot版本从0.26到0.28

之前使用Let’s encrypt的免费https证书,最近收到邮件 Action required: Let’s Encrypt certificate renewals,发现需要把certbot升级到0.28,否则就不支持了。

但是用邮件里的说明,无法正确的升级certbot版本

于是使用强制升级,实测成功

1
apt-get upgrade -f certbot

parallels虚拟机使用mac代理

在mac中已经配置了http或socks代理的情况下,可以直接被parallels中的虚拟机使用,原理类似于局域网共享。

首先配置代理端允许局域网共享,具体配置方法见相应的软件。在Surge中,只要将listen设置为0.0.0.0即可允许所有来源的代理请求

Parallels的网络默认情况下,使用类似虚拟路由器的方式,可以理解为mac端和虚拟机组成一个局域网,因此需要获取这个局域网中的mac端ip地址。用下面的命令获取mac的IP地址:

1
ifconfig vnic0

之后在虚拟机中正常设置代理即可,如果是windows的虚拟机,在Internet选项中设置http代理,其他软件同理。


git为仓库配置单独的ssh-key

为了跳过输入密码的流程,服务器上如果使用git部署,一般使用deploy key,但是如果一台机器需要同时部署多个项目的话,默认情况下所有项目都会使用相同的ssh-key,但是GitHub并不支持不同的repo拥有相同的deploy key。

通过对ssh进行一些设置可以实现不同repo使用不同的ssh-key。

主要原理是通过host域名的不同来识别

例如,本来repo的git地址为git@github.com:wangsijie/awesome,为其配置一个专用的ssh-key,而不是使用系统默认的ssh-key的步骤如下:

创建一个新的ssh-key

1
ssh-keygen

Enter file in which to save the key这一行出现后,填写一个特别的名字单独存储这个key,而不是覆盖默认,比如可填写/home/work/.ssh/id_rsa_awesome,其他选项根据实际情况填写,可全部默认

配置Host与key的映射

新建文件~/.ssh/config

1
2
3
Host awesome.github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_awesome

有了上面的配置,当git遇到awesome.github.com这个域名的时候,会自动转发到github.com,并使用id_rsa_awesome这个ssh-key

修改repo地址

本来repo的git地址为 git@github.com:wangsijie/awesome,这里需要进行修改,把域名改为 awesome.github.com,于是完整地址变为:

1
git@awesome.github.com:wangsijie/awesome

用这个地址进行正常的clone、push、pull等操作,就会自动的使用id_rsa_awesome这个ssh-key了


git忽略文件的权限变更
1
git config core.fileMode false

git快速删除已合并分支

会自动检查与master的差别,只会删除没有领先master的分支,所以可以安全的使用

删除已合并的远程分支

1
git branch -r —merged | grep -v master | sed ’s/origin\///‘ | xargs -n 1 git push —delete origin

删除已合并的本地分枝

1
git branch —merged | egrep -v “(^*|master|dev)” | xargs git branch -d

nginx反向代理,多域名共用一个ip

实现一个ip对应多个域名,或者说多个应用共用一个端口(80或443)

首先更改nginx.conf配置,通常位于/etc/nginx/nginx.conf

举例配置:

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
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}

http {
include mime.types;
default_type application/octet-stream;
# include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/reverse-proxy.conf; #关键语句,指定反向代理配置文件
sendfile on;
keepalive_timeout 65;
gzip on;
client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 300s;
proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
proxy_ignore_client_abort on; #不允许代理端主动关闭连接
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

之后通过配置/etc/nginx/conf.d/reverse-proxy.conf文件实现具体域名的反向代理:

1
2
3
4
5
6
7
8
9
10
11
12
13
server
{
listen 80;
server_name example.com;
location / {
proxy_redirect off;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr; # header中的这个字段用于记录真实ip
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9100;
}
access_log /var/log/nginx/example.com_access.log;
}

Linux查看端口占用进程
1
netstat -tulpn | grep :80

linux使用crontab执行开机命令

1. 创建运行脚本

1
vi /home/sijie/start.sh

2. 写入内容

1
2
3
4
5
#!/bin/sh

export NODE_ENV=production
export PATH=/usr/local/bin:$PATH
forever start /node/server/path/server.js > /dev/null
阅读更多
docker清理镜像释放空间

以下命令,结束所有container,再删除所有container,再删除所有image

1
2
3
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -a -q)

但是这并不太彻底,如果想要进一步清理,可以直接干掉存储文件,从托盘点击图表进入docker的设置,mac下在这里可以看到

docker设置

点击Reveal in Finder然后把那个文件删除了即可


使用git hook进行自动化代码部署

在服务器上使用git部署代码,然后通过设置一个git-hook实现项目的自动部署。即代码变更后,自动拉取新代码并执行相应的操作

基于Node.js,无需依赖其他package,开箱即用,方便部署git-hook进行自动部署

其中8105替换成所需端口

生产环境最好不要使用这种方法,要用的话,也得把.git文件夹的访问权限禁用

另外,从req中可以获取更多的参数,如代码分支等

阅读更多