本帖最后由 kfg 于 2017-8-1 11:57 编辑
20170801更新:内网穿透部分使用了一段时间后,发现ngrok隔一段就无法正常使用了,表现为:浏览器访问会提示xxx.xxx.com找不到,查了一下文档,这种一般是客户端挂了。
检查了客户端,发现ngrok.exe正在运行,可能是有其他问题吧,遂改为另外一种内网穿透:frp,详细内容可以浏览一下网址:
https://github.com/fatedier/frp
https://github.com/fatedier/frp/blob/master/README_zh.md
http://koolshare.cn/thread-65379-1-1.html
我采用的是 clang 帖子中的方法安装的,然后在github上下载客户端,通过简单的配置后,实现了跟ngrok一样的功能,到目前使用2天了,一切正常。希望能一直稳定。在windows上跑一个frp客户端,在centos上也跑一个客户端,预防其中一个挂了,另外一个还可以用。
去年5月底的时候,在交易区收了一台占美1037u的无风扇小主机,包括主机、1G内存、无线网卡+电源全套。到手后,自己加多个1T的2.5寸HDD,跑了黑群晖,黑群晖开了Docker,跑xware下载,一直挺稳定的。先上几张图来看看:
主机外壳是铝的,厚度大概3厘米,正面看起来也就2台iPhone6 Plus一样大。外观看起来是很整洁的,正面只有一个赛扬的标签贴,没有多余的东西。请忽略上面的ipx线和U盘(黑群晖启动U盘)。
底部也很简洁,四周4个黑色的螺丝是底盖板的固定螺丝,左下角4个银色的螺丝是2.5寸硬盘的固定螺丝,还有4个脚垫以及一些镂空散热孔。
前面就更简单了,就一个电源开关和指示灯。
后面的接口就多一些了,从上到下分别是麦克风、音频输出,4个USB 2.0,一个RJ45,一个VGA,一个HDMI,还有DC电源接口。接口其实很丰富的,但是对于我来说,除了电源和RJ45接口之外,其他的也就是装系统那会儿需要,过后都不需要了。
这是顶部,有2个USB 2.0的接口,还有2个SMA天线接口,以及一些镂空散热口。为什么会有2跟奇怪的IPX线,就是这两个SMA天线接口的线了。主板上是有个mini PCI-E无线网卡接口的,不过对我来说没什么用我就拆下来了,不过一时找不到合适的工具拆下SMA头,就留着它们了。
卸下底盖板上4个固定螺丝,可以看到主板其实很小一块,也就是比一台iPhone6 Plus略大一点点而已。幸亏主板不算大,还有空间可以给我装多一个SSD在里面。
拆开之后,你们会发现好像没看到CPU和芯片组,因为CPU和芯片组在主板的背面,通过硅脂与机箱紧密粘在一起,也就是说这个机箱就是一个巨大的散热器,一个Fanless的机箱,所以如果平时去摸机箱是会觉得温热的,如果在夏天,偶尔感觉还是有点热的。要注意散热和通风。 我们来细看主板,主板尺寸虽然小,但是接口和扩展功能还是不错的。可以看到,主板上有1个DIMM槽,2个SATA口,1个4针D口电源口,1个MSATA槽以及1个Mini PCI-E槽。 这台机子已经黑群晖了一年左右,一直都很稳定,唯一一次出现问题是小区停电后无法开机,在网上一搜,原来是BIOS的问题,只要对BIOS放电就解决了。
原来接的PHP的单子,对方都会提供2台VPS,一台是生产环境,一台是测试环境。最近接了几个单子,对方只有生产环境,没有测试环境,在自己电脑上搞测试环境有些麻烦: 1、大多数时间晚上在家里搞,有时候在办公室的时候也会搞搞,同步不方便; 2、不喜欢电脑上再去装个虚拟机或者php环境。 虽然自己在国外有一台vps,但是速度很慢,用起来不爽。 所以就生起了在占美小主机上搞测试环境的念头。
想了一想,有以下的几个需求: 1、黑群晖要继续,而且原来1T硬盘上的数据要继续保留; 2、要有LNMP的环境; 3、要有IIS + PHP的环境,有时候生产环境就是IIS + PHP,可以方便调试,上传后即可使用。
基于这些需求,就有以下的几个方案了: 1、黑群晖Docker上开PHP+MySQL,但是这样就没有IIS + PHP; 2、跑ESXI,然后虚拟机跑windows server、Centos和黑群晖,这个方案ESXI有点难搞,主要是硬盘直通和休眠的问题; 3、跑Windows server 2016,开IIS + PHP,再开Hyper-V跑Centos和黑群晖。 想来想去,还是方案3比较好,也容易实现。
方案定下来后,就开始折腾了。
目前的配置是1037u + 1G RAM + 1T HDD,内存明显不够,要增加,1T的硬盘要保留数据,那就需要增加额外的硬盘,刚好之前手头上有个20G的msata SSD,还有1个Intel X18-M G2 80G的SSD(之前用在台式机上,后来台式坏了,也没去修,SSD就闲置下来了,带了个micro sata转sata的转接头),接2个sata硬盘,那就需要一个1分2的sata电源线。 麻溜的在咸鱼和淘宝上买了根8G的内存和1条一分二电源线,就开始装机了。 先把8G内存换上,再安装MSATA的20G SSD,这两个都很简单。接下来就是搞2个硬盘了。不得不吐槽,本来以为主板留2个sata接口,应该可以很容易的安装2个2.5寸的SATA硬盘,实际上装起来并不是很好装。底盖上只留下1个硬盘的安装螺丝空,第二个硬盘没地方固定。其实最好的方案应该是买多个大容量的msata ssd。没办法,谁让自己穷,能省就省吧。 研究比划了一番,第二个sata硬盘只能放在图中红框的位置,如果盖上底盖,应该在另外一个硬盘的下方。型号Intel X18-M比较小,就算加上转接头应该也能装上。折腾了一番,勉强将2个硬盘装好。这个照片就没拍了,实际上也是不敢拍,太丑了,怕被笑话,嘿嘿。 一次点亮,插上事先做好的windows server 2016安装U盘开始装系统,选择安装标准版,基本上就是下一步下一步的去安装了,中间遇到输入序列号的,先选择没有序列号,等安装完后再搞定激活的问题。 大概十几分钟之后,Windows Server 2016就安装完毕了。因为我还有微软DreamSpark的账号,可以拿到Windows Server 2016三个版本各一个序列号,所以很方便就激活了。 然后就是添加Hyper-V功能了,也是按照向导一步一步的进行就可以了。
Hyper-V安装完毕后,我们需要添加一个虚拟交换机,按照下面的步骤一步一步就可以了。 接下来添加2个虚拟机,一个是黑群晖,一个是CentOS7。
我打算直接将原来的黑群晖迁移过来,那么就需要先做两个准备,1,将原来黑群晖的启动U盘做成VHD,用来作为虚拟机的虚拟硬盘,2,要直通原来的1T的HDD。 下面来说说怎么把原来黑群晖的启动U盘做成VHD。这个需要用到几个软件,分别是UlrtaISO和StarWind Software Image Converter。 UltraISO用来将启动U盘读取并保存为IMG文件,StarWind Converter用来将IMG文件转换为VHD文件。具体步骤如下: 1、 先将原来黑群晖的启动U盘出入电脑,然后运行UltraISO;
2、 点击菜单中的“启动”,选择“制作软盘镜像文件”;
3、 在弹出来的对话框中选择U盘的盘符,例子中为F盘(23.9MB),并点击制作,很快就会提示制作完成。
4、 在镜像文件的保存位置找到刚才保存文的boot.ima文件,将其重命名为boot.img;
5、 运行StarWInd Converter,源文件选择刚才保存的boot.img文件,点击下一步;
6、 选择目标镜像格式,我们这里选择MS Virtual PC growable image,点击下一步,我们选择目标文件的保存位置;
7、 点击下一步,程序很快就会将img文件转换为vhd文件。
接下来是第二个准备,直通原来的1T 的HDD,这个比较简单,运行windows的磁盘管理程序,找到1T的HDD,点击右键后,在右键菜单中选择“脱机”,就可以直接在虚拟机使用这个物理硬盘了。
先来创建黑群晖的虚拟机,这个没啥好说的,内存1G就够了,处理器单核就可以了,交换机那里选择刚才创建的虚拟交换机,选择第一代虚拟机,然后添加2个硬盘,第一个是IDE的,选择我们刚才的转换好的VHD文件,第二个是SCSI,选择物理硬盘。
自动启动操作选择“始终自动启动此虚拟机”,可以在断电、重启1037U主机后自动启动黑群晖。自动停止操作选择“保存虚拟机状态”。
一切设置完毕后,启动黑群晖虚拟机,duang~Duang~duang~,直接到登录界面,用原来的root和密码登录后,查看一下ip,还是原来的IP,用浏览器访问,登录进去后,发现所有的文件、设置都保留着。
至于洗白的事情,之前独立黑群晖的时候试过,可以访问,但是速度很慢,几乎可以说没有使用价值,这次就不搞了,我下面用别的方法来解决这个问题。 至此,黑群晖虚拟机搞定。
再来搞定CentOS7,这个也没啥好说的。创建一个新的Hyper-V虚拟机,因为我要跑LNMP(Linux+Nginx+PHP+MySQL),所以硬件配置要高一点,那内存就给2G,处理器还是单核,交换机也是刚才的虚拟交换机,第一代虚拟机,硬盘选择IDE,容量给动态64G,再添加一个IDE光驱,选择下载的CentOS7最小版镜像ISO文件,然后启动虚拟机,按照CentOS的安装向导完成安装。 用root账号登录后,搞定LNMP的安装设置,还有YII2这个PHP框架。这里有个蛋疼的事情,我用composer 来部署YII2框架,基本上很难composer部署成功,会出现奇葩的错误,PHP爆内存了。一开始PHP我设置memory_limit=1G,不行,那给CentOS添加3G的Swapfile,memory_limit设置到4G,也还是爆。实在没办法。某天晚上突发奇想,去掉composer的中国镜像源,用官方源,居然部署成功了。至今想不明白。
到这里,这个1037U基本上算搞定了。哦,不对哦,忘了黑群晖洗白这个事情。 前面说过了,之前独立黑群晖的时候洗白过,但是效果不好,基本上没有使用价值。那么我就用另外一个方案来解决,用第三方的内网穿透来解决。本来想用向日葵之类的方案,一看基本上都是要钱的,而且是持续要钱,这个不大符合我的想法,没办法,qiong啊。。。 那就看看有没有别的方案了,正好之前在折腾路由器的时候,看到一个反向内网穿透的方案Ngrok。那么我们试试看ngrok吧。 Ngrok官方有提供服务器,也有一些第三方免费的,当然也有收费,就先找个免费的试试看吧。使用了一下,发现确实可以实现内网穿透,但是速度一般,而且免费的一般会限制tcp隧道数量,而且需要比较多的TCP隧道。那就自己搞吧。Google了不少关于自己部署Ngrok的文章和帖子,对如何部署Ngrok已经了然在胸了。开搞。。 首先,要有一台公网的VPS,而且是不被墙的,本着先试试免费产品的原则,看了一个阿里云和腾讯云,发现虽然都有免费的方案,但是免费期太短了。正好Google Cloud最近有1年免费试用(账户赠送300美元),就申请了一个,申请了东亚1号,服务器应该是在台湾,对于我们来说,应该是速度最快的一个了。 选择最便宜的配置,每个月5美元多点,剩下的用来支付流量,算下来大概能有80G/月的流量,应该足够了。系统选择CentOS7。因为最低配置仅有0.6G内存,是不大够用了,那就加多2G的Swapfile吧。 先修改一下实例的一些设置,创建一个外部静态IP,方别使用。
然后开始安装Ngrok。Google了一番,找到了不少的例子,主要是参考了以下的连接: 1、 http://www.sunnyos.com/article-show-48.html 2、 https://imququ.com/post/self-hosted-ngrokd.html 3、 http://www.jianshu.com/p/b254547b9fe5 具体编译安装的过程无非就是先安装go环境,然后下载ngrok的代码,为域名生成证书,之后编译服务器端,再编译客户端(Linux和Windows的),之后就是运行服务器端Ngrokd了,详细的过程可以看看上面的3个连接,都是比较清楚的。主要要说明一下服务器端ngrokd运行和客户端的配置文件。 以下是服务器端ngrokd启动的命令行: /usr/local/ngrok/bin/ngrokd -domain="ngrok.abc.com" -httpAddr=":8080" -httpsAddr=":8088" -tunnelAddr=":4443" 其中abc.com,是你名下自己的域名,需要给开启泛域名解析,因为我们接下来会用到多个子域名,所以要讲ngrok.abc.com和*.ngrok.abc.com都解析到这个虚拟机实例的外部IP。httpAddr是http访问的端口,httpsAddr是https访问的端口,tunnelAddr是指监听客户端连接的端口。
以下是客户端配置文件,是我目前正在使用的。 - server_addr: "ngrok.abc.com:4443"
- trust_host_root_certs: false
- tunnels:
- host_iis:
- subdomain: iis
- proto:
- http: 80
- host_mstsc:
- remote_port: 53389
- proto:
- tcp: "3389"
- host_ftp:
- remote_port: 50021
- proto:
- tcp: "21"
- linux_ssh:
- remote_port: 40022
- proto:
- tcp: "192.168.1.69:22"
- linux_nginx:
- subdomain: nginx
- proto:
- http: "192.168.1.69:80"
- dsm_web:
- subdomain: dsm
- proto:
- http: "192.168.1.231:5000"
- https: "192.168.1.231:5001"
- dsm_cloudstaion:
- remote_port: 36690
- proto:
- tcp: "192.168.1.231:6690"
复制代码
其中,server_addr: "ngrok.abc.com:4443"是服务器端域名和监听端口; - host_iis:
- subdomain: iis
- proto:
- http: 80
复制代码
这是一个http协议的tunnel,转换过来就是iis.ngrok.abc.com:8081去访问客户端本身的80端口; - host_mstsc:
- remote_port: 53389
- proto:
- tcp: "3389"
复制代码
这是一个tcp协议的tunnel,转换过来就是ngrok.abc.com:53389去访问客户端本身的3389端口,嘿嘿,就是windows的远程桌面了。 在客户端,也就是1037u的windows server 2016上开一个以管理员运行的命令行窗口,输入以下内容:ngrok -config=ngrok.cfg start-all
注:上述图片是从http://www.sunnyos.com/article-show-48.html 借用的,谢谢sunny Tunnel Status 是online,即表示客户端已连接上服务器端了,可以正常使用的。
再1037u还是黑群晖的时候,我就曾在路由器上使用过ngrok,使用的是sunny提供的免费的ngrok,当时感觉客户端不是太稳定,经常会发生无法连接的问题。所以,这次另外部署ngrok,就像顺便解决这个问题。当然ngrok客户端本身的稳定性我没办法处理,不过我从另外的方面来监测ngrok客户端运行的情况,写了一个简单的批处理文件,用来判断ngrok是否在运行,如果没有运行则启动一个客户端。
- @echo off
- tasklist|find /i "ngrok.exe"
- if %errorlevel% == 1 (goto yes) else (goto no)
- :yes
- echo ngork stopped
- start d:\ngrok\ngrok.bat
- exit
- :no
- echo ngrok running
- exit
复制代码
然后在任务计划程序中加入一个任务,每隔半个小时运行一下这个批处理文件。这样就可以解决ngrok客户端进程出问题自杀的问题。但是这个解决方案也有不足,只能ngrok客户端进程自杀后自动重新运行,如果进程没有自杀,则无法重新运行。
按照上面的截图设置任务计划即可了。运行了1个月左右,在外面都没发生过连接不上问题。
顺便还在google cloud上配置了个看风景的,用一键脚本,简单方便。
至此,1037u就重新折腾了一遍,可以方便的在外面连回家里的黑群晖、部署的PHP开发环境等等。
说明一下:有些步骤,例如windows server 2016的安装、Hyper-V的安装、Ngrok的编译安装过程我都省略了,只提到了这些步骤中的一些重点,它们详细的安装过程在google/百度都可以搜索得到。如果有人在安装或者使用过程中遇到问题,可以回帖提出,我看看是否可以帮忙解决。
|