第十九周

课程 日期 时间
微机原理 1月8号 13:30 - 15:10
计算机网络技术 1月9号 13:30 - 15:10
数字信号处理 1月10号 8:00 - 9:40
毛概 1月10号 10:20 - 12:00
通信原理 1月11号 15:50 - 17:30

存在这样一种情况,经常在非服务器环境下开发python程序,即使在本地运行良好,但是在服务器的环境下就会存在问题,如何保证开发环境跟运行环境一致呢?

这里通过PyCharm远程解释器加上自动文件同步功能,实现

  • 本地编译 -> 同步到服务器 -> 远程debug

的方式来调试程序。

远程服务器的同步配置

局域网下的服务器IP地址为: 192.168.2.192,python版本3.6, 且在项目下已有虚拟环境,开启ssh服务。

首先我们需要配置PyCharm通服务器的代码同步,打开Tools | Deployment | Configuration

点击左边的“+”添加一个部署配置,输入名字,类型选SFTP

确定之后,再配置远程服务器的ip、端口、用户名和密码。root path是文件上传的根目录,注意这个目录必须用户名有权限创建文件。

然后配置映射,local path是你的工程目录,就是需要将本地这个目录同步到服务器上面,我填的是项目根目录。 Deploy path on server 这里填写相对于root path的目录,下面那个web path不用管先

还有一个设置,打开Tools | Deployment | Options,将”Create Empty directories”打上勾,要是指定的文件夹不存在,会自动创建。

上传和下载文件

有几种方法可以实现本地和远程文件的同步,手动和当文件保存后自动触发。这里我选中Automatic upload

手动上传方式很简单,选择需要同步的文件或文件夹,然后选择 Tools | Deployment | Upload to sftp(这个是刚刚配置的部署名称)

如果在服务器存在已有项目,选择Compare with … ,然后全部接受服务器端的文件。

比较远程和本地文件

有时候你并不确定远程和本地版本的完全一致,需要去比较看看。PyCharm提供了对比视图来为你解决这个问题。

选择Tools | Deployment | Browse Remote Host,打开远程文件视图,在右侧窗口就能看到远程主机中的文件

选择一个你想要对比的文件夹,点击右键->Sync with Local,打开同步对比窗口,使用左右箭头来同步内容。

配置远程Python解释器

新建一个python解释器,选择SSH 解释器,由于我上面配置过就直接选模板, 这里请仔细看我的Python解释器是虚拟环境virtualenv,这个要在服务器上面先创建好虚拟环境。

配置Django运行参数

指定启动Host0.0.0.0,表示允许所有ip进行调试 若需要启动web浏览器,指定下地址为服务器端的ip

我们的隐私政策,说明了您通过我们的小程序应用访问和使用“BTBU查询”(下称小程序)过程中信息是如何收集,使用的。就目前而言,我们只使用了最简单的第三方授权登录方式,没有利用任何方式去主动获取您的隐私,我们在后续的过程中如非必要不会在windows程序、App上去请求那些不必要的权限去窥探您的隐私。

1、我们会收集什么信息?

当您使用小程序的过程中,我们会在您自愿选择服务或提供信息的情况下收集您的私人信息,以便向您提供更好的用户服务。 “私人信息”包括您提供给我们的北京工商大学教务处账号、密码等。小程序不会主动收集或请求用户提供这些信息。

2、我们如何使用收集的信息?

我们可能通过以下方式使用信息:

  1. 当您许可并通过交易请求获得小程序的相关产品及服务时;
  2. 当提供客户服务,需要回应您的电子邮件,文件,问题,意见,要求和投诉时;
  3. 当使用产品过程中,为了让您使用产品更加个性化和带来更好的体验,需要分析使用情况和趋势时;
  4. 当需要改进对您的服务体验、管理和操作时,发送给您的许可证明,产品更新,安全警报,支持和管理信息等。

3、信息的披露

我们将对信息严格保密,不会与他人分享这些信息,亦不会将其出售、出租或以其他方式分发给他人。

4、信息的提供

小程序的用户总是可以选择是否披露信息。有些信息是登记我们的服务所必需的,但大多数其他信息的提供是由用户决定的。小程序将视用户舒适度及自主选择为首位。小程序可能为用户提供网络互动活动,为便于用户参予互动活动并获取互动奖品,小程序通常要求申请者在联系方法(通讯地址和电话)之外,还要根据其个人兴趣填写表格。此类信息被小程序用来累积用户数据。如果用户不想提供所要求的信息和参加此类活动,这完全由用户自行决定。

5、未成年人信息及使用

小程序建议:任何未成年人参加网上活动应事先取得家长或其法定监护人(以下简称”监护人”)的书面同意。小程序将根据国家相关法律法规的规定保护未成年人的相关信息。

6、Cookies

通过使用Cookies,小程序向用户提供简单易行并富个性化的网络体验。一个Cookies 是少量的数据,它们从一个网络服务器送至您的浏览器并存在计算机硬盘上。小程序使用Cookies 是为了让其用户受益。Cookies 可用于储存用户偏好设置、改善用户体验以及跟踪用户趋势(例如用户使用小程序的方式),从而帮助我们提高服务质量。Cookies 能帮助我们确定您连接的页面和内容,您在小程序特定网页上花费的时间和您所选择的小程序的服务。 Cookies 是放置在小程序的计算机或服务器上的身份证。它只能被设置它们的服务器阅读,而且不能执行任何代码或病毒。Cookies 使得小程序能更好、更快地为您服务,并且帮助您对小程序进行一些个性化的设置。然而,您应该能够控制Cookies 是否以及怎样被您的浏览器接受。请查阅您的浏览器附带的文件以获得更多这方面的信息。

简而言之,小程序将Cookies 当作一种便捷的体验,其作用是使得用户在从小程序的一项服务转到另一项服务时,无须再证明自己的身份。您可以通过修改浏览器设置的方式拒绝Cookies,如果您选择拒绝Cookies,则您可能无法登录或使用依赖于Cookies 的小程序服务或功能。

7、链接

小程序承诺在现有技术许可的范围内采取合理必要的预防措施保护用户的数据安全,但是所有的互联网服务商都无法保证数据百分百安全,因此小程序也无法做出绝对的保证。我们会在合理商业运作的基础上,采取尽可能完备的措施保护您存放在小程序中的数据。 您的个人信息和数据受到多重保护,包括人员的、电子的和程序上的。

如果小程序得知安全系统漏洞,我们可能联络您提供给我们的电子邮件地址或在我们的网站上发布通知,以试图告知您并提供关于保护措施(如适用)的信息。

8、数据安全

我们仅在本《隐私政策》所述目的所必需的期间和法律法规要求的时限内保留您的个人信息。

我们使用各种安全技术和程序,以防信息的丢失、不当使用、未经授权阅览或披露。例如,在某些服务中,我们将利用加密技术(例如SSL)来保护您提供的个人信息。但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。您需要了解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。

9、更新与公开信息

小程序鼓励用户更新和修改其个人信息以使其有效。用户能在任何时候非常容易地获取并修改其个人信息。用户可以自行决定修改、删除他们的相关资料。请记住,无论何时您自愿披露个人信息(如在网络上公布), 此种信息可能被他人收集及使用,因此造成您的个人信息泄露,小程序不承担责任,如果您将个人信息公布在上述渠道,您就有可能造成个人信息泄露。因此,我们提醒并请您慎重考虑是否有必要在上述渠道公开您的个人信息。

最后,您是唯一对您的账号和密码信息负有保密责任的人。任何情况下,请小心妥善保管。

10、修改与更新

由于本隐私政策可能不时被更新,您应定期查看以了解我们保护所收集之个人信息的方案及程序。您继续使用小程序服务即构成您对本隐私政策及其任何更新版本的同意。有关本声明或小程序的隐私措施的问题请与我们联系。

背景

最近在开发一款微信小程序,实现学校教务管理的信息(成绩、课表等)的抓取与发布。 教务系统服务器处于校内网的环境,在外网下,有且仅有通过vpn账号和学校内部服务器通信。

要实现小程序查询功能,有以下两种方式

  1. 查询服务器完全部署在云端,通过vpn账号与学校联通;
  2. 查询服务器部署在内网环境下,通过内网穿透的方式,与云端的代理连通。

一般来说,vpn账号关乎个人隐私,与网络费用挂钩。此次小程序的开发,我希望遵循简化安全的宗旨,希望借助ngrok内网穿透服务,来代理网络的https请求,转发到内网的服务器上。

安装GO环境

网络服务器的环境为ubuntu 18.04 x64,借助apt包直接安装

1
sudo apt install build-essential golang openssl
  • 查看go语言版本
1
go version

下载ngrok源码

当前最新的ngrok版本为2.x,但是最新的2.x版本不开源,仅提供1.x可用。且ngrok分服务端和用户端两部分,一般来说,云端服务器做服务端,内网服务端做用户端,且编译依赖于SSL证书,相当于仅仅能一对一使用。

1
2
git clone https://github.com/inconshreveable/ngrok.git
cd ngrok

配置私有SSL证书信息

  • 注意:使用私有的SSL证书,并不会被浏览器/微信小程序开发承认。小程序要求所有request要求必须是经过https加密传输,并且安全SSL证书认证的。当前https认证第三方组织的少有免费的。
1
2
3
4
5
6
7
8
9
10
11
NGROK_DOMAIN="btbuquery.top"    #注意域名换成你自己的
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt

#将生成的证书文件拷贝到指定位置,替代默认证书
cp base.pem assets/client/tls/ngrokroot.crt
cp server.crt assets/server/tls/snakeoil.crt
cp server.key assets/server/tls/snakeoil.key

使用阿里云免费的SSL一年认证

来自由DigiCert Inc公司提供了一年时长的免费SSL认证,因为在编译依赖SSL证书

从阿里云下载到认证的证书

共四个文件,将第二个后缀重命名为xxxxxxxxxxx.crt,传到ngrok的目录下

复制到assets/server/tls/文件夹下

1
2
cp *.crt assets/server/tls/snakeoil.crt
cp *.key assets/server/tls/snakeoil.key

编译服务端ngrokd

1
2
3
4
5
6
7
# 编译64位linux平台服务端
GOOS=linux GOARCH=amd64 make release-server
# 编译64位windows客户端
GOOS=windows GOARCH=amd64 make release-server
# 编译是64位mac客户端
GOOS=darwin GOARCH=amd64 make release-server
# 如果是32位,GOARCH=386
  • 关于arm的编译
1
GOOS=linux GOARCH=arm make release-server

编译客户端ngrok

按照平台需求,设置不同参数,与编译服务端一致。

1
make release-client

执行后会在ngrok/bin目录及其子目录下看到服务端ngrokd和客户端ngrok二进制可执行文件

运行服务端ngrokd

1
2
cd bin/
sudo ./ngrokd -domain="btbuquery.top" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"

httpAddr:设置代理的http端口,默认80; httpsAddr:设置代理的https端口,默认443; tunnelAddr:设置ngrok通信端口,默认4443。

运行客户端ngrok

将云服务器上的ngrok/bin/ngrok文件传输到在内网服务器上,以在ngrok文件下为例:

  1. 新建一ngrok.cfg文件,写入以下内容
  • http代理:设置子域名(以www为例),本地端口(以8000为例)
  • ssh代理:远程端口22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server_addr: btbuquery.top:4443
trust_host_root_certs: true # 需要第三方SSL认证
inspect_addr: 0.0.0.0:4040

tunnels:
http:
proto:
http: 8000
subdomain: "www"

https:
proto:
https: 8000
subdomain: "www"

ssh:
remote_port: 222
proto:
tcp: 22


  • 注意:若使用私有SSL认证,必须设置trust_host_root_certsfalse
  1. 运行客户端
1
./ngrok -log=ngrok.log -config=ngrok.cfg start http ssh

相当于实现 http://www.btbuquery.top 转发到内网 127.0.0.1:8000 https://www.btbuquery.top 转发到内网 127.0.0.1:8000 tcp://btbuquery.top:222 转发到内网 120.0.0.1:222

服务端加入系统启动服务

  1. 在ngrok文件下新建start.sh脚本,写入以下内容
1
/root/project/ngrok/bin/ngrokd -domain="btbuquery.top" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
  1. /etc/init.d新建ngrok文件,写入以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
### BEGIN INIT INFO
# Provides: ngrok
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the ngrok Proxy.
### END INIT INFO

ngrok_path=/root/project/ngrok #指定ngrok文件夹

case "$1" in
start)
echo "start ngrok service.."
sh ${ngrok_path}/start.sh
;;
*)
exit 1
;;
esac
  1. 加入开机启动
1
2
3
cd /etc/init.d/
sudo chmod 755 ngrok
sudo update-rc.d ngrok defaults 90
0%