飞蚊话 发布的文章

视频点此

著名的github,私有库要收费,国内的码云倒是可以创建,但私有库所有协作人数总计不得超过 5 人,多多少少都有一些限制。搭建自己的git版本控制工具,保证私有库真的私有的同时,还能避免可能发生的网络环境问题。加之docker的辅助,3分钟,就能构建完毕。怎么做?

1、拉取镜像

docker pull gitlab/gitlab-ce

获取gitlab镜像。gitlab就是今天的主角。

2、创建文件夹

需要将容器的文件夹映射出来,保证镜像更新时候内容不会丢失。

cd /home #随便打开一个目录,用于新建文件夹
mkdir gitlab gitlab/config gitlab/log gitlab/data 新建文件夹,一会儿映射使用

3、执行

docker run -d -p 443:443 -p 2222:22 -p 8080:80 -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/log:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

跟以前用到docker的应用相比,这次的参数略多。但是万变不离其宗,主要还是使用端口映射和文件夹映射的参数。其中:

  • 443:443:容器ssl端口映射到服务器的443
  • 2222:22:容器的ssh端口映射到服务器的2222
  • 8080:80:容器的网页端口映射到服务器的8080
  • /home/gitlab/config:/etc/gitlab:容器的配置文件映射到服务器的/home/gitlab/config
  • /home/gitlab/log:/var/log/gitlab:容器的日志文件映射到服务器的/home/gitlab/log
  • /home/gitlab/data:/var/opt/gitlab:容器的数据文件映射到服务器的/home/gitlab/data

4、放开端口

因为安装过宝塔,所以需要将使用到的端口放行。像我这里就要放行8080、2222、443

其实在宝塔的应用里边可以一键安装gitlab。但毕竟宝塔不是所有人都装的,它的安装逻辑也更不清楚,所以相对来讲,还是docker的可控性更高一些,想删除的话,docker也可以删除的更彻底。

好了,现在输入服务器ip:8080即可访问搭建好的gitlab了。第一次登录会让设置一个密码,这个密码对应的是初始管理员密码。我们就可以通过账号root来登录管理了。

这个问题应该是从72版本开始的——如果我没记错的话。但是目测不会是Chrome的bug,因为到了76版本更加的变本加厉了…不过还好,办法总比困难多。

1、版本号≤75

具体来说应该就是72~75吧。这几个版本号还是比较容易解决的。只需要去往chrome://flags,将Enable Network Service给禁用掉即可。

究其原因(下面这些都是我猜的),大概就是从72开始,Chrome将网络服务作为独立进程执行。而系统监听的是Chrome这个进程,并没有相应真正发送网络请求的进程,所以Chrome的请求便直接发出去,不能经过代理了。而将这个选项禁用,也就是让Chrome的网络服务运行在程序内,那么网络请求便可以被监听到,PAC模式便也正常了。

2、版本号76+

76应该是最新的版本号了——至少在Archlinux里面是这样的。

即使之前你已经调整过,并且顺利解决了,但当你升级到了76这个版本号的时候,就能惊喜的发现:这个问题又复发了。

如果你还想按照75-的那种操作方法修正,那么很遗憾,Enable Network Service这个选项已经不存在了。

所以可以证明一件事:72~75出现的问题不能说是Chrome的bug,而是Network Service这个新特性导致的问题,而且Chrome大概是不打算修复这个问题的…

但总不能一直使用全局系统代理吧…国内网站绕一圈国外再回来…太慢了。

所以还是要想想解决方案,让PAC模式可以应用。

如果在Chrome://flags里边,以Network Serivce为关键字查找的话,会找到一项Runs network service in-process的选项。回顾一下刚刚说到的出现这个问题的原因,仿佛这个选项会管用?

很不幸,这个选项是没用的。所以暂时就不要想着能通过Chrome自己的设置来解决这个问题了。

好在Chrome的插件里边有一个神器——SwitchyOmega。通过它来判断是否需要使用代理就行了。


  • 从Chrome应用商店安装 Proxy SwitchyOmega
  • 进入插件设置页,新建情景模式(我这里名字叫做proxy),类型代理服务器
  • 在这个情景模式下,设置代理协议为SOCKS5,服务器和端口为127.0.0.1:1080(这两项应该与你代理软件内对应的本地设置相同)
  • 新建一个情景模式(我这里名字叫做auto switch),类型自动切换模式
  • 在这个情景模式下,添加规则列表,格式为AutoProxy,网址https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt,对应这一条的情景模式选择刚刚创建的proxy。看图

  • 点一下立即更新情景模式,待正文框内出现内容,代理便设置完成

现在,点击Chrome地址栏边上的SwitchyOmega图标,选择auto Switch,问题便解决了。


其实这样设置之后,并没有通过系统的PAC,而是Chrome自己判断并决定是直接访问还是间接访问。也就是说,即使系统没有配置好全局的PAC,而仅仅是启动了一个代理服务,通过该方法同样可以让Chrome顺利跨越。所以,为了不荒废系统代理的作用,还是希望有朝一日Chrome的Network Service可以被系统监听到并响应吧…

视频点此

我已经说过不少服务器的应用了。日常来讲,你可以拥有自己的博客网站、自己的云盘、自己的离线下载服务、自己的RSS订阅工具、自己的软件下载站,甚至开一个自己的Minecraft服务器。这其实已经差不多了吧?

但有一点是肯定的,只要你想,那么一台服务器肯定就不止这点用处。就比如今天要来说说的——搭建一个自己的发件服务器。


一、几个解答

1、这个发件服务器有什么用

显摆。因为你的邮箱地址,@之后的内容是别人没有的。

当然,不只是这样。

举个例子:如果你去过我的博客,你就会看到公告,说评论邮件提醒服务已上线。这就是发件服务器应用的地方。因为使用第三方的smtp服务,一来,每天的发件数量有限制;二来,发件的频率有限制。可不要说什么我这博客到不了发件上限,那是因为有很多的垃圾评论被我给屏蔽掉了,你看不到而已。

2、为什么只发不收

我之前说过,这个系列一定程度上是我自己使用我VPS的记录。而对于邮件,我用不到收信功能,所以没有赋予这个功能。

3、可以有收信功能吗

当然可以。改多一些配置文件就可以了。

4、增加收信功能难吗

给你这么一个答案:可以难。

你可以在自己的服务里配置收件箱、邮件解析功能,从而实现一个完整的邮箱服务,这听起来就相当麻烦;但也可以搞成一个中继,所有发到这个地址的邮件,自己不做解析,而是直接转发到别的邮箱——比如说自己的hotmail邮箱——里边,用户通过hotmail来管理这些邮件,这样难度就下来了很多。所以说,增加收信功能,可以是难的。

5、我需要有什么基础条件

与之前介绍的不同,搞一个自己的信使服务还真需要你有几个基础条件:

  1. 25端口开放——如果你想远程使用这个邮箱,而不只是给部署在同一台服务器的博客来用的话。当然,你也可以把端口放到465,但如何做我就不说了。因为我也没弄过。
  2. 有自己的域名。这样才能显示一个正常的邮箱地址,并最大程度避免被邮箱服务商当做垃圾邮件的概率。
  3. 如果想随时随地使用,部署在VPS是必不可少的。但还是那句话,如果只是给部署在同一台服务器的博客来用的话,那便无所谓了。

6、有什么安全措施

像我已经在用的这个,因为官方的25端口是封闭的,所以从根源上便拒绝了非法用户通过这个服务向外派件的可能性;加之我这个方法最终会使用独立的用户名和密码,而不是默认的使用登录用户做用户名,登录密码做邮箱认证密码,所以不至于泄露自己服务器的用户名。只是要注意,这样得到的邮箱是不带有SSL加密的。所以传输过程中的信息就不保证安全了。

好,介绍了这么多,来看看到底要如何配置。


二、配置

1、调整组件

CentOS里边默认会安装postfix。而有些系统默认的邮件服务是sendmail而这个服务公认的差。所以为了调整服务,先来调整好组件。同时,也保证需要的用户组被创建。

yum remove sendmail #卸载sendmail
yum remove postfix #卸载postfix
yum install postfix #重新安装postfix
#yum安装会自动建立postfix用户组和用户名
yum install crontabs #因为卸载postfix的时候系统定时服务可能会被卸载所以也运行一次安装命令确保组件存在

2、增加组件

postfix默认的邮箱账户名是登录系统的用户名,密码则是登录系统用户的密码。所以为了得到独立的用户名密码,需要安装相应的服务。

yum install cyrus-sasl*  #提供smtp的虚拟账户和密码服务

3、配置MTA

MTA就是邮件发送端。刚刚卸载又安装的postfix就是为了完成这个任务的。因此现在,需要调整系统默认的MTA到postfix。

/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix

alternatives --display mta #查看调整结果
#如果输出的最后一行显示如下:
#Current `best' version is /usr/sbin/sendmail.postfix.
#说明设置完毕

4、配置自启动

既然是服务,那自然希望它会在服务器重新启动后的第一时间上线。所以设置自启动。

systemctl enable postfix

5、配置postfix

编辑/etc/postfix/main.cf,更改下述内容。

myhostname = #二级域名。如smtp.bwsl.wang
mydomain = #主域名,即删去二级域名剩下的东西。如bwsl.wang
myorigin=$mydomain
inet_interfaces=#localhost或本地回环地址
#填入公网ip会对外开放(25端口未封闭的话)
#默认应该是all,收发皆可
#如此更改即关闭收件功能
mydestination = $myhostname, localhost.$mydomain, localhost
#这里默认值应该就是这样,是则保持,不是则改
mynetworks=#公网地址,127.0.0.1
#填这两个就可以了

再新增下述内容,开启单独的登录名和密码服务

#SMTP Config
smtpd_client_restrictions = permit_sasl_authenticated
#指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
#此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#发件人在执行RCPT TO命令时提供的地址进行限制规则
smtpd_sasl_auth_enable = yes
#启用smtp并要求进行账号、密码效验
smtpd_sasl_security_options = noanonymous
#取消smtp的匿名登录
message_size_limit = 5242880
#指定通过postfix发送邮件的体积大小。单位字节

6、创建连接邮箱服务的用户名和密码

先来编辑/etc/sasl2/smtpd.conf。对于32位机,这个文件路径是/usr/lib/sasl2/smtpd.conf

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login CRAM-MD5 DIGEST-MD5

现在,就可以创建账号了。使用命令:

saslpasswd2 -c -u `postconf -h mydomain` username

回车后,会提示输入密码。输入一次,重复一次,用户名为username的邮箱便建立好了。邮箱地址将会是[email protected]

你可以通过这个命令建立多个用户和密码。日后也可以通过命令sasldblistusers2来查看已有的用户名。密码不能看,只会显示userPassword

7、调整权限

需要调整sasl的用户数据权限,让postfix可以读取:

chmod 755 /etc/sasldb2

现在,设置几乎全部完成,可以启动信使服务了。使用命令

systemctl start postfix

三、测试服务

为避免网络端口封闭问题而导致的莫名其妙的问题,我们最好是通过服务器本机连本机来进行服务的测试。所以还是在服务器的窗口内,运行telnet命令(没有则先安装telnet):

telnet localhost 25

我们还需要额外准备两个内容:

  • 刚刚建立的邮箱用户(带@之后的内容)的base64编码
  • 用户对应密码的base64编码

这两个的获得很容易,百度base64就有很多转换工具,随便一个就好。

然后便可以回到服务器的命令行,进行验证过程

HELO bwsl.wang #尝试握手,返回消息后继续
AUTH LOGIN #请求smtp账户密码校验,返回消息后继续
#输入刚刚获得的用户名base64,返回消息后继续
#输入刚刚获得的密码base64

输入密码后回车,应该就可以看到Authentication successful认证成功的消息。这便证明,一个发件服务已经搭好了。

四、调整域名解析

别着急应用到博客里。现在应用,那发出去的邮件一定连垃圾箱都不进,直接就被拒收了。我们还需要进行最后一步:配置域名解析。

进入你的域名解析调整页面,新增三项:

  • myhostname对应的二级域名,A类解析到服务器IP
  • @域名,MX解析到myhostname对应的二级域名
  • @域名,TXT解析成v=spf1 a mx ip4:服务器ip -all

至此,一个发件服务便建立完成了。你可以通过linux的mail命令来尝试发送一个带有独一无二邮件后缀的邮件了。好好利用吧。


可以通过 https://www.mail-tester.com 对你的服务进行测试,并根据提示进行对应的修改以提高得分

俄罗斯杀毒软件卡巴斯基报告,一个 Google Play 商店下载量超过一亿的流行应用 CamScanner(或叫 CamScanner — Phone PDF Creator 和 CamScanner-Scanner to scan PDFs)被发现含有恶意模块。

它的图标是这样的:

有些熟悉?国内它有一个中文名字:扫描全能王。

{{CamScanner:扫描全能王}} 是一个合法应用,在大部分时间里没有恶意功能,它靠广告和应用内购买获取收入。但在某个时间情况变了,{{CamScanner:扫描全能王}} 最近释出的版本包含了含有恶意模块的广告库。

卡巴斯基将该模块称为 Trojan-Dropper.AndroidOS.Necro.n。类似的模块此前见于中国造智能手机预装的恶意程序中。该模块定期从开发者指定的服务器上下载加密代码,在设备上解密然后执行。

部分 {{CamScanner:扫描全能王}} 用户已经注意到了该应用的可疑行为,他们在应用页面留言对其他用户发出警告。

来源网页

视频点此

你要注意看这个标题。我并没有指定主语。这说明,不是我换回了Windows,也不是你换回了Windows。而是那些看过我这个视频之后,盲目的切换到了Linux而并没有做任何了解的用户。说到这儿我还得啰嗦一句:这个视频从简介到动态,都说明了只是我的感受,为什么还会有很多人把它当成一个推荐视频呢…既然这样,那我就再做一个与之相反的内容,让你看的更清晰一些吧。

1、硬件支持

硬件支持总会是Linux的一个问题。通常是因为厂商不打算支持Linux,或尚未适配。如一些无线网卡,或者最新的硬件。但这其实不代表以后不会支持。最典型的就是英特尔的CPU,当新的CPU上市时,Linux通常要延后几个月才能获得相应的支持。所以如果你把Linux装在一台拥有最新CPU的电脑上,那么它通常是不能正常运行的,这一定会驱使你回到Windows。但几个月之后再安装Linux,由于有了新版本的内核,通常就可以了。

2、太多的选择

Windows只有Windows,而Linux有很多Linux。

Linux有各种各样的发行版,而你在这个基础上又有各种各样的选择权。包管理器用哪个、桌面环境用什么、观感主题怎么配、文件管理器装哪个…成千上万的方案对于新用户来说,压迫感很强——当然,也是选择困难症的地狱。

这便会导致一种情况:用户不喜欢这个发行版,因此去尝试一些其他的。试过一些之后:好了,我有了一些了解了,所以现在我想回到Windows了。因为Windows很棒、我很熟悉,并且我知道我要用什么来做什么;而Linux有很多东西要学,有很多东西要自定义。对于新用户来讲,我要怎么自定义是一个选择上的难题,自定义很可能会导致的一些问题则又是一个技术性难题。

3、游戏

你需要明白一件事:现在的Linux娱乐性已经强大很多了。

因为我也玩游戏——当然是使用我的Linux:欧卡2、call of the wild、gta5、csgo、喋血街头…但很多用户并不这么做,甚至连尝试都不尝试就给出“Linux娱乐性不高”的结论。这在几年前是很正确的,但现在再说这种话,我只想给他冠以“落后”、“云用户”这几个标签。因为他不知道protondb.com——一个告诉你Steam的游戏在Linux上运行状态的网站,也不知道lutris.net——一个帮你整理并且一键运行非steam游戏的应用,更不知道在Steam里边,通过Steam OS标签得到的游戏结果只是Linux可以运行的游戏的一小部分。至于为什么,以后再说。你只需要明白Linux的娱乐性不再是几年前的穷苦样便可以了。

但不可否认,无论如何,Linux可以游玩的游戏数量也是比不上——可能永远也比不上Windows的。所以仍然有一部分游戏会让你放弃Linux。比如PUBG,以及一些需要VR设备的游戏。

4、软件缺失

这可能是很多人换回Windows的一个问题所在。比较有代表性的软件就是Adobe Creative Cloud和Microsoft Office。这些虽然可以通过wine来运行旧版本的,但表现一般不会很好。所以如果你一定要使用它们而不愿意去使用替代品,那么最好的选择就是好好的待在Windows,不要再考虑Linux了。

同样的比如CAD制图,Linux下面与AutoCAD操作思路类似的一款替代软件叫做DraftSight,还有其他比如FreeCADOpenCAD等等替代品。

总之,软件缺失是大问题,但除非真的是小众的软件,通常并不会真的缺失,只是看你愿不愿意百度一下相关替代软件,想不想使用替代品——不需要适应新操作新思路便可上手的替代品,仅此而已。

5、缺少技能知识

没有对应的知识可能是最大的一个问题了。

只看日常使用的话,Windows相当易用——从它的观感以及广大的用户群就可以体现出来。但Linux,就像刚刚所讲,有太多的选择权和自定义权,学习每一种选择的操作方法需要大量的时间。

Linux就像Minecraft,你可以随心所欲的做任何想做的事情——前提是你要研究,你要有一些知识才能充分的利用它。

但很多用户只是想通过他们在Windows上已经获得的知识来使用他们的电脑,对学习一个新的操作系统并不感兴趣。所以,这便从根源上杜绝了他们更换操作系统的可能,进而形成了用户黏度。这对于其他软件、甚至是日常生活同样适用。


以上,是我总结的会让你放弃Linux的五点。在之前的视频里,我从动态到简介都说了:只适用于我自己,不要生搬硬套,所以你非要把它当成我推广Linux的视频,那我也没辙。我从来不会推荐人们去使用哪一个操作系统,因为这种东西最好的答案是去自己尝试。我只是我,我习惯它,所以我使用它;我把它推荐给你,你不习惯,那么你对它的第一印象便是差的,这很不好,甚至形成刻板印象。只有当你想的时候,再去了解它、熟悉它,这才是接触新事物应有的过程。人云亦云,盲目跟从,图一时新鲜,总不会是一个长久之计。

一直用Cloudflare作为我这个域名的DNS和CDN。一来,我的服务器在德国,不能备案。所以虽然可以用国内的域名解析,但不能用国内的CDN,访问速度必然会是一个问题;二来,Cloudflare的CDN是免费的。免费的东西谁不喜欢::(阴险)

因为本身我这个博客也申请过ssl证书,而Cloudflare之前的ssl设置也一直使用的Full(strict),然后从CDN到我这博客的后台都做了强制的https跳转。一直用的也好好的。直到昨天…

不知道脑子哪根筋抽了,想把我的子域名都做上CDN。但Cloudflare的Full模式要求域名要有证书,也要有Cloudflare的证书。

Cf的证书好说,免费申请一个就可以随便用,只要主域名是一个就行;但我自己的证书不行啊,只授权到了www这个下面。所以如果这样的话,就不得不再申请几个证书来用。太麻烦了…就不如把Cf的SSL降到Flexible来用来得快。


Cf的SSL等级有4个:Off、Flexible、Full和Full(Strict)。区别看图


然后,满心欢喜的把我的很多二级域名都打开了CDN。再来ping一下:

完美。ping到的ip已经是Cf的CDN地址了。加速的同时,我的真实ip也已经被隐藏了。其实本身我的真实ip也是禁ping的…所以就算知道了,如果想用ping来验证大概也是不可能的

但随之而来的就是对这个正经的HTTPS站点一些坑爹的善后了…

一、重定向次数过多

一开始没发现这个问题,直到在满意的离开我那些带有小绿锁的二级域名站,转到www下面时…

打开控制台看跳转(用到了Firefox。因为火狐不会提示这个错误而是会一直跟着跳转走,直到内存耗尽),发现访问地址不断的在http和https之间来回跳跃。

仔细阅读SSL的帮助,发现对Flexible的解释中提到了一点:

Note: You may encounter a redirect loop with some origin configurations.

为什么呢?往前看一看:

Visitors will be able to access your site over HTTPS, but connections to your origin will be made over HTTP. 

所以说,使用flexible时,浏览器请求HTTPS到cf,而cf则请求HTTP到我的服务器上。而对于www这个网址,我之前又配置过强制HTTPS,也就是说,cf通过HTTP链接服务器的请求全部被跳转到了HTTPS,但cf又把它拉回了HTTP。这循环便形成了。

明白了原因,那解决就很好办了。因为我是用宝塔的,所以直接去这个网站的SSL设置,将强制HTTPS关掉,便万事大吉了。

直到我想登录的时候…

二、登录不作用

什么现象呢?当我想登陆时,输入好用户名和密码后点击登录,页面会刷新一下,然后我填写的东西便被吞噬了。

仿佛无事发生。

可还行::(阴险)

这我可是真的没头绪了…毕竟在Full模式时候都没出现过这种问题,怎么等级松下来了,反而登录不了了…

直到搜到了这个博客的文章,提到了个解决方案,就是在config.ini.php下加入一行:

 /** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

虽然这个博主的问题是评论不可用,我这是登录不可用,但都是不可用,所以就死马当活驴医,试试吧。

然后…就可以了…

我所有二级域名都可以愉快的使用CDN和HTTPS了。