英国雷迪RD1000非金属管线探测仪

OpenWRT 19.06.7 最新官方固件添加CPU频率,温度,接口速率,磁盘使用信息

跳转到指定楼层

1#

 发表于 2021-1-24 21:45 | 只看该作者 |只看大图 回帖奖励
本帖最后由 a798047000 于 2021-2-1 13:10 编辑

修改 /usr/libexec/rpcd/luci 添加如下代码

  1. getCoreInfo = {
  2.         call = function()
  3.             local sys = require “luci.sys”
  4.             local rv = {}
  5.             local freqs = string.split(string.trim(sys.exec(“cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq”)),”\n”)
  6.             local temps = string.split(string.trim(sys.exec(“sensors | grep ‘Core’ | cut -c10-24″)),”\n”)
  7.             local i
  8.             for i = 1, #freqs do
  9.                 local freq = string.trim(freqs[i])
  10.                 local temp = string.trim(temps[i])
  11.                 rv[#rv + 1] = {
  12.                     core = “Core ” .. i,
  13.                     freq = string.format(“%.2f”, freq / 1000) .. ” MHz”,
  14.                     temp = temp
  15.                 }
  16.             end
  17.             return {coreinfo = rv}
  18.         end
  19.     },
  20.     getDiskInfo = {
  21.         call = function()
  22.             local sys = require “luci.sys”
  23.             local rv = {}
  24.             local lines = string.split(string.trim(sys.exec(“/bin/df -h | sed ‘s/\\s\\+/ /g’ | uniq”)),”\n”)
  25.             local i
  26.             for i = 2, #lines do
  27.                 local tokens = string.split(lines[i], ” “)
  28.                 local block = string.trim(tokens[1])
  29.                 — ignore block not start with /
  30.                 if (string.sub(block, 1, 1) == “/”) then
  31.                     rv[#rv + 1] = {
  32.                         block = block,
  33.                         size = string.trim(tokens[2]),
  34.                         used = string.trim(tokens[3]),
  35.                         available = string.trim(tokens[4]),
  36.                         used_percent = string.trim(tokens[5]),
  37.                         mounte_point = string.trim(tokens[6])
  38.                     }
  39.                 end
  40.             end
  41.             return {diskinfo = rv}
  42.         end
  43.     },
  44.     getETHInfo = {
  45.         call = function()
  46.             local sys = require “luci.sys”
  47.             local rv = {}
  48.             local ethinfo = sys.exec(“/usr/bin/ethinfo”)
  49.             local lines = string.split(string.trim(ethinfo), “\n”)
  50.             local i
  51.             for i = 1, #lines do
  52.                 local line = string.trim(lines[i])
  53.                 if line == “” then
  54.                 else
  55.                     local tokens
  56.                     tokens = string.split(line, ” “)
  57.                     rv[#rv + 1] = {
  58.                         name = tokens[1],
  59.                         status = tokens[2],
  60.                         speed = tokens[3],
  61.                         duplex = tokens[4]
  62.                     }
  63.                 end
  64.             end
  65.             return {ethinfo = rv}
  66.         end
  67.     }

复制代码


安装 lm-sensors 执行命令

  1. opkg update
  2. opkg install lm-sensors

复制代码

添加文件 /usr/bin/ethinfo 写入

  1. #!/bin/sh
  2. a=$(ip address | grep ^[0-9] | awk -F: ‘{print $2}’ | sed “s/ //g” | grep ‘^[e]’ | grep -v “@” | grep -v “\.”)
  3. b=$(echo “$a” | wc -l)
  4. for i in $(seq 1 $b)
  5. do
  6.         c=$(echo “$a” | sed -n ${i}p)
  7.         d=$(ethtool $c)
  8.         e=$(echo “$d” | grep “Link detected” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’)
  9.         f=$(echo “$d” | grep “Speed” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’ | tr -d “Unknown!”)
  10.         [ -z “$f” ] && f=”-“
  11.         g=$(echo “$d” | grep “Duplex” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’)
  12.         [ “$g” != “Full” -a “$g” != “Half” ] && g=”-“
  13.         echo “$c $e $f $g”
  14. done

复制代码

并给执行权限,执行

  1. chmod 755 /usr/bin/ethinfo

复制代码

修改 /usr/share/rpcd/acl.d/luci-base.json 找到

  1. “luci”: [ “getConntrackList”, “getInitList”, “getLocaltime”, “getProcessList”, “getRealtimeStats”, “getTimezones”, “getLEDs”, “getUSBDevices”, “getSwconfigFeatures”, “getSwconfigPortState”, “getBlockDevices”, “getMountPoints” ],

复制代码

添加 “getCoreInfo”, “getETHInfo”, “getDiskInfo” 改完后是这样的

  1. “luci”: [ “getConntrackList”, “getInitList”, “getLocaltime”, “getProcessList”, “getRealtimeStats”, “getTimezones”, “getLEDs”, “getUSBDevices”, “getSwconfigFeatures”, “getSwconfigPortState”, “getBlockDevices”, “getMountPoints”, “getCoreInfo”, “getETHInfo”, “getDiskInfo” ],

复制代码

然后将压缩包内的3个文件放入 /www/luci-static/resources/view/status/include/

游客,如果您要查看本帖隐藏内容请回复

最后别忘了重启 rpcd 和 uhttpd (或nginx,如果你用nginx替代了uhttpd的话) 服务

  1. service rpcd restart
  2. service uhttpd restart

复制代码

最终效果如图

QQ20210124-214454@2x.png (251.6 KB, 下载次数: 0)

下载附件  保存到相册

2021-1-24 21:45 上传


以上方案是直接修改系统文件实现的,没有改源码重新编译,如果想要在源码内修改,可以找到源码下相应的路径和文件,修改即可

由于我这里是直接修改系统文件的,因此没有国际化(翻译),中文文本是直接以unicode编码写到js文件里的

如果需要加入源码编译,建议将对应文本改为英文,然后在po文件内添加相应的翻译文本即可
此帖部分代码来自于 https://www.right.com.cn/forum/thread-1358471-1-1.html  感谢!

多说一句,如果更新了luci-base包,可能会导致修改失效,这主要是因为更新的包覆盖了修改后的文件,这时一般只需要重新在rpc中添加lua方法,然后再json中注册,重启rpcd,就能重新work。如果不行,那就对照教程完整的再来一次吧。

PVE安装后要处理的几个问题(三)添加硬盘

Proxmox(PVE)安装时候只有一块硬盘,我使用了ssd作为系统盘,并安装各种系统在ssd上面,但是想把数据存放在普通的机械硬盘上,这样我们就需要添加另一块硬盘了!

本文以PVE 5.3-8为例,首选你装好硬盘启动后查看下硬盘的名称

image.png

如上图所示,我用来当数据盘的设备名称为 sdc

也可以到终端内使用命令查看

ls /dev/sd*

如果你是IDE硬盘,应该没有了吧,使用以下命令查看

ls /dev/hd*

image.png

上图是查询结果,如果/dev/sdb这种样子,后面没有sdb1等数字,说明硬盘还没有分区(我上面显示/dev/sdb1  /dev/sdb2  /dev/sdb3说明已经分好区了)

之后我们要把这个硬盘分区,并格式化为ext4格式

fdisk /dev/sdc

进入fdisk界面,按下面方式操作

Select (default p): (直接按下enter)

Partition number (1-4, default 1): (直接按下enter)

First sector (2048-167772159, default 2048): (直接按下enter)

Last sector, +sectors or +size{K,M,G} (2048-167772159, default 167772159): (直接按下enter)

Command (m for help): w

image.png

 

上面的sector会根据你硬盘大小改变,我们分一个区,所以直接默认回车就可以

分区之后就会多出一个 /dev/sdb1,之后我们格式化为ext4格式

mkfs -t ext4 /dev/sdc1

格式化需要一些时间,等待一下就可以,不要着急,完成后出现done

image.png

如上图样子就格式化好了!之后我们要挂载到pve上面,先新建一个挂载目录

mkdir -p /mnt/sdc1

然后把硬盘挂载信息写入 /etc/fstab

echo /dev/sdc1 /mnt/sdc1 ext4 defaults 1 2 >> /etc/fstab

因为此时/目录是只读模式,进行修改/etc/fstab时,提示无法保存(只读),这时需要将/目录重新挂载为可读写模式 ,用命令

mount -o remount,rw,auto /

然后再对/etc/fstab进行修改就可以了。重启后系统正常启动。

之后重启PVE即可

开机添加目录

image.png

image.png

添加完毕,就可以在节点里看到你刚刚添加的目录了

image.png

 

Openwrt获取当前连接设备信息列表

查看连接上openwrt的设备IP信息,mac地址,方式有两种:

方式1:

Bash
cat /proc/net/arp

结果:

Bash
IP address       HW type     Flags       HW address            Mask     Device
192.168.0.1      0x1         0x2         **:95:**:5c:**:79     *        eth0.2
192.168.1.242    0x1         0x2         **:6c:**:77:**:40     *        br-lan
192.168.0.124    0x1         0x0         **:00:**:00:**:00     *        eth0.2
192.168.1.198    0x1         0x2         **:8d:**:5a:**:3c     *        br-lan

Flags标志可以表示是否在线状态,0x0表示离线,标志0x2表示在线

Device表示接口的名称

方式2:

Bash
cat /tmp/dhcp.leases

结果

Bash
1505227895   **:6c:**:77:**:40   192.168.1.242   android-5734b930181b5156   *
1505225907   **:8d:**:5a:**:3c   192.168.1.198   DESKTOP-AFGM9OL   01:40:8d:5c:5a:a0:3c

可以看到mac地址,IP,设备名等信息

还有个查看wifi连接设备的命令

Bash
#ra0 是设备的名称,根据实际情况也可能是wlan0或者其他名称
iwinfo ra0 assoclist

得到结果

Bash
**:**:**:C6:76:26  -44 dBm / -57 dBm (SNR 13)  37000 ms ago
    RX: 65.0 MBit/s, MCS 7, 20MHz                      0 Pkts.
    TX: 65.0 MBit/s, MCS 7, 20MHz                      0 Pkts.

**:**:**:FF:91:98  -44 dBm / -57 dBm (SNR 13)  6000 ms ago
    RX: 65.0 MBit/s, MCS 7, 20MHz                      0 Pkts.
    TX: 65.0 MBit/s, MCS 7, 20MHz                      0 Pkts.

LEDE / OPENWRT 自动清理内存

一、LINUX常用

1.清理前内存使用情况

free -m
  • 1

2.开始清理

echo 1 > /proc/sys/vm/drop_caches
  • 1

3.清理后内存使用情况

free -m
  • 1

4.完成!

二、OPENWRT
使用脚本自动配置openwrt时,ssh终端收到错误提示;****out of memory。各种无响应,郁闷之下发扬搬运精神,于是有了下面的脚本

#!/bin/sh

used=`free -m | awk ‘NR==2’ | awk ‘{print $3}’`

free=`free -m | awk ‘NR==2’ | awk ‘{print $4}’`

echo “===========================” >> /var/log/mem.log

date >> /var/log/mem.log

echo “Memory usage | [Use:${used}KB][Free:${free}KB]” >> /var/log/mem.log

if [ $free -le 153600 ] ; then

sync && echo 1 > /proc/sys/vm/drop_caches

sync && echo 2 > /proc/sys/vm/drop_caches

sync && echo 3 > /proc/sys/vm/drop_caches

echo “OK” >> /var/log/mem.log

else

echo “Not required” >> /var/log/mem.log

fi

Vmware 平台虚拟机导入到PVE平台上

 

PVE(Proxmox VE)是新的开源虚拟化平台,具有较多优点,如群集功能、容器等,但是实际操作中也有不少bug或不如意的地方。

现有一台vmware虚拟化平台的windows 2012R2 虚拟机,为了不重新安装操作系统和应用,因此希望通过直接转化的方法导入到PVE主机内。

检查pve资料,pve说可以通过两种方式导入,一种是通用ovf格式,另一种是直接加载vmdk磁盘。后来确认两种方式结果是几乎一样的。

我总结的导入过程如下:

1、将vmware下的windows2012R2虚拟机导出为OVF (略),但是要注意,不能导出成单个的ova文件,因为PVE中不认识达成包的OVA文件。但是导出ovf会生产三个文件,都需要拷贝出来。

2、将生成的三个ovf文件导入到pve的local存储上。正常可以使用local存储上“上传”的方法,选择*.*文件格式。也可以使用ssh工具,通过SFTP协议将文件上传只PVE 的ISO目录,该目录位于PVE机器的/var/lib/vz/template/iso   。

(注意:ssh secure shell client 3.2.9版本不行哦,我是用secure CRT 中SFTP上传的)

 

3、上传后就用PVE介绍的方式来导入虚拟机,说一种简单一点的方法,执行以下命令:

qm importovf 999  WindowsServer2012.ovf  local-lvm

其中999是导入虚拟机的ID,WindowsServer2012.ovf是虚拟机导入文件,local-lvm是放置虚拟机的磁盘卷。导入成功后,最后有100%的提示。

 

4、启动虚拟机,发现能看到windows 2012窗口,提示修复,反复重启,无法进入最后的操作系统界面,按照提示操作也几乎无法进行下去。

检查PVE文档,官网这样说:“除了格式问题之外,如果模拟的硬件从一个虚拟机监控程序到另一个虚拟机监控程序的变化太大,则从其他虚拟机监控程序导入磁盘映像可能会失败。Windows VM对此特别关注,因为OS对硬件的任何更改都很挑剔。可以通过在导出之前安装Internet上可用的MergeIDE.zip实用程序来解决此问题,并在引导导入的Windows VM之前选择IDE的硬盘类型。”

5、文档提示用IDE硬盘,就把硬盘类型从scsi改成IDE。

把原有硬盘从scsi上卸除。把硬盘挂载到ide0的总线上了,命令如下:

qm set 999 –ide0 local-lvm:vm-999-disk-0

 

6、可以挂PE,可对认到的IDE硬盘进行CHKDSK 的磁盘扫描,去除坏块等。方法如下:

chkdsk  /f:   e:   , 修正了一些小故障,重启还是不行,继续找问题。

 

7、突然想到应该要进安全模式,去除不合理的驱动,这样系统应该就能起来了。但是win2012启动时候缺省不响应F8,无法进入安全模式。

8、等待启动进入到了高级模式,找到命令行,在命令式模式下键入:bcdedit /set {default} bootmenupolicy legacy    这条命令是允许在win2012菜单出来之前可以按F8进入安全模式。

 

9、重启,在菜单出来之前按键F8进入安全模式。

10、可以进入到windows的安全模式,问题初步解决。找到“计算机管理”中的“设备管理器”,把里面没有用的驱动全部删除掉,特别是有vmware和HyperV字样的驱动,直至没有黄色的感叹号出现。

11、退出安全模式,再重新启动,终于出现了久违的Windows 2012 R2的画面。
————————————————
linux 迁移

VMware完美迁移PVE方法(两条命令解决)

未来村长 2021-05-05 15:07:40 20 收藏
分类专栏: 虚拟化 文章标签: 虚拟机 vmware pve
版权
一、为什么要迁移
因为VMware是收费的,PVE是免费的,就是这么简单粗暴,没有太多理由。
Proxmox优势:
Proxmox的主要特性,去中心化、超融合、高可用、开源低成本、易于实施管理,前面几个特性都和open stack一样,但是最后一点易于实施管理,open stack却做得不是特别好,对于易于实施管理这一点,主要有以下几个方面(引述):
1、proxmox以iso文件提供下载,刻录到u盘,安装方便高效。
2、创建集群,只需登陆每个系统执行一条指令,马上就能看到效果。
3、支持分布式存储,创建ceph存储池,也是寥寥几步就可完成,并很快可以在管理界面看到效果。
4、轻松实现高可用,web界面组成对象高可用(ha),也是易如反掌。
5、方便扩容,重复执行相同创建扩容命令即可完成。
6、统一界面。一个web入口,管理节点、存储、网络、虚拟机等所有资源,完成绝大部分用户操纵,无需要安装客户端。

1.迁移方法
(1)首先,把镜像从VMware虚拟机导出OVF格式
我用的是浏览器,客户端方法一样

(2)镜像已经导出成功,然后把导出来的镜像上传到PVE的镜像存储里面,上传的话,可以用FTP等,我用的是finalshell直接拉进去,保存路径是/var/lib/vz/template/iso/,后面根据自己实际保存路径来分。

 

(3)然后打开PVE,新建一个空白虚拟机,配置根据实际需要来配就行。

 

 

 

 

 

(4)然后用命令登录到PVE的节点node,用命令把镜像导入到刚才新建的虚拟机121里面,知道100%完成。
qm importdisk 121 /var/lib/vz/template/iso/test.vmdk local-zfs
qm set 121 –ide0 local-zfs:vm-121-disk-0
1
2
这里类型根据你虚拟机硬盘类型来选ide0还是scsi0,我就在这里翻车了,排查了很久才找到原因,所以,这里要注意。

 

(5)然后修改下刚才新建虚拟机的引导,放到第一个,不然的话,开机会找不到引导,一直重启。

 

(6)然后再开机,刚才导入进来的镜像已经可以开机运行了。

————————————————

debian 9升级到debian 10

2019年11月1日00:11:48 7,588

更新

apt-get update && apt-get upgrade

备份一份

cp /etc/apt/sources.list /etc/apt/sources.list.orig

将/etc/apt/sources.list里所有“stretch”替换为“buster”

sed -i ‘s/stretch/buster/g’ /etc/apt/sources.list

再更新一下

apt-get update && apt-get upgrade

执行升级命令

apt-get dist-upgrade

提示完成后重启

reboot

查看下当前debian版本

lsb_release -a

============================

完成后,更新包索引:

sudo apt update

如果存在与第三方存储库相关的任何错误或警告消息,请尝试解决该问题或禁用存储库。

通过升级已安装的软件包来启动系统升级。 这将仅升级那些不需要安装或删除任何其他软件包的软件包:

sudo apt upgrade

系统将询问您是否希望在升级期间自动重新启动服务。

输出

Restart services during package upgrades without asking? 

在升级过程中,您可能还会被问到其他各种问题,例如您是要保留现有配置文件还是安装软件包维护者的版本。 如果您没有对文件进行任何自定义更改,则应该安全地键入Y,否则保持当前配置输入N.

升级可能需要一些时间,具体取决于更新次数和Internet速度。

接下来,执行apt full-upgrade,它将执行系统的完整升级,安装最新版本的软件包,并解决不同版本中软件包之间的依赖关系更改。 这将升级未使用上一个命令升级的所有软件包。

sudo apt full-upgrade

上面的命令可能会安装一些新软件包并删除冲突和过时的软件包。

完成后,使用以下方法清理不必要的包:

sudo apt autoremove

最后,通过键入以下内容重新启动计算机以激活新内核:

sudo systemctl reboot

确认升级是否成功

等待一会儿,直到系统启动并登录。

登录后,您将收到以下消息:

输出:

Linux stretch 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) x86_64
...

您还可以使用以下命令检查 Debian 版本:

lsb_release -a

输出:

No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

至此,你现在可以享受你的新 Debian 10 Buster 了。

=============================

SEO-您是否禁止了mj12bot蜘蛛的访问

MJ12bot这个蜘蛛是大家都怎么处理的?是否对SEO有帮助,他一直频繁的访问网站,是否应该屏蔽掉他呢,我的选择是好不犹豫的直接干掉他;

  • MJ12bot遵循robots.txt标准,惹需屏蔽他,直接在 robots.txt 添加以下代码;

过去几个月总是在过一段时间后收到服务器资源负载过高的警告,基本上每次上机检查日志都会发现某个网站被奇怪的恶意爬虫给完整检查了一遍。而且不知道为什么 MJ12bot 总是会检查一些无限重定向的链接,导致服务器资源被无意义地消耗。


几个资源消耗比较高的爬虫包括:

  • dotbot
  • SemrushBot
  • MJ12bot
    • 我特别建议屏蔽 MJ12bot,因为一些版权方会使用这家的爬虫来批量检查网站中是否包含侵犯版权的文件
  • SMTBot

对于这些爬虫建议直接在 robots.txt 中屏蔽掉它们,目前复查日志发现至少它们确实是遵守 robots.txt 规则的

  • User-agent: dotbot
  • Disallow: /
  • User-agent: SemrushBot
  • Disallow: /
  • User-agent: MJ12bot
  • Disallow: /
  • User-agent: SMTBot
  • Disallow: /
  • User-agent: PetalBot
  • Disallow: /
  • User-agent: AhrefsBot
  • Disallow: /
  • User-agent: CheckMarkNetwork
  • Disallow: /
  • User-agent: DigiCert DCV Bot
  • Disallow: /

OpenWRT分配挂载剩余磁盘空间

软路由用的是60G的固态硬盘,而openwrt占用的空间很少,将剩下的空间划分出来,做可道云空间,存储办公文档,还是不错的。
首先,ssh连接,然后输入 fdisk /dev/sda

image

继续输入w,保存分区表
image

开始格式化分区,输入mkfs.ext4 /dev/sda3
image

挂载分区
登录路由器:系统 > 挂载点> 添加
启用此挂载点:勾选
UUID:选择要挂载的分区
挂载点:选择(自定义),输入 /mnt/sda3回车。
image

Ubuntu安装Nginx和正确卸载Nginx Nginx相关

1.Ubuntu下安装Nginx比较简单

敲入下列命令即可:

    sudo apt-get update
    sudo apt-get install nginx

 

 

2.Ubuntu下卸载,稍不注意就会入坑

 

复制代码
    sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。

    sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。

    sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。

    sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

  sudo service nginx restart  #重启nginx
复制代码

 

上面的命令基本上都能解决你在Ubuntu下安装卸载Nginx的问题。

 

 

3.查看nginx进程

复制代码
ps aux|grep nginx

在虚拟环境下安装uwsgi
pip install uwsgi

######启动Nginx服务
[root@typecodes ~]# service nginx start
######停止Nginx服务
[root@typecodes ~]# service nginx stop
######重启Nginx服务
[root@typecodes ~]# service nginx restart
######Nginx服务的状态
[root@typecodes ~]# service nginx status
######在Nginx服务启动的状态下,重新加载nginx.conf这个配置文件
[root@typecodes ~]# service nginx reload



复制代码

 

 

 

 

 

 

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。

 

一、安装Nginx                                                                        

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。

Nginx官网:http://nginx.org/

打开ubuntu控制台(ctrl+alt+t)利用Ubuntu的仓库安装。

fnngj@ubuntu:~$ sudo apt-get install nginx  #安装

启动Nginx:

fnngj@ubuntu:~$ /etc/init.d/nginx start  #启动
fnngj@ubuntu:~$ /etc/init.d/nginx stop  #关闭
fnngj@ubuntu:~$ /etc/init.d/nginx restart  #重启

 

修改Nginx默认端口号,打开/etc/nginx/nginx.conf 文件,修改端口号。

复制代码
复制代码
 server {
    listen       8088;    # 修改端口号
    server_name  localhost;

    #charset koi8-r; 

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }
复制代码
复制代码

大概在文件36行的位置,将默认的80端口号改成其它端口号,如 8088。因为默认的80端口号很容易被其它应用程序占用。

然后,通过上面命令重启nginx。访问:http://127.0.0.1:8088/

如果出现如上图,说明Nginx启动成功。

 

二、安装uwsgi

通过pip安装uwsgi。

root@ubuntu:/etc# python3 -m pip install uwsgi

 

测试uwsgi,创建test.py文件:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

 

通过uwsgi运行该文件。

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

 

接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/home/fnngj/pydj/myweb

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --chdir /home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

 

常用选项:

http : 协议类型和端口号

processes : 开启的进程数量

workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)

chdir : 指定运行目录(chdir to specified directory before apps loading)

wsgi-file : 载入wsgi-file(load .wsgi file)

stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)

threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 允许主进程存在(enable master process)

daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

pidfile : 指定pid文件的位置,记录主进程的pid号。

vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

 

三、Nginx+uwsgi+Django                                         

接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:

myweb/

├── manage.py

├── myweb/

│   ├── __init__.py

│   ├── settings.py

│   ├── urls.py

│   └── wsgi.py

└── myweb_uwsgi.ini

在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。

复制代码
复制代码
# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8000

# the base directory (full path)
chdir           = /home/fnngj/pydj/myweb

# Django s wsgi file
module          = myweb.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
复制代码
复制代码

这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

socket  指定项目执行的端口号。

chdir   指定项目的目录。

module  myweb.wsgi ,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。

其它几个参数,可以参考上一小节中参数的介绍。

 

接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

复制代码
复制代码
fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini 
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2016] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
复制代码
复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

 

再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。

复制代码
复制代码
……
server {
    listen         8099; 
    server_name    127.0.0.1 
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/fnngj/pydj/myweb/static/;
     }
 }
……
复制代码
复制代码

listen 指定的是nginx代理uwsgi对外的端口号。

server_name  网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。

在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

include 必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口与myweb_uwsgi.ini配置文件中的必须一直。

 

现在重新启动nginx,翻看上面重启动nginx的命令。然后,访问:http://127.0.0.1:8099/

通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

 

=============

ps: 这个过程本应不算复杂,之前花两天时间没搞定,索性放到了一边,这次又花了两天时间才算搞定。网上搜到的文章比较乱,有些太简单的看不懂,有些又太啰嗦的不知道核心的几步是什么,希望本文能帮到你。

 

Passwall DNS模式和SmartDNS速配使用

Passwall DNS模式简介和SmartDNS快速配合使用
最后更新:2020-01-31
硬件:华硕ACRH17无线路由器
内核 4.14.167 Passwall 版本 3.3-39-20200130
SmartDNS支持第二DNS服务器组,但与Passwall配合使用时我不建议用这个功能,Passwall的设计已经很棒了,没必要把SmartDNS搞得很复杂,我建议SmartDNS仅用于国内DNS服务器。
一、准备
国内用smartdns服务,端口6053,关闭ipv6服务器,开启域名预加载功能,开启黑名单过滤(黑名单IP见本文最下面),缓存是否开启都可以,重定向选择“无”。添加一组国内DNS IP,建议添加2个公共DNS+2个运营商DNS+1个支持tcp或tls的国内DNS(中科大或红鱼)。比如下图是我用电信宽带的smartdns配置图。
网络-接口-LAN,设置自定义dns服务器为192.168.1.1。
DHCP/DNS开启【忽略解析文件】
这一步可以在开启Passwall之前做,也可以在开启Passwall之后做。
二、设置Passwall DNS
组合1:
国内DNS服务器:127.0.0.1#6053
DNS模式:ChinaDNS-NG
ChinaDNS-NG可信DNS:pdnsd+TCP节点解析DNS
DNS地址:GoogleDNS或OpenDNS
代理模式:大陆白名单
工作流程:gfwlist域名只向7914端口的pdnsd查询,pdnsd通过TCP节点(就是指定的代理节点)用GoogleDNS或OpenDNS查询。
常用国内域名只向国内DNS服务器(这里就是smartdns)查询。
其它域名同时向国内DNS和可信DNS查询,返回的国内IP用smartdns的查询结果,国外IP用可信DNS的查询结果。
就是说,返回的国内IP对本地优化,国外IP对代理节点优化。
所以这种模式适合使用大陆白名单,如果代理模式用GFW名单,那么访问国外网站时,由于返回的IP不对本地优化,速度上不是最快。
路由器上测试:
dig www.anandtech.com @127.0.0.1 -p 6053
返回184.30.228.207(美国)
dig www.anandtech.com @127.0.0.1 -p 7914
返回96.6.73.111(新加坡)
dig www.anandtech.com @127.0.0.1 -p 7913
返回96.6.73.111(新加坡)
dig www.anandtech.com @127.0.0.1 -p 53
返回96.6.73.111(新加坡)
本地ping 184.30.228.207(美国)166ms
本地ping 96.6.73.111(新加坡)204ms
经测试,chinadns-ng的7913端口选择了可信dns 7914端口查询的结果,这个国外IP对代理节点优化(代理节点是新加坡),但对本地不优化(访问比用smartdns解析的ip慢)。
组合1有一个小缺点,因pdnsd带有缓存,导致极少数国内域名chinadns-ng有时会返回对应的国外ip,比如www.guancha.cn。
(这个问题我一直没解决,所以我本人用的是组合2。)
组合2:
socks5节点:选一个和TCP节点相同的
国内DNS服务器:127.0.0.1#6053
DNS模式:ChinaDNS-NG
ChinaDNS-NG可信DNS:dns2socks+Socks5解析
DNS地址:GoogleDNS或OpenDNS
代理模式:大陆白名单
工作流程和组合1一样,但解决了组合1存在的缺点。
组合3:
UDP节点:与TCP节点相同
国内DNS服务器:127.0.0.1#6053
DNS模式:ChinaDNS-NG
ChinaDNS-NG可信DNS:GoogleDNS或OpenDNS
代理模式:大陆白名单
工作流程和前面基本一样,但这里没有7914端口了。
注意要开启UDP节点,这样国外域名的ip会通过代理节点返回,对代理节点优化。
如果没有开启UDP节点,国外域名的ip会通过smartdns返回,对本地节点优化,所以没有开启UDP节点的话,最好使用GFW名单模式。
组合3缺点:如果开启了UDP节点,可能负载均衡不会正常工作。
组合4:
socks5节点:选一个和TCP节点相同的
国内DNS服务器:127.0.0.1#6053
DNS模式:dns2socks+Socks5解析
DNS地址:GoogleDNS或OpenDNS
代理模式:GFW名单
组合4因为不使用chinadns-ng,所以也就没有了国内外IP分流的功能。
gfwlist域名通过socks5节点查询,对代理节点优化。
国内域名和其它国外域名返回smartdns的结果,对本地优化。
所以建议使用GFW名单模式。
路由器上测试:
dig www.anandtech.com @127.0.0.1 -p 6053
返回184.30.228.207(美国)
dig www.anandtech.com @127.0.0.1 -p 7913
返回96.6.73.111(新加坡)
dig www.anandtech.com @127.0.0.1 -p 53
返回184.30.228.207(美国)
组合5:
国内DNS服务器:127.0.0.1#6053
DNS模式:pdnsd
DNS地址:GoogleDNS或OpenDNS
代理模式:GFW名单
工作流程和组合4一样,也是建议配合GFW黑名单模式。
因为pdnsd带有缓存,理论上第二次打开gfw域名会快一点。
注意:用了组合4和5的配置,由于没有chinadns-ng的ip分流功能,此时非gfwlist列表的被污染的域名只能通过Passwall的国内DNS服务器(这里用了smartdns)返回,比如dlercloud.com等很多机场域名。如果smartdns里没有配置防污染的tcp或tls dns服务器,那么就不可能打开这类网站。除非你手动在Passwall的黑名单里添加这些域名。
总结:
如果用GFW模式,建议组合4或5。
如果用大陆白名单模式,建议组合2或1。
无论如何都建议在smartdns里添加1-2个防污染的tcp或tls 国内dns服务器,比如中科大或红鱼DNS。
附:SmartDNS 黑名单 IP
blacklist-ip 4.36.66.178 blacklist-ip 8.7.198.45 blacklist-ip 31.13.64.1 blacklist-ip 31.13.64.33 blacklist-ip 31.13.64.49 blacklist-ip 31.13.65.1 blacklist-ip 31.13.65.17 blacklist-ip 31.13.65.18 blacklist-ip 31.13.66.1 blacklist-ip 31.13.66.23 blacklist-ip 31.13.66.6 blacklist-ip 31.13.68.1 blacklist-ip 31.13.68.22 blacklist-ip 31.13.69.129 blacklist-ip 31.13.69.160 blacklist-ip 31.13.69.33 blacklist-ip 31.13.69.86 blacklist-ip 31.13.70.1 blacklist-ip 31.13.70.20 blacklist-ip 31.13.71.23 blacklist-ip 31.13.71.7 blacklist-ip 31.13.72.1 blacklist-ip 31.13.72.17 blacklist-ip 31.13.72.23 blacklist-ip 31.13.72.34 blacklist-ip 31.13.72.54 blacklist-ip 31.13.73.1 blacklist-ip 31.13.73.17 blacklist-ip 31.13.73.23 blacklist-ip 31.13.74.1 blacklist-ip 31.13.74.17 blacklist-ip 31.13.75.17 blacklist-ip 31.13.75.18 blacklist-ip 31.13.76.16 blacklist-ip 31.13.76.8 blacklist-ip 31.13.77.33 blacklist-ip 31.13.77.55 blacklist-ip 31.13.78.65 blacklist-ip 31.13.78.66 blacklist-ip 31.13.79.1 blacklist-ip 31.13.79.17 blacklist-ip 31.13.80.1 blacklist-ip 31.13.80.17 blacklist-ip 31.13.81.1 blacklist-ip 31.13.81.17 blacklist-ip 31.13.82.1 blacklist-ip 31.13.82.17 blacklist-ip 31.13.82.23 blacklist-ip 31.13.83.1 blacklist-ip 31.13.83.16 blacklist-ip 31.13.83.8 blacklist-ip 31.13.84.1 blacklist-ip 31.13.84.16 blacklist-ip 31.13.84.8 blacklist-ip 31.13.85.1 blacklist-ip 31.13.85.16 blacklist-ip 31.13.85.8 blacklist-ip 31.13.86.1 blacklist-ip 31.13.86.16 blacklist-ip 31.13.86.8 blacklist-ip 31.13.97.245 blacklist-ip 31.13.97.248 blacklist-ip 37.61.54.158 blacklist-ip 46.82.174.68 blacklist-ip 59.24.3.173 blacklist-ip 64.13.192.74 blacklist-ip 64.13.192.76 blacklist-ip 64.13.232.149 blacklist-ip 64.33.88.161 blacklist-ip 64.33.99.47 blacklist-ip 64.66.163.251 blacklist-ip 65.104.202.252 blacklist-ip 65.160.219.113 blacklist-ip 66.45.252.237 blacklist-ip 66.220.146.94 blacklist-ip 66.220.147.11 blacklist-ip 66.220.147.44 blacklist-ip 66.220.147.47 blacklist-ip 66.220.149.18 blacklist-ip 66.220.149.32 blacklist-ip 66.220.149.99 blacklist-ip 66.220.151.20 blacklist-ip 66.220.152.17 blacklist-ip 66.220.152.28 blacklist-ip 66.220.155.12 blacklist-ip 66.220.155.14 blacklist-ip 66.220.158.32 blacklist-ip 67.15.100.252 blacklist-ip 67.15.129.210 blacklist-ip 67.228.37.26 blacklist-ip 67.228.74.123 blacklist-ip 67.228.102.32 blacklist-ip 67.228.126.62 blacklist-ip 67.228.221.221 blacklist-ip 67.228.235.91 blacklist-ip 67.228.235.93 blacklist-ip 69.63.176.143 blacklist-ip 69.63.176.15 blacklist-ip 69.63.176.59 blacklist-ip 69.63.178.13 blacklist-ip 69.63.180.173 blacklist-ip 69.63.181.11 blacklist-ip 69.63.181.12 blacklist-ip 69.63.184.14 blacklist-ip 69.63.184.142 blacklist-ip 69.63.184.30 blacklist-ip 69.63.186.30 blacklist-ip 69.63.186.31 blacklist-ip 69.63.187.12 blacklist-ip 69.63.189.16 blacklist-ip 69.63.190.26 blacklist-ip 69.171.224.12 blacklist-ip 69.171.224.40 blacklist-ip 69.171.224.85 blacklist-ip 69.171.225.13 blacklist-ip 69.171.227.37 blacklist-ip 69.171.228.20 blacklist-ip 69.171.228.74 blacklist-ip 69.171.229.11 blacklist-ip 69.171.229.28 blacklist-ip 69.171.229.73 blacklist-ip 69.171.230.18 blacklist-ip 69.171.232.21 blacklist-ip 69.171.233.24 blacklist-ip 69.171.233.33 blacklist-ip 69.171.233.37 blacklist-ip 69.171.234.18 blacklist-ip 69.171.234.29 blacklist-ip 69.171.234.48 blacklist-ip 69.171.235.101 blacklist-ip 69.171.235.16 blacklist-ip 69.171.235.64 blacklist-ip 69.171.237.16 blacklist-ip 69.171.237.26 blacklist-ip 69.171.239.11 blacklist-ip 69.171.240.27 blacklist-ip 69.171.242.11 blacklist-ip 69.171.242.30 blacklist-ip 69.171.244.11 blacklist-ip 69.171.244.12 blacklist-ip 69.171.244.15 blacklist-ip 69.171.245.49 blacklist-ip 69.171.245.53 blacklist-ip 69.171.245.84 blacklist-ip 69.171.246.9 blacklist-ip 69.171.247.20 blacklist-ip 69.171.247.32 blacklist-ip 69.171.247.71 blacklist-ip 69.171.248.112 blacklist-ip 69.171.248.128 blacklist-ip 69.171.248.65 blacklist-ip 72.14.205.104 blacklist-ip 72.14.205.99 blacklist-ip 74.86.118.24 blacklist-ip 74.86.12.172 blacklist-ip 74.86.12.173 blacklist-ip 74.86.142.55 blacklist-ip 74.86.151.162 blacklist-ip 74.86.151.167 blacklist-ip 74.86.17.48 blacklist-ip 74.86.226.234 blacklist-ip 74.86.228.110 blacklist-ip 74.86.235.236 blacklist-ip 74.86.3.208 blacklist-ip 75.126.115.192 blacklist-ip 75.126.124.162 blacklist-ip 75.126.135.131 blacklist-ip 75.126.150.210 blacklist-ip 75.126.164.178 blacklist-ip 75.126.2.43 blacklist-ip 75.126.215.88 blacklist-ip 75.126.33.156 blacklist-ip 78.16.49.15 blacklist-ip 88.191.249.182 blacklist-ip 88.191.249.183 blacklist-ip 88.191.253.157 blacklist-ip 93.46.8.89 blacklist-ip 128.121.126.139 blacklist-ip 159.106.121.75 blacklist-ip 169.132.13.103 blacklist-ip 173.252.73.48 blacklist-ip 173.252.100.21 blacklist-ip 173.252.100.32 blacklist-ip 173.252.102.16 blacklist-ip 173.252.102.241 blacklist-ip 173.252.103.64 blacklist-ip 173.252.110.21 blacklist-ip 174.36.196.242 blacklist-ip 174.36.228.136 blacklist-ip 174.37.54.20 blacklist-ip 174.37.154.236 blacklist-ip 174.37.175.229 blacklist-ip 192.67.198.6 blacklist-ip 199.16.156.40 blacklist-ip 199.16.156.7 blacklist-ip 199.16.158.190 blacklist-ip 199.59.148.14 blacklist-ip 199.59.148.140 blacklist-ip 199.59.148.209 blacklist-ip 199.59.148.97 blacklist-ip 199.59.149.136 blacklist-ip 199.59.149.244 blacklist-ip 199.59.150.11 blacklist-ip 199.59.150.49 blacklist-ip 202.106.1.2 blacklist-ip 202.181.7.85 blacklist-ip 203.98.7.65 blacklist-ip 203.161.230.171 blacklist-ip 205.186.152.122 blacklist-ip 207.12.88.98 blacklist-ip 208.43.170.231 blacklist-ip 208.43.237.140 blacklist-ip 208.56.31.43 blacklist-ip 208.101.21.43 blacklist-ip 208.101.48.171 blacklist-ip 208.101.60.87 blacklist-ip 209.36.73.33 blacklist-ip 209.145.54.50 blacklist-ip 209.220.30.174 blacklist-ip 211.94.66.147 blacklist-ip 213.169.251.35 blacklist-ip 216.221.188.182 blacklist-ip 216.234.179.13 blacklist-ip 243.185.187.39
JSON