menu Chancel's Blog
rss_feed lightbulb_outline

几年使用VPS的经验之谈(快速入门VPS)

warning 这篇文章距离上次更新于783天前,文中部分信息可能已失效,请自行甄别无效内容。

一个技术工程师,怎么能没有自己的一台服务器呢?独立服务器当然更好,虚拟服务器也是可以选择的,虚拟主机就emmmm...

VPS介绍

什么是VPS?

虚拟专用服务器(英语:Virtual private server,缩写为 VPS),是将一台服务器分割成多个虚拟专享服务器的服务。实现VPS的技术分为容器技术和虚拟机技术 。在容器或虚拟机中,每个VPS都可分配独立公网IP地址、独立操作系统、实现不同VPS间磁盘空间、内存、CPU资源、进程和系统配置的隔离,为用户和应用程序模拟出“独占”使用计算资源的体验。VPS可以像独立服务器一样,重装操作系统,安装程序,单独重启服务器。 -- 《维基百科》

一句话概括VPS:一台拥有公网IP且能7x24小时运行的电脑

OpenVZ、KVM、XEN、Hyper-V比较

VPS是虚拟专用服务器,那么采用什么虚拟技术就决定其能做什么不能做什么(例如OpenVZ就安装不了Windows)

OpenVZ KVM XEN Hyper-V
母平台 Linux Linux Linux Windows
不可超售资源 全部 内存硬盘 内存硬盘 内存
价格 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
特点 无法涉及内核操作 全功能虚拟化架构 半虚拟化/全虚拟化 Windows虚拟化产品

选购VPS

VPS选购方面,大致分为国内国外,国外细分为什么服务商的问题,国外服务商现在大部分都支持了支付宝/微信支付,购买很方便,下面列出图比较一下差异

差异区分

国内 国外
IP 国内 国外
实名 绝大部分要实名 不用实名
带宽 多以限速,例如1Mpbs/3Mpbs/5Mpbs,带宽越高越贵 多以限量(香港例外),例如500g/月
延迟 50ms以下 cn2路线200ms以下,非cn2路线200ms以上
发票 支持 多不支持
稳定
工单 中文,响应速度很快 多英文,响应速度24小时内
科学爱国 不能
价格 均价>50/月 不等,有非常便宜的,例如99/年的
  • 以下情况建议选购国外
    1. 厌恶实名繁琐流程
    2. 需要科学爱国
    3. 考虑低价的VPS
    4. 对个人博客稳定性要求性不高
    5. 对带宽峰值要求较高
  • 以下情况建议选购国内
    1. 对个人网站稳定性有要求
    2. 对延迟有较高要求

国外老牌VPS提供商,这里只列出3家名气大的VPS服务商(服务也稳定)如需购买,请先搜寻相关资料 国外VPS服务商一般都有优惠码和网络评测地址,先根据现有的VPS测试到你所在地的network status,再用优惠码购买

VPS提供商 简介
Linode 大名鼎鼎的老牌VPS提供商
Vultr Vultr作为全球最大的游戏主机提供商
BandwagonHost 低价VPS主机产品

国内VPS服务商

VPS提供商 简介
阿里云 目前国内最大的云解决方案提供商
腾讯云 腾讯系云解决方案提供商

Linux主机 VS Windows主机

我长期使用Linux主机/Windows主机,对于这两台机器最大的误解我觉得无外乎以下两点

  • Windows主机稳定性 < Linux主机稳定性
  • Windows主机操作难度 < Linux主机操作难度

对于技术工程师来讲,Linux几乎是必要掌握的,哪怕是前端工程师,一个有追求的技术人员应该对所有的操作系统都保持兴趣。 虽不至于说要所有操作系统都要了解(精力有限),但有实践的机会肯定是不会放过的。就我使用的经验来看,在稳定性表现上,两者基本没有差别,宕机大部分情况下是我作死导致,而所提供服务出现问题大部分都是网络波动。 几乎没有出现过Windows主机比Linux主机更多莫名其妙的宕机情况。 操作性上,现在且不说有各种面板提供傻瓜化般操作Linux主机,实际上大部分情况下只是安装Nginx/Apache/MySQL这些软件,需要掌握的指令是很少的(常用的也就几个),并没有那么恐怖,而恰恰在Windows下,搭建这些反而是非常麻烦的(当然Windows下也有诸如xampp的优秀集成软件),无论是自编译Nginx、还是gcc+或者apache配置,Windows都要考虑字符编码、复杂的防火墙配置、配置文件位置的存放等问题,系统环境配置也很麻烦。

对于选择Linux还是Windows,要看具体用途,但总觉得如果是通用情况下(即Windows跟Linux均能部署你需要的软件)Linux显然更少折腾,选择哪一个,请切实的考虑软件环境再做选择(不过话说回来,VPS提供Windows还真不多)

如果你很喜欢折腾各种开源Web产品,Linux更有优势一些,因为很多开源产品都是基于Linux做服务端

VPS的初始化

在服务商处购买VPS之后,一般会有控制面板,通常在VPS的页面里即可打开,较少情况会在邮箱处告知访问地址与管理账户信息 Linux使用SSH远程访问,Windows使用远程桌面,相关资料太过冗长此处不列出,知识也较为简单与基础,可自行搜索关键词 LInux SSHWindows 远程桌面 如果是有稳定用途的VPS要千万注意安全设置,关于Linux的安全设置可参考我之前的关于VPS服务器安全加固的文章Linux VPS安全设置(CentOS) Or 站内搜索关键词 VPS

安全防护要考虑以下最基础的四点

  • 开启防火墙
  • 常见端口号修改(如21、22、3389、3306均修改为10000以上端口)
  • 登录采用证书,不用密钥
  • 登录账户使用普通账户,登录后使用密码进行提权

VPS性能查询监控

VPS安全很重要,性能监控是VPS安全指标之一,学会如何监控VPS的性能对保持7x24小时运行的服务器很重要,

Notes:对于省事的人来说,这里也可以直接使用宝塔面板之类的第三方集成工具,他们的性能监控也做的很棒

本地硬件信息查询

这里重点说说Linux的,Windows的VPS很少见,而且有的话查询硬件信息的方法太多了,监控更简单任务管理器/资源管理器就完事了

  • CPU信息查询

    • 使用lscpucat /proc/cpuinfo进行查询,但其实意义不大,因为CPU信息是可以虚拟的..

      root@vps29981042:~# lscpu
      Architecture:          x86_64
      CPU op-mode(s):        32-bit, 64-bit
      Byte Order:            Little Endian
      CPU(s):                0
      Vendor ID:             GenuineIntel
      CPU family:            6
      Model:                 62
      Model name:            Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
      Stepping:              4
      CPU MHz:               2900.085
      BogoMIPS:              4999.84
      Virtualization:        VT-x
      Hypervisor vendor:     Parallels
      Virtualization type:   container
      Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts spec_ctrl intel_stibp flush_l1d
      root@vps29981042:~# cat /proc/cpuinfo
      processor       : 0
      vendor_id       : GenuineIntel
      cpu family      : 6
      model           : 62
      model name      : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
      stepping        : 4
      microcode       : 0x42e
      cpu MHz         : 2899.932
      cache size      : 25600 KB
      physical id     : 0
      siblings        : 10
      core id         : 0
      cpu cores       : 10
      apicid          : 0
      initial apicid  : 0
      fpu             : yes
      fpu_exception   : yes
      cpuid level     : 13
      wp              : yes
      flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu cpuid_faulting pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts spec_ctrl intel_stibp flush_l1d
      bogomips        : 4999.84
      clflush size    : 64
      cache_alignment : 64
      address sizes   : 46 bits physical, 48 bits virtual
      power management:
  • 内存查看

    • 使用free -m来查询

        root@vps29981042:~# free -m
                    total        used        free      shared  buff/cache   available
        Mem:           1024          85         503           7         435         918
        Swap:           512           0         512
  • 硬盘查看

    • 使用df -h

        root@vps29981042:~# df -h
        Filesystem         Size  Used Avail Use% Mounted on
        /dev/ploop44353p1   30G  1.5G   27G   6% /
        none               512M     0  512M   0% /sys/fs/cgroup
        none               512M     0  512M   0% /dev
        tmpfs              512M     0  512M   0% /dev/shm
        tmpfs              512M  7.7M  505M   2% /run
        tmpfs              5.0M     0  5.0M   0% /run/lock
        none               512M     0  512M   0% /run/shm
        tmpfs              103M     0  103M   0% /run/user/0
  • 第三方工具查看

    • 首先安装inxi,然后使用inxi -Fx

        root@vps29981042:~# inxi -Fx
        System:    Host: vps29981042.hosteons.com Kernel: 4.4.0 x86_64 (64 bit gcc: 4.8.5) Console: tty 0
                Distro: Ubuntu 16.04 xenial
        Machine:   No /sys/class/dmi; using dmidecode: unknown error occured
        CPU:       Penta core Intel Xeon E5-2670 v2 (-HT-MCP-) cache: 25600 KB
                flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 24999 speed: 2899 MHz (max)
        Graphics:  Card: Failed to Detect Video Card!
                Display Server: N/A driver: N/A tty size: 120x50 Advanced Data: N/A for root out of X
        Network:   Card: Failed to Detect Network Card!
        Partition: ID-1: / size: 30G used: 1.6G (6%) fs: ext4 dev: /dev/ploop44353p1
                ID-2: swap-1 size: 0.54GB used: 0.00GB (0%) fs: swap dev: /dev/null
        Sensors:   None detected - is lm-sensors installed and configured?
        Info:      Processes: 39 Uptime: 1 day Memory: 129.0/1024.0MB Init: systemd runlevel: 5 Gcc sys: 5.4.0
                Client: Shell (bash 4.3.481) inxi: 2.2.35

VPS本地性能监控

glances 是必须要介绍的一款Linux底下很棒的性能监控软件!他可以为你提供以下数据

  • CPU 使用率
  • 内存使用情况
  • 内核统计信息和运行队列信息
  • 磁盘 I/O 速度、传输和读/写比率
  • 文件系统中的可用空间
  • 磁盘适配器
  • 网络 I/O 速度、传输和读/写比率
  • 页面空间和页面速度
  • 消耗资源最多的进程
  • 计算机信息和系统资源

首先安装glances,然后输入glances,就可以看到很多信息! 对于新手,也无需担心,glances已经通过颜色来表明危险程度,你只需要关心绿色以外的数据,尤其是红色的数据!

VPS在线性能监控

每次监控Linux性能都需要SSH到Linux服务器内才能看这一点都不Cool,linux-dash为此而来

项目Github:https://github.com/afaqurk/linux-dash 项目Demo:https://afaqurk.github.io/linux-dash/

安装方法

## 1. clone the repo
git clone --depth 1 https://github.com/afaqurk/linux-dash.git
## 2. go to the cloned directory
cd linux-dash/app/server
## 3. Start the server (on port 80 by default; may require sudo).
python index.py

然后打开你的80端口查看吧!

VPS用途介绍

VPS用处还是很多的,这里举例子说明我自己是如何使用VPS来提高工作效率的,下面的工具都有简单的介绍安装(Linux)

Notes: 记得部署下面的软件时记开放相关防火墙端口!

内网穿透

FPR工具:https://github.com/fatedier/frp

介绍:国内大部分宽带都是没有公网IP的(否则为什么要买服务器..),但VPS大部分性能羸弱,如果要部署复杂的应用很多时候都担负不起,这个时候我们可以利用公网VPS来做端口转发,FRP就是为这个而准备的。

下面以暴露我内网的路由器为例子。

  • 服务端部署

    1. 下载FRP最新服务端(懒得点开Github的懒人专用链接_Linux_amd64专用包
    2. 解压压缩包,进入压缩包目录,创建frps.ini文件

       [common]
       bind_addr = 0.0.0.0
       bind_port = 7000            # 你的开放端口
       bind_udp_port = 7001        # 用于客户端UDP传输端口,可不写(如果你客户端不打算做UDP)
      
       # Web
       dashboard_port = 5005       # FRP Web界面端口,可通过这个端口查看frp统计信息
       dashboard_user = chancel    # Frp Web界面账户
       dashboard_pwd = 123456      # Frp Web 密码
      
       # token
       token = 123456              # 客户端连接的密码
    3. 使用下面的指令开始运行frp服务端

       ./frps -c frps.ini
  • 客户端部署

    1. 下载FRP最新客户端(懒得点开Github的懒人专用链接_Linux_amd64专用包
    2. 解压压缩包,进入压缩包目录,创建frpc.ini文件

       [common]
       server_addr = chancel.cn    # 你的服务端IP/域名
       server_port = 7000          # 服务端开放端口
       token = 123456        # 服务端密码
      
       [C-Route]                   # 注册的名字,随意起,你自己看得懂就行
       remote_port = 8888          # 对外暴露的服务端端口,即别人访问服务端的这个端口就可以访问到你本地绑定的端口
       type = tcp                  # 网络协议类型,默认tcp就行
       local_ip = 192.168.1.1      # 你要转发的IP,可填任意IP,只要客户端能访问到
       local_port = 80             # 你要转发的端口
       login_fail_exit=false       # 断线重连
    3. 使用下面的指令开始运行frp客户端

       ./frpc -c frpc.ini

此时使用外网的机器尝试访问服务端的8888端口,就可以访问到你内网的路由器管理界面了,这一招搭配一台不关机的PC,You can do anything

笔记工具

一个不写笔记的程序员水平跟用味精炒菜的厨师没差别

Leanote笔记:https://github.com/leanote/leanote

其实笔记这一块,有太多好产品要推荐了,还要取决于你用什么设备,比如你用surface那没理由不尝试以下OneNote,但我用过好几年的开源笔记工具,虽然现在不用了,但还是要推荐以下这个笔记软件,搭建不出幺儿子的话,没有比这个更棒的笔记了。

  • Leanote 优点
    1. 多客户端同步
    2. PC客户端支持导出多种格式笔记,如PDF、HTML
    3. 自带博客,可一键直接将笔记发布为博客,博客颜值高
    4. Markdown语法丰富(支持很全)
  • Leanote 缺点
    1. 复杂的笔记编辑场景下同步容易出幺蛾子
    2. 对于不需要博客的人来说博客很鸡肋
    3. PC端界面不好看(主观)
    4. 官方更新很慢

Leanote笔记介绍

前所未有的文档体验,近乎完美的平台覆盖,支持团队协同,企业级私有云 蚂蚁笔记 = 笔记 + 博客 + 协作 + 私有云

搭建Leanote参考文档:https://github.com/leanote/leanote/wiki

文件同步

你还在带U盘来同步家里跟公司之间的文件吗?或者还在使用国内的公有云?来试试Syncthing吧

Syncthing同步工具: https://syncthing.net

Syncthing是一款工作中接触到的软件,工作需要还做了定制:) ,Syncthing本身是有服务端的,但服务器在国外,同步本身也不依赖于服务器,服务器只是提供双方注册和通告的作用。 有时候因为国外服务器的毛病导致同步失败,也可能因为NAT网络的问题导致文件同步很慢,这个时候有一个公网VPS做中继服务器就是一件很爽的事情了,就算速度不快也可以稳定同步文件。 我使用的是Linux服务端做Syncthing的中继和通告,公司跟家里都是Windows,有惊喜的是Syncthing不但支持Windows/Linux/Mac OS/甚至还支持Android! 这就意味着你的手机也可以享受这种文件同步福利了!

  • 项目地址:https://github.com/syncthing/syncthing

  • 中继服务器部署

    1. 下载解压Syncthing:https://github.com/syncthing/discosrv/releases
    2. 进入解压目录并使用这条指令来启动中继服务器

       ./relaysrv -pools "" -debug
    3. relaysrv的参数可以参考官网文档,这里有一份来自Senraの小窝的翻译

        -debug 启用调试输出
       -ext-address=<address> 可选的外部地址(将被上报),能够通过端口转发来监听高权限端口(0-1024)然后外部可以连接这个端口
       -global-rate=<bytes/s> 全局限速,单位 bytes/s
       -keys=<dir> 用于存储 cert.pem 和 key.pem 的目录,默认是 "."(当前目录)
       -listen=<listen addr> 协议监听的地址,默认是 ":22067"
       -message-timeout=<duration> 等待消息到达的最大时间(默认 1m0s)
       -nat 使用UPnP/NAT-PMP来取得外部端口映射
       -nat-lease=<duration> NAT租赁时间,单位分钟(默认 60)
       -nat-renewal=<duration> NAT刷新频率,单位分钟(默认 30)
       -nat-timeout=<duration> NAT发现超时,单位秒(默认 10)
       -network-timeout=<duration> 客户端和中继之间网络操作的超时,如果在这个时间段内客户端和中继之间没有数据被接收到,那么连接将被终止。此外,如果在这段时间内任何被中继的客户端没有数据发送,这个会话也会被终止(默认 2m0s)
       -per-session-rate=<bytes/s> 每个会话的限速,单位 bytes/s
       -ping-interval=<duration> ping的发送间隔(默认 1m0s)
       -pools=<pool addresses> 中继服务器池的地址,使用逗号分隔多个(默认 "http://relays.syncthing.net/endpoint")。留空(-pools "")来禁止公布这个服务器到池中,以便作为私有中继。
       -protocol=<string> 监听协议,"tcp"来监听IPv4和IPv6,"tcp4"来监听IPv4,"tcp6"来监听IPv6(默认 "tcp")
       -provided-by=<string> 一个可选的描述字段来表示谁提供了这个中继(可以打打广告啥的)
       -status-srv=<listen addr> 提供状态服务的监听地址(默认 ":22070"),用于中继服务器池页面来展示服务器状态(传输了多少数据,有多少客户端在线等等),留空(-status-srv="")来禁用这个功能
    4. 运行成功之后会有类似如下输出,请记住这一串输出,0.0.0.0修改成你的服务器地址,如:relay://chancel.cn:33261 即可

        URI: relay://0.0.0.0:33261/?id=4ZVSHHI-ZSJID5Y-CKSUQAV-6KATUHA-HJN6WMQ-TU2KEUJ-H5RYSNN-NREXNA7&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070&providedBy=
  • Windows客户端使用

    1. 客户端下载:https://github.com/syncthing/syncthing/releases
    2. 解压后直接打开解压目录下的syncthing.exe
    3. 随后会弹出web界面,在web界面右上角选择设置,更改如下信息
      • 设备名:更改成你可以识别这台设备的设备名称
      • 默认文件夹路径:选择你要同步文件的默认文件夹,以后在web界面新建的文件夹都默认存储在这个文件夹路径下
      • 连接-协议监听地址:填入上面部署服务端时记下的那一串输出,如relay://chancel.cn:33261

好了,现在可以在客户端web界面新建文件夹,然后把他分享给家里/公司的设备吧

代码管理

Github私密仓库需要购买?快来试试Gitea吧

Gitea代码管理:https://docs.gitea.io

有时候会写一些不想别人看见的代码(比如爬爬某网站),只commit到本地又觉得不是很安全,那就Push到服务器吧!

我自己目前暂时使用的是Gogs,不过试过一段时间的Gitea感觉更好,官方更新的更快,功能也比较全面

至于安装?只需要三句指令

wget -O gitea https://dl.gitea.io/gitea/1.3.2/gitea-1.3.2-linux-amd64
chmod +x gitea
./gitea web

注:为什么不使用GitLab?当然可以,GitLab当然更棒,只要你买4G内存的VPS,他就是最棒的!

文档管理

有在线笔记很棒,但有时候想跟朋友一起编辑某个文档,在线文档?qq提供的尽管不错,但不够Geek

项目地址:https://www.showdoc.cc/ Demo地址:https://www.showdoc.cc/demo?page_id=7

Showdocc是一个非常适合IT团队的在线API文档、技术文档工具,基于PHP写的一款软件。

我经常拿他来写一些文档,比如当周总结、运动计划、财务流水之类的

部署Showdoc其实就是部署Nginx+PHP+Mysql,CentOS 部署Nginx+php+mariadb环境部署 Or 站内搜索关键词Nginx

程序的在线日志

Track errors in every part of your stack。

Sentry官网:https://sentry.io

Sentry,一款国外开源软件,支持几乎所有主流语言,简单的配置,就能将程序运行的时候将日志上传到服务器,可集成在自己开发的程序中,再也不用开发任何程序日志上传接口,再也不用追着客户要本地日志了,只需2句代码,就能做到这一切!

部署方案参考:Linux下部署Sentry - 程序错误日志收集和聚合的平台 Or 站内搜索Sentry关键词

阅读: 267
分类: 杂锦记录
创建时间: 2019-06-14 18:25:02
更新时间: 2019-06-14 18:48:22
博文目录

[[replyMessage== null?"发表评论":"@" + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageList.data.items.length]])

[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[messageItem.m_environ.browser]] [[messageItem.m_environ.os]] [[messageItem.m_environ.device]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[subMessage.m_environ.browser]] [[subMessage.m_environ.os]] [[subMessage.m_environ.device]]