0. 前景提要
由于一直有个想法,就是搞一套自己的云端开发环境。
0.1 希望不管是在家里,还是公司,还是任何一个地方,甚至是手机、平板。只要能联网,就能连接上自己熟悉的开发环境开始开发。
0.2 由于阿里服务器太贵了(阿里云香港1H2G1M,3年1800+),并且在国内的服务器、网站一定要备案(我玩腻了com域名,在搞花里胡哨的后缀域名,不能备案),就很麻烦(虽然我也不搞法外之事)。而国外的服务器呢,很便宜,但是可用性要持怀疑态度,并且可能经常换服务器(被墙了、IDC跑路了、又发现了一家新的更便宜更好的IDC)等原因,来回配环境、备份迁移数据库,太麻烦了。
所以萌生了一个念头---->组建自己的家用小型服务器
这样就可以:
0.3 省钱,硬件不坏就可以一直用,哪个硬件坏了更换哪个
0.4 稳定,数据库的数据在自己的硬盘上,写好定时任务定期同步至onedrive和googledrive,稳定性99.99999%
1. 硬件准备
家用小型服务器嘛,我的原则是【小、安静、功耗低、性能强劲】。一开始在这几项里面纠结,我相信有组建家用服务器、NAS、HTPC的人都考虑过下面几款:
【新创云等超迷你无风扇主机】优点:小,安静,功耗低。缺点:J1900性能不太够(600价位),当小服务器跑项目还行,我还想搭建开发环境就不够了,没有硬盘位没法当NAS,视频解码能力相当差,当HTPC够呛。而I3/I5/I7低压u的价格都要到1000+去了,真的贵,不划算,最后被我排除。(如果没打算搭建开发环境或者当NAS、HTPC,这款非常好)
【星际蜗牛】优点:价格便宜(普通C款300,皇帝C款450),功耗低,硬盘位多,C款皇帝版13SATA位,双网口可做软路由。缺点:看起来很好,但是问题有点多。电源一般都要换,风扇也要换,换了声音也有点大。体积不小有点占地方。这么添来添去一换下来价格就上去了,并且我其实没有做NAS的需求,硬盘太贵我买不起。。。J1900性能同样不够我用。除了机箱最好,其他的硬件品质都一般般。所以这款也被我PASS了(如果拿来做NAS的,我觉得C款皇帝版是首选,到手后换个靠谱电源扔储物室里完全OK)
【酷播云2】优点:功耗低,性能比上面俩好(J3455),用料比较扎实。缺点:价格相比上面两个有点贵了(720无硬盘内存),只有两个SATA口(如果组件家用HTPC,小服务器,8T需求以下的NAS,这个首选)。但是这个性能仍然是。。。我感觉有些许欠缺。
最后我了解到了【ITX主机】,缺点是价格贵,功耗高了一点。优点可太多了:比星际蜗牛、酷播云体积小的多,可扩展性强得多,性能强几倍,安静程度仅次于无风扇的服务器,离开20厘米就听不见任何声音,硬件都是大牌可信赖稳定性高。
组成了这样的配置:
机箱:迎广肖邦
散热:乔思伯HP400
电源:台电150W
主板:微星B250I PRO
CPU:I7-7700T (ES版)
内存:光威8GDDR4 2133+海力士8GDDR4 2133
硬盘:西部数码240G NVME
这一套下来分别收到手总和是花了1650块钱。比上面的三种方案贵了一些,但是上面的方案要么是配不到16G内存,要么是改装配到了,价格不比这个便宜多少了。
体积小,漂亮,安静,待机功耗不到10W,满载功耗40W,各硬件也基本是二三线牌子,可比上面说的强多了。
后续扩展性的话,主板电阻短接支持到8代U,U也可以换标压的,内存最大支持32G2400,硬盘还有4个SATA口。
整体而言非常满意。
下面附几张偷来的图,机箱是一样的所以拍出来效果也是一样的,大家可以看一下大小
2. 系统准备
这台小服务器,一方面是装数据库当服务器,另一方面也要搭建云开发环境。所以非图形化界面的各种CentOS/Ubuntu Server之类的直接就不考虑,要装带桌面环境的
2.1 【Manjaro】我对Manjaro这个系统可真是又爱又恨。
2.1.1 爱就不谈了,arch系的Linux魅力,想必有所耳闻的都应该知道,AUR,滚动发版,强大的WIKI。
2.1.2 恨的话得谈谈。我目前还只是个Linux小白,后面遇到的问题或许其实有非常简单的解决办法,但是我没法解决:
2.1.2.1 最开始接触Manjaro的时候,我是在Windows上,装了个VMware虚拟机,在虚拟机里面装的Manjaro,然后就遇到了一个问题:不装VMware Tools没法Windows向Manjaro复制粘贴东西,装了VMware Tools,Manjaro没法全屏,窗口就只有600*480,这我谷歌百度都没法解决。
2.1.2.2 Manjaro上装输入法,说实话在Windows上我觉得最好用的输入法是手心,但是在Mac和Linux里就只能选搜狗输入法了,谷歌拼音、小狼豪(RIME)我都不喜欢,没有搜狗拼音顺手。在Manjaro上的搜狗拼音的依赖库是有问题的,需要装很多老版的依赖库,然后软链接过去。可以弄成功,但是真的很麻烦,我这人最讨厌麻烦了,这种无谓的麻烦。
2.1.2.3 在虚拟机里,Manjaro会睡死,没有办法解锁,点什么都没反应,甚至会带着虚拟机睡死,导致任务管理器都没办法强制关闭VMware。
2.1.2.4 上面这些仍然没有浇灭我的热情,我觉得1,3都是虚拟机的BUG,我买了ITX主机以后一定可以解决的。然而上面的硬件都到了,拼好之后装了Manjaro,几天的时间死机了2次(长时间不操作后自动注销,登录进去之后卡在界面,什么都操作不了)【我每次安装都是从Manjaro的官网下的最新iso,非老版/第三方网站下的】,我搭建这小服务器肯定得稳定运行啊。Manjaro被我放弃了。
2.2 【Windows Server、Windows】我本身也是为了学习练手一下Linux环境,这个尽管我最熟悉最喜欢,但是还是要往后稍一稍的,是最后的备选项
2.3 【Ubuntu】之前在虚拟机里一直用的是Ubuntu,用的也习惯了,不美化的话做桌面版太丑了,想换换新的
2.4 【Mint、MX Linux】后续备选(然而我估计要是Deepin遇到问题最后我不用了的话,最有可能还是拐回Ubuntu了,毕竟Linux桌面版实际的老大哥,参照这个下载量:https://snapcraft.io/chromium ,还有谷歌趋势,其它的还是弟弟,除了丑也没别的缺点了)
2.5 【Deepin】国产之光 之前一直听别人吹这个系统,但是我是嗤之以鼻的。。。我觉得没有商业巨头管理维护(如Red Hat系),没有大型企业大规模实际应用,社区活跃度一般般,这系统怎么能用嘛
--------------------------------------真香--------------------------------------
我非常喜欢Deepin的桌面,网上的各种Ubuntu/Manjaro所谓的美化,基本都是给美化成Mac的样子,何必呢???????我喜欢Mac的风格的话我为啥不用Mac???
我不喜欢Mac,我家现在还有一个2016款15寸MacBook Pro,I7,16G,带Touch Bar,给对象用了。对Mac的不喜欢是一点一点累积起来的,除了全局可用的cmd+w/q,cmd的位置非常合理,用大拇指就可以很轻易的按到以外,对Mac没有任何留恋,反倒是想到Mac就头大。
而deepin有显然异于Mac OS的界面(原版Manjaro也有),我非常喜欢。
目前的话,用起来,Ubuntu怎么用Deepin也怎么用,遇到问题了直接搜Ubuntu的解决办法,在Deepin上99%都管用,开箱即用,非常舒服。
所以以下都是基于Deepin的系统来说的,Ubuntu也可以参考着用。
3 软件准备
3.1 富强,这个在博客园不能多说,要被和谐,以后个人博客开起来了在里面补充。重点是不能用带R的,只能原版的,我也不知道为啥。记得开启系统网络代理那里,手动代理,S0CK转发那里填上127.0.0.1:端口,这里不建议用默认的1080,可能会被占用,改个不常用的就行。Chrome也不用按照网上下那个代理插件了,设置好直接用就行了,至少Deepin里面是这样的。
3.2 一台有公网的服务器提供FRP。如果家庭宽带有公网也可以用,不过部分家庭宽带的公网没有80和443端口。有的有80和443端口,hostloc的老哥说也是有井茶叔叔邀请喝茶的风险,不仅仅是涉及到返洞,抱利,帆强什么的,诸如版权问题,交互性(比如论坛/留言),还有一些自己不经意间就违规的情况。所以保险起见还是不要用家庭宽带的端口放网站了,当然要是只放个数据库走数据库的端口这完全没问题。服务器尽量选择延迟低,带宽大的。国内的服务器,阿里,腾讯之类的,也就1-5M的小水管还特别贵。。。实在是扣啊。。。国外的IDC商自己找,建议找香港>日本>新加坡>台湾>美国西海岸圣何塞等有CN2的机房,只拿来做FRP转发,对机器配置无要求,可以买最低配的VPS,但是不能买虚拟空间。
3.3 FRP,这部分重点说一下,FRP的作用是,将请求到FRP SERVER(FRP服务端)某端口的请求,转发至FRP CLIENT(FRP客户端),不论服务端所在的网络环境是否有公网IP。这样的话放在家里的服务器就可以打开一扇对外的大门,具体原理可以自行搜索。
3.3.1 FRPS(FRP 服务端)配置
在公网服务器上下载安装FRP,以Linux服务器为例,输入:
arch
可以查看服务器架构,如果输出x86_64就直接用我下面的代码,如果不是就自己去frp的github https://github.com/fatedier/frp/releases 找包替换地址
如果提示没有安装wget就安装个wget,自行搜索自己服务器系统+安装wget
cd /root # 下载 wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz # 解压 tar -xzvf frp_0.27.1_linux_amd64.tar.gz # 文件夹名改成 frp,不然目录太长了不方便 mv frp_0.27.1_linux_amd64 frp cd frp # 确保 frps 程序具有可执行权限 chmod +x frps
运行一下
./frps --help
如果打印出了很多提示信息,说明安装正确了。不正确的话自行确认安装的版本是否正确
编辑frps.ini,如果没有vim就自行下载,或者用你们习惯的文本编辑方式
vim frps.ini
里面的东西都删掉(如果有的话),换成下面的内容,注意【】内的需要替换成你们自己的,连带【】括号一起删掉,其实各种端口,token,都可以改成自己的
[common] bind_port = 7000 token = 12345678 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin vhost_http_port = 10080 vhost_https_port = 10443 subdomain_host = 【你自己的域名,好像也可以不设置这一条,在客户端直接连IP也行,不过我有域名就直接这么设置了,以后换服务器也方便】
编辑/etc/rc.local,在exit 0 前加上下面这句话,开机自启
nohup /root/frp/frps -c /root/frp/frps.ini &
如果打开这个文件是空的,那就在文件的最后新起一行输入
exit 0
保险起见给文件加上权限
sudo chmod +755 /etc/rc.local
测试一下脚本
sudo /etc/rc.local
要是打印出来的信息没有报错,配置FRPS端的步骤就完成了,重启一下服务器
3.3.2 FRPC(FRP客户端)配置
根据ITX主机的架构,下载FRP
cd /root # 下载 wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz # 解压 tar -xzvf frp_0.27.1_linux_amd64.tar.gz # 文件夹名改成 frp,不然目录太长了不方便 mv frp_0.27.1_linux_amd64 frp cd frp # 确保 frpc 程序具有可执行权限 chmod +x frpc
编辑frpc.ini
[common] server_addr = 【你服务器的ip或者解析到该ip的子域名,如:frp.domain.com】 server_port = 7000 token = 12345678 http_proxy = [vnc] type = tcp local_ip = 127.0.0.1 local_port = 5901 remote_port = 5901
编辑/etc/rc.local,在exit 0 前加上下面这句话,开机自启
nohup /root/frp/frpc -c /root/frp/frpc.ini &
如果打开这个文件是空的,那就在文件的最后新起一行输入
exit 0
保险起见给文件加上权限
sudo chmod +755 /etc/rc.local
测试一下脚本
sudo /etc/rc.local
要是打印出来的信息没有报错,配置FRPC端的步骤就完成了,重启一下本地的机器
3.4 远程连接
这里尝试了几种方案:XRDP,X11VNC,AnyDesk,经过个人的测试,连接效果都不能让我满意,最后用了VNC
3.4.1 本地服务器端
sudo apt-get install vnc4server
修改连接密码,最低6位
vncpasswd
然后创建启动项
sudo vim /etc/init.d/vncserver
在里面输入
#!/bin/sh ### BEGIN INIT INFO # Provides: vncserver # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop vncserver ### END INIT INFO # More details see: # http://www.penguintutor.com/linux/vnc ### Customize this entry # Set the USER variable to the name of the user to start vncserver under export USER='【你登录的用户名】' ### End customization required eval cd ~$USER case "$1" in start) # 启动命令行。此处自定义分辨率、控制台号码或其它参数。 su $USER -c 'vncserver -geometry 1920x1080 -alwaysshared -httpPort 5901 :1' echo "Starting VNC server for $USER " ;; stop) # 终止命令行。此处控制台号码与启动一致。 su $USER -c 'vncserver -kill :1' echo "vncserver stopped" ;; *) echo "Usage: /etc/init.d/vncserver {start|stop}" exit 1 ;; esac exit 0
修改权限
sudo chmod 755 /etc/init.d/vncserver
添加开机启动项
sudo update-rc.d vncserver defaults
重启本地服务器,就好了
3.4.2 任意一台联网的设备想远程控制服务器的设备上,去这里下载VNC VIEWER
https://www.realvnc.com/en/connect/download/viewer/
输入之前在FRPC中绑定的
子域名:5901
输入密码,就可以控制了
效果受制于网速,经过我的测试这个是我的所有环境下,控制最快的,毕竟是远程环境。。。
最终效果:
3.5 NAS
本身装的就是Linux系统,所以可选项很大,我现在暂时没有这个需求,就不折腾了,但是把解决方案先放在这
owncloud
3.6 HTPC
Plex for Linux/Kodi for Linux