添加位于本地目录的npm包

npm包默认从registry远程获取并放在node_modules文件夹中。有时候自己写的代码由于相对路径太长,import比较痛苦,或者是代码写的还“拿不出手”无法上传到远程,这问题可以通过将本地文件夹安装为npm包的方法解决。

假设有一个src/config文件夹,需要设置为本地的npm包,包名config,设置成功后希望达成:

1
2
const config = require('config'); // 新代码
const config = require('./src/config'); // 老代码

代码包创建配置

src/config文件夹下新建package.json文件,内容为:

1
2
3
4
5
{
"name": "config",
"main": "index.js",
"version": "0.1.0"
}

安装本地代码包

1
npm i file:./src/config

安装成功后,可以发现在项目的package.json文件夹中出现了一个相对路径的dependency

1
2
3
4
5
{
"dependencies":{
"config":"file:./src/config"
}
}

ionic 插件 In App Browser 简单上手

In App Browser 是 ionic 的一个native插件,可以用来在app中打开一个“网页浏览器”,用途类似于 Native App 中的 webView,可以直接加载远程资源。例如,可以全屏加载一个单独的h5游戏,实现 ionic app 中嵌入其他h5游戏。

但是 In App Browser 在 ionic4 中的文档资料非常的少,仅有安装方法和一个简单的usage:https://ionicframework.com/docs/native/in-app-browser/。不过 ionic 的这个主要是对 cordova 做了一下 binding,所以直接看 cordova 的文档也很有参考价值:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/。

下面举例嵌入h5游戏的步骤。

阅读更多
升级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
阅读更多