云服务器入门

(一)我的第一台服务器

1. 背景

本学期选修了“Linux操作系统”课程。课上老师教大家利用传统的VMware + OS镜像方式在本机上体验Linux系统,但为了获得更优体验我选用了云服务器来学习Linux。

使用云服务器对这门课的学习也有几点好处:

  • 最终的大作业可以搭建在线的服务器,真正投入生产环境

  • 再也不用开虚拟机了,拯救电脑那点可怜的内存

2. 什么是云服务器?

云服务器 Elastic Compute Service(ECS)是云服务器提供商提供的一种基础云计算服务。使用云服务器 ECS 就像使用水、电、煤气等资源一样便捷、高效。我们无需提前采购硬件设备,而是根据业务需要,随时创建所需数量的云服务器实例,并在使用过程中,随着业务的扩展,对云服务器进行扩容磁盘、增加带宽。如果不再需要云服务器,也可以方便的释放资源,节省费用。

云服务器 ECS 实例是一个虚拟的计算环境,包含了 CPU、内存、操作系统、磁盘、带宽等最基础的服务器组件,是 ECS 提供给每个用户的操作实体。一个实例就等同于一台虚拟机,您对所创建的实例拥有管理员权限,可以随时登录进行使用和管理。您可以在实例上进行基本操作,如挂载磁盘、创建快照、创建镜像、部署环境等。

正如马云所言,未来的云服务器就是社会的基础设施,就像我们打开水龙头就可以用水一样,我们也可以随时根据我们的需求使用我们的服务器。

3. 云服务器的选择

前几日,一篇《阿里云的这群疯子》迅速在网络上传播开来,这篇文章有血有肉,有真实历史中的困难,也有克服困难后的信心重建。是近年来非常出色的一篇关于阿里云发展的报道。阿里云是目前国内最大的云服务器提供商,市场份额近50%,同时也是全球第三大云服务器提供商,仅次于亚马逊和微软。那么我们就选择比较让我们国内的程序员感到自豪的阿里云吧!

4. 云服务器的购买

阿里云、腾讯云等国内大公司都提供了学生优惠的价格。

点击进入阿里云“云翼计划”学生优惠界面

过程还比较简单啦,前三步是进行验证,第四部步进入如下所示的界面,终于要开始买我们的服务器啦!

https://s1.ax1x.com/2018/10/19/iwOPWn.jpg

在这一页我们有几个选择,我用标号标记出来了。

  1. 我们选择云服务器ECS。“轻量应用服务器”预装了一些工具,比如搭建博客的WordPress,写PHP的LAMP套件组合等等。我们想要一个全新的服务器,所以选择云服务器ECS就好,我们自己来安装。

  2. 选择比较主流的CentOS啦~用Ubuntu的同学也不用担心,云服务器一般就只有命令行啦,是没有图形界面的,选择CentOS没有什么过渡,可能默认下载工具命令会有所不同。

  3. 我们是东北,看起来华北和华东离我们都比较近,随便选一个吧,选华北。

  4. 先买一个月的吧。只要9.5哎!真的是很便宜的价格了。阿里云有学生认证可以买多次,腾讯云则是有次数限制的。

  5. 点击立即购买去付款就好啦~

5. 云上初体验

购买成功后我们进入控制台页面,如下图

阿里云控制台

我们主要关注的就是我用箭头标注出来的那个公网IP,接下来,我们就要远程登录到这个IP地址啦!

(二)Windows用户上云

1. 背景

恭喜你已经成功购买了阿里云服务器!

众所周知,Windows的命令行功能不多和Unix完全不一样,这也就决定了我们Windows用户不能直接通过CMD来SSH远程连接到云服务器。在此向使用Windows的同学推荐Windows下的上云利器“putty+winscp”的组合方案。

另外,VSCode也有大量的辅助我们与云服务器交互的插件,感兴趣的同学也可以看一下「云服务器入门(三)Mac用户上云」,里面所提到的VSCode插件在Windows下也可以使用!

2. putty

基本介绍

PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将PuTTY移植到其他平台上,像是以Symbian为基础的移动电话。PuTTY为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,Putty是出色的工具之一。Putty是一个免费的、Windows x86平台下的Telnet、SSH和rlogin客户端,但是功能丝毫不逊色于商业的Telnet类工具。 ——《百度百科》

下载安装

putty下载链接

根据电脑实际选择32/64位下载就ok啦~

putty下载界面

安装过程不赘述。

使用方法

见「云服务器入门(四)」

3. WinSCP

WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。winscp也可以链接其他系统,比如linux系统。WinSCP可以执行所有基本的文件操作,例如下载和上传。同时允许为文件和目录重命名、改变属性、建立符号链接和快捷方式。甚至还可以在线编辑文件内容。

下载安装

WinSCP下载链接

这个进去后直接下载就行。

WinSCP下载界面

安装过程不赘述。

使用方法

  1. 打开WinSCP

  2. 输入主机名(IP)和用户名及密码,WinSCP会帮你记住,下次就可以直接登录啦。 WinSCP配置

  3. 进入操作界面。界面分为两部分,左侧是Windows的文件资源管理器,右侧是服务器的目录。
    WinSCP界面

这样我们就可以愉快地拖拽文件上传到服务器啦~当然也可以从服务器上下载文件;

另外,我们还可以直接右键点击服务器上的文件选择编辑,对于vim使用不熟练的我来说可以这样编辑文件真是太爽了~~

(三)Mac用户上云

1. 背景

恭喜你已经成功购买了阿里云服务器!

众所周知,macOS是基于Unix开发的,所以mac自带的命令行已经能满足我们大部分的使用需求啦。今天我们来探讨一下如何更优雅的在Mac上连接远程服务器。

macOS系统下普遍吐槽没有很好用的SCP应用(也有可能是我还没发现)。用推荐比较多的FileZilla后发现也不如Windows下强大的WinSCP。

说起WinSCP,最让我怀念它的倒不是极其方便的上传文件功能,毕竟scp命令也没多长,不用工具也可以解决,而是它可以右键服务器上的文件进行在线编辑,感觉比较方便。(对于vim掌握不熟练的我来说)

image-20181021165826871

突发奇想,想看看我们越来越流行,越来越强大的VSCode有没有好的解决方案,还真的搜到了~~~在美国简书Medium上找到了一篇(原文作者和我有很相似的历程hh):

Editing files in your Linux Virtual Machine made a lot easier with Remote VSCode

2. Remote VSCode

环境

  • 本地:macOS+VSCode

  • 服务器:CentOS 7.3

VSCode内安装插件

  1. 打开VSCodeVSCode下载

  2. 进入插件页,搜索“Remote VSCode”

image-20181021165629137

  1. 安装插件并重启VSCode

服务器上安装rmate组件

  1. 打开服务器,并执行以下命令

    1
    2
    $ sudo wget -O /usr/local/bin/rmate https://raw.github.com/aurora/rmate/master/rmate
    $ sudo chmod a+x /usr/local/bin/rmate

VSCode内使用这一插件

  1. 回到VSCode打开命令窗Command + Shift + P并执行 Remote: Start Server

(这一步是开启macOS的52698端口,保持TCP连接,等待请求)

  1. OK之后,在VSCode内打开一个新的终端输入以下命令连接到你的Linux服务器:

    1
    2
    $ ssh -R 52698:localhost:52698 VIRTUAL_MACHINE_IP_ADDRESS
    # (VIRTUAL_MACHINE_IP_ADDRESS 就是你的服务器IP地址)
  2. 在你的VSCode终端内,执行rmate命令来编辑你想编辑的文件。会看到服务器上的文件内容会在VSCode里面自动就显示出来啦~这时你再保存也是同步保存到服务器上的。你也同样可以在VSCode的终端里执行命令比如 python test.py 之类。也就是说只需要一个VSCode就可以完成连接、编辑、保存、执行操作。(就差一个SFTP上传了~,SFTP上传插件也找到了,这个暂时没需求,下次再试一下嘿嘿)
    image-20181021170337024

为什么是52698?

52698是Remote VSCode插件的默认端口,你可以在“User Preference”页面内搜索”Remote VSCode configuration”来改变它。

image-20181021170055557

3. iTerm2

另外再推荐一款命令行软件“iTerm2”。iTerm甚至可以说是Mac下开发的必备软件~

简介

iTerm2 is a replacement for Terminal and the successor to iTerm. It works on Macs with macOS 10.10 or newer. iTerm2 brings the terminal into the modern age with features you never knew you always wanted.

iTerm 2 有很多能够提升效率的实用功能。比如说窗口分割、热键窗口、智能搜索、自动完成、快速复制等等。

安装与配置

下载安装

iTerm2下载链接

主题

推荐最多的一款主题叫Solarized。这款主题有它自己的官网,同时支持主流的editor和IDE。主题配置步骤如下:

  1. 官网下载主题压缩包,下载链接

  2. 下载后解压,然后按 ⌘,,打开iTerm2的Preferences,接着Profiles -> Colors -> Color Presets -> Import,选择刚解压的文件夹solarized/iterm2-colors-solarized下的Solarized Dark.itermcolors文件。

  3. 在Color Presets 下拉菜单中选中 Solarized Dark 主题,大功告成。

  4. 配置截图如下:
    配置截图

  5. 成功后是这样的:
    最终效果

  6. 当然啦,现在的字体还不够美观。我们在GitHub或者Google上能搜到无数其他的外观配置方案,就留给大家去探索啦~

常用快捷键

  1. ⌘+T 打开一个新的标签页

  2. ⌘+; 弹出自动补齐窗口

  3. ⌘+Shift+; 弹出历史命令记录窗口

  4. ⌘+Shift+H 弹出历史粘贴记录窗口

  5. ⌘+←⌘+→⌘+{, ⌘+}⌘+<number> 切换标签页

  6. ⌘+F 智能查找,支持正则查找

  7. ⌘+[⌘+]⌘+Option+方向键 切换 pane

  8. ⌘+D 水平切分屏幕,⌘+Shift+D 垂直切分屏幕

  9. ⌘+Enter 进入与返回全屏模式

(四)云服务器基本使用

1. 背景

先总结一下(二)和(三)的目的:

因为我们要远程访问我们的服务器,所以我们需要一些工具(shell)去和它进行交互。

Windows下因为Windows的CMD或者说powershell不支持Unix/Linux系统的那些bash命令,所以我们需要一款支持这些命令的软件“putty”去帮助我们。

同时,因为我们经常会有向服务器上传/下载文件的需求,所以我们用WinSCP这款工具去帮助我们。

对于Mac用户来讲呢,因为macOS就是基于Unix开发的,所以在Mac自带的终端内直接ssh就可以连接到云服务器啦。但是自带的终端略丑且功能称不上强大,所以我们用最流行的Mac下的终端软件“iTerm”去帮助我们获得更好的体验。

同时对于喜爱VSCode的同学,我们还介绍了一款插件去让我们所有的工作全部在VSCode完成。

2. 登录

  1. 开启终端(iTerm2/putty,本文使用的是iTerm2)
    终端界面

  2. SSH远程连接

    1
    ssh Your_Server_IP_Address
  3. 输入用户名和密码

  4. 成功登陆啦!看到了阿里云的欢迎语。
    阿里云登录界面

3. 随便干点什么

大家可以看到,这和我们之前使用的虚拟机是完全一样的~

大家应该想到一点了,就是我们也可以用 putty/WinSCP/iTerm 这些工具去访问我们的虚拟机。

在虚拟机内通过ifconfig命令就可以看到虚拟机的IP地址啦~

4. 退出

断开与服务器的连接也是一门学问。可能很多同学会直接点击窗口的红叉就关掉了,不过有时候如果我们保持了长连接,访问可能没被关闭。所以最正确的方法当然是在命令行里关闭:

1
exit

阿里云退出界面

5. 保持连接

刚开始使用这些远程shell都会遇到一个问题就是如果隔一段时间没有输入新的命令,连接就会被自动断开。这是因为我们没有保持连接,下面介绍一下保持连接的办法。

两款软件保持连接的原理基本一致,都是每隔一段时间自动向服务器发送一条指令帮助我们保持连接。

iTerm2

Preferences -> Profile -> Session -> When idle, send ASCII code…

保持连接1

putty

Putty Configuration -> Connection -> Seconds between keepalives (0 to turn off), 默认为0, 改为30(介于30至150就ok)。

保持连接2

(五)C/S实战

1. 背景

这是云服务器入门系列的最后一节啦~很开心你能看到这里。五节内容都是我对云服务器日常使用的一些拙见,如有错误,还请包含!

我个人一直在用阿里云,本着“每台服务器只做一件事”的思想,用起来真的很爽!阿里云对学生的优惠真的蛮大的,我一直用¥9.5的学生机作为我开发的一款小程序的后端。¥9.5的配置还是能满足比较初级的需求的,我的后端大概每天有5000次左右的请求,服务器的负荷在高峰时(100次请求/s)也不过30%。

希望你能喜欢!

最后一节我们来进行一个简单的实战,我们借助Linux下很好用的网络调试探测工具netcat(nc)来进行一个简单的服务器与客户端的连接。

2. 安装nc

服务器和本地虚拟机上都要安装一下nc客户端哦。

1
2
yum install nc # for centos
sudo apt install netcat # for ubuntu

3. 开启服务器端监听

服务器在某个端口上侦听,使用nc -l 主机ip地址 端口号

我们可以加上-v来显示这个过程,如果不指定ip地址的话就默认是0.0.0.0,相当于INADDR_ANY。

在我们的云服务器上执行如下命令:

1
nc -l -v 12345

显示如下:

image-20181021204156047

4. 客户端发送请求

客户端通过 nc 主机ip地址 端口号 连接服务器,连接成功后,可以在任何一终端来相互发送数据了。

在我们的本地虚拟机上执行如下指令(注意,YOUR_SERVER_IP_ADDRESS是你的服务器的数字地址哦)

1
nc -v YOUR_SERVER_IP_ADDRESS

连接成功后,客户端输入任意字符都会自动发送到服务器上啦。

image-20181021212256452

下面我们可以在服务器上运行我们自己的server代码啦。比如实验四提供给我们的web server代码,我们在服务器上开启它后就可以通过客户端访问了。

5. 在服务器上部署Java项目

执行如下步骤

  1. 将Java项目打包成jar包/war包等压缩包
  2. 利用WinSCP/FileZilla等FTP工具将压缩包上传至服务器(记住上传位置)
  3. 利用命令行工具登录到服务器进入压缩包所在位置
  4. 运行

    1
    nohup java -jar yourprojectname.jar &
    • nohup: 进程后台运行,将日志输出到文件
    • &: 回到命令行
  5. 部署成功,如果是前后端分离项目就可以用postman访问服务器地址测试啦
    另外为了部署方便推荐使用jenkins,一键即可从github仓库拉取代码、maven打包、执行shell命令完成部署

6. 总结

以上五篇就是我所整理的一些「云服务器」从购买选择到初步使用的入门知识啦。感谢你能看到这里,如有错误还请包含。
留言板