澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:云服务器,ubuntu云服务器

2019-06-08 作者:服务器运维   |   浏览(96)

京东云服务器,云服务器

写在前面

一直很好奇云服务器(CVM,Cloud Virtual Machine)到底是个什么用法,如何能够把我们写好的页面放在上面展示给别人看,好奇不如行动,于是我买了一个尝尝鲜。这里我主要说买完之后该怎么做,对于小白来说,拿到一部云主机根本无从下手,我也是在别人帮助下完成部署页面的,在这里分享给大家。

本篇文章跟大家分享的是如何在阿里云ECS上面配置Ubuntu系统的服务器。前提是你要拥有一台阿里云的服务器,服务器的系统选择Ubuntu系统,建议大家选用 Ubuntu 16.04 64位在配置服务器的过程中,我们只需要完成两大步:安装jdk环境、安装Tomcat软件。配置服务器完成之后,我们便可以根据外网来访问我们的服务器。对于装有Ubuntu系统的阿里云服务器,我是不建议去安装图形化操作界面的,一是占用服务器的内存,二是没什么用处。当然,最后还是要根据你自己的需求来定。现在让我们开始配置我们的阿里云服务器吧。

一、前言

在郭霖大神的带领下,我花了一元钱入手了2个月的京东云主机,也就是个人服务器。

这是我人生第一台服务器,多么值得纪念。。。。。。

入手地址在这里

一直不买的原因也是因为自己的Android水平没有达标,不想去学其他方面的知识而分心。

其实很容易发现这他喵的就是一个不想学习的借口罢了!

更容易发现这明显是没钱买吧!

澳门新萄京官方网站 1

所以趁此机会,入手了2个月服务器来尝鲜。名额有限,说不定已经没有了。。。

购买流程就不说了,服务器系统选择的是Ubuntu 16.04 64位。

接下来的使用状况都是围绕着Ubuntu 16.04 64位展开的。

Android NDK开发之旅 目录

形势分析

具体步骤

首先我们应该登录到阿里云官网,来到云服务器管理控制台,查看我们的服务器运行情况,保证我们的云服务器是运行状态。

二、登录云主机

郭霖大神推荐了两款软件用于控制服务器 和 上传下载服务器文件:Xshell和Xftp。

但是两款软件都是Windows系统的,没有macOS系统。

如果你是Windows系统的,可移步郭霖大神的搭建教程,相对比较简单。

那么如何在macOS系统下操作服务器呢?

在京东云的帮助中心中,macOS系统的登录方式有两种:一种是VNC登录,一种是SSH密钥登录。

前言

因为在Linux环境下编译FFmpeg生成库和头文件下比较方便,所以接下来主要操作在Linux环境下进行。但是对于Android NDK 开发新手来说,自己电脑配置Ubuntu Linux环境过程比较繁琐。而采用云服务器极大的方便了此过程,服务器对客户端远程的支持,让个人开发更加有拓展性和创意性,而且也便利于接下来课程学习。
现在云服务器发展迅速,有阿里云、腾讯云、百度云、京东云、美团云、网易云等等。开发者可以根据自己的需求选择合适的云服务器。学习与使用云服务器的过程,有利于提升自己个人能力。
这里我购买了京东云服务器Ubuntu 14.04 64位进行开发。

对公司而言,服务器并不是大事。互联网公司都有服务器和机房。但对个人开发者而言,服务器长久以来确是一大难题。但近年,国外亚马逊牵头开始做AWS云服务,并迅速获得极大成功。国内阿里巴巴及时跟进,推出阿里云平台。服务器对个人开发者而言不再是遥不可及,反而变得触手可及。甚至很多企业不再自己搭建服务器,转而使用云服务平台以节省成本。目前国内云服务平台已是百家争鸣,比起早年互联网环境已好很多。除阿里云外,现有京东云、腾讯云、百度云、美团云、网易云等。由此可见,较强实力科技公司当下都极注重云服务平台市场。

1.登录云主机

澳门新萄京官方网站 2

输入你的账号密码(初始账号密码在你的邮件里有),登录成功如下:

澳门新萄京官方网站 3

登录成功

我们的目标仅仅是部署前端页面,所以只需要配置Nginx即可。

澳门新萄京官方网站 4

VNC登录

VNC登录是京东云为用户提供的一种通过Web浏览器连接服务器的方式。

很简单,就是在京东云的控制台点击远程连接即可。

接着打开了Ubuntu 16.04 64的控制台,需要先进行登录,用户名为root,密码发送到了你的邮箱和手机当中。

澳门新萄京官方网站 5

登录面板

如果想要修改密码,可在控制台-操作 进行修改。修改完成后记得重启生效。

输入完成并正确就登录上了服务器,非常简单。

澳门新萄京官方网站 6

登录成功

不过使用VNC登录的场景很少:

  • 查看云服务的启动进度

  • 无法通过其他登录方式登录时,才使用VNC来登录服务器

所以这种登录方式,体验体验即可,并不实用。

并且它不支持复制粘贴、不支持文件上传,而且是单点登录,使用起来简直是折磨。

1、了解Linux基本操作指令与常用快捷键

熟悉Linux 基本操作指令与常用快捷键能加快我们的编程速度,在这里我只列举本篇文章中遇到的指令与快捷键,其他的大家可以自己查找资料去学习。

基本指令与快捷键 解释
ls 输出当前文件夹下包含的子文件
mkdir xx 创建文件夹xx
cd .. 进入到上一级目录
cd /xx/ 进入到xx目录
reset 让终端回到预设状态
clear 清屏
Tab键 内容联想;比如,该目录下有一个android-ndk-r14b文件夹,先输入一个a,
再按Tab键就会自动把android-ndk-r14b 文件名输入到命令行中,便于操作。
touch xxx.xx 新建xxx.xx的文件
apt-get install xx 在linux系统下安装某个程序
rm -rf xx 删除文件夹xx和及其目录下所有文件

分析比较

2.安装配置nginx

现在很多网站都是使用 nginx当静态文件服务器和反向代理服务器。Nginx是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。

2.1自动安装nginx

在终端输入sudo sudo apt-get update以确保获取最新的资源,然后键入命令行sudo apt-get install nginx自动安装。

2.2启动 Nginx 服务。

输入命令:sudo /etc/init.d/nginx start

2.3测试是否运行正常

若服务正常,显示如下:

澳门新萄京官方网站 7

每台机器不一定一样,但大致信息相同

2.4浏览器测试是否运行正常

在浏览器输入公网ip地址,若服务正常,见如下界面:

澳门新萄京官方网站 8

下面我们要下载两款远程连接的软件Xshell和Xtfp。Xshell是用来远程登录Ubuntu服务器的,登录完成之后,我们便可以自由操控。Xftp是用来想Ubuntu服务器传输文件的,我们可以将我们自己电脑中的一些软件或着是项目文件上传到服务器中。

SSH密钥登录

京东云帮助中心提供了SSH创建和登录教程。

成功设置SSH密钥后,我们就可以不使用VNC登录,直接在Mac的命令行就可以进行服务器的登录。

下面我们来一步一步设置SSH密钥:

什么是SSH密钥?

就我的理解而言,它是一种网络通讯协议,主要用于计算机之间的加密登录。

使用SSH登录的具体流程如下:

澳门新萄京官方网站 9

SSH密钥登录

可以看出一个SSH串要提供给服务器和本机,当SSH串匹配成功后,就可以实现免密登录。

这样的优点就是当登录请求被恶意拦截时,密码也不会泄露。

接下来,我们就要生成SSH密钥,并保存到本机和服务器。

要说一句的是,SSH密钥登录很多地方都有用到,比如GitHub。

如果你的电脑已经有SSH密钥,那么直接使用这个即可。

具体的SSH成功流程可参考GitHub官方教程。

在这里我也简单罗列一下SSH密钥的生成步骤:

1.校验本机是否已经生成SSH密钥:

ls -al ~/.ssh

如果输出了

id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub

则代表已经生成过,直接跳过第二步,执行第三步。

2.生成SSH密钥。如果已经生成跳过。

//注意修改最后的E-mail地址
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

执行完成后,会让输入保存路径,直接按下回车,使用默认路径进行SSH密钥的保存就可以。

接着会提示你输入该SSH的密钥密码,可以为空,直接回车,想设置的同学也可以进行设置。

该SSH密钥密码用于第一次使用SSH时的校验,并可以在SSH密钥的配置文件中关闭SSH密钥密码校验。

更多细节大家可以自己去查阅一些资料。

3.复制SSH密钥。

pbcopy < ~/.ssh/id_rsa.pub

使用该命令后,你的粘贴板内容就会变成SSH密钥。

这次我们要将SSH密钥上传到我们自己的服务器里。

打开京东云的控制板,添加SSH密钥:

澳门新萄京官方网站 10

京东云添加SSH密钥

澳门新萄京官方网站:云服务器,ubuntu云服务器怎么布局前端页面。接着点击完成,Over。

4.测试SSH密钥。
使用SSH密钥登录也非常简单。
打开我们Mac的命令行输入:

ssh user@xxx.xxx.xxx.xxx

user为用户名,我们的用户名为root。@之后为IP地址,比如:

ssh root@116.196.93.148

接着会提示输入用户输入服务器的登录密码,正确后就可以登录成功。

如果失败,建议按照京东云帮助中心教程,走一遍。

2、云服务器Ubuntu基本配置

了解完Linux基本操作指令与常用快捷键,现在我们进行云服务器Ubuntu基本配置。

京东云相比阿里云而言,价格低,配置高。

3.修改nginx配置文件

在这里补充利用Xshell远程登录服务器和Xftp上传文件的方法。
Xshell下载链接:http://rj.baidu.com/soft/detail/15201.html?ald
Xftp下载链接:http://rj.baidu.com/search/index/?kw=Xftp

下载安装完成后,运行两个软件,在Xshell里新建会话

澳门新萄京官方网站 11

澳门新萄京官方网站 12

澳门新萄京官方网站 13

点击新建文件传输按钮之后,Xftp会自动连接上云服务器,

澳门新萄京官方网站 14

这样就可以直接把本机上要展示的文件拖动上传到云服务器上了。请接着看以下内容:
在Xshell连接上云主机后,我们进入管理员身份修改配置文件,键入sudo passwd输入自己想要设置的密码,密码是不可见的,两次输入要匹配。

澳门新萄京官方网站 15

设置成功

然后,键入su root输入刚刚设置的密码登陆,

澳门新萄京官方网站 16

成功进入管理员身份

键入命令行vi /etc/nginx/sites-available/default找到下面这一段

澳门新萄京官方网站 17

这是我已经添加好的

在后面添加

location /myHtml {
                index index.html;
                root /home/ubuntu;
        }

/myHtml是你所要展示页面的文件夹,index.html是你要用于展示的页面,这两个根据自己需求可以更改。按Esc键,再输入:wq,即可保存并退出。然后输入nginx -s reload重新加载配置文件。最后打开浏览器,输入http://服务器公网ip/myHtml,就可以看到自己想要展示出来的网页了。

这两款软件是可以免费使用的,我个人认为在同类型的软件中是比较不错的。目前我电脑上面安装的是Xshell 5和Xftp 6,你可以到网上自己百度下载,也可以使用我提供的百度云链接下载:

三、简单网页搭建

我们先为我们的服务器下载一个服务器,这里使用郭神用的apache2。

apache2是专门用来显示静态网页的服务器程序。

在登录服务器成功后输入下面命令:

sudo apt-get install apache2

接着输入Y完成安装。

之后打开浏览器,输入我们服务器的IP,可以看到下面效果:

澳门新萄京官方网站 18

接着我们来替换这个html文件样式。

它在我们服务器的地址是:/var/www/html/index.html

我们只要自己写一个简单的静态Html文件,然后上传服务器覆盖掉它即可。

这里我们直接拿着郭神的简单html来做示范:

<!Doctype html>
<html>
  <head>
    <title>京东云测试</title>
    <style>
      body{text-align:center}
    </style>
  </head>
  <body>
    <h1>欢迎来到郭霖的京东云主页</h1>
    <p>
      点击
      <a href="http://guolin.tech">这里</a>
      跳转到我的博客
    </p>
  </body>
</html>

将该文件保存为index.html。

接着我们将该文件上传至服务器,这里有一篇mac向服务器上传文件的教程。非常好用。
上传命令:

//注意将yourUsername修改为你的mac用户名
//并且我的文件保存在桌面Desktop。
put /Users/yourUsername/Desktop/index.html /var/www/html

按照上述步骤后,我们成功将index.html上传至服务器并覆盖。
刷新我们的网页,可以看到下面效果:

澳门新萄京官方网站 19

效果

。。。。。。。

澳门新萄京官方网站 20

为什么显示源码!?

因为Mac的记事本以.html结尾时,会将内容格式化成文本,不做代码显示。

解决也很简单,这篇文章。

解决后重新执行上传代码,重新刷新页面,效果如下:

澳门新萄京官方网站 21

效果

。。。。。

这就很气!看来自己不适合做前端啊!

简单查阅后,在head中添加如下代码即可:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

接着再次执行文件上传,再次刷新页面,效果如下:

澳门新萄京官方网站 22

效果

2.1、下载Xshell和Xftp,用来远程控制云服务器。

Xshell是一个强大的安全终端模拟软件,方便操作命令行。
Xftp是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件,方便传输文件。

购买咨询

心得体会

一步步下来终于可以看见网站上展示出自己的页面,甚是激动,对于新手的我来说,买完CVM真不知如何下手,通过网上寻求教程帮助和同学的指点,总算完成部署前端页面了。在这里分享出来,希望能够帮助到大家。第一次撰写文章,如有不足之处或不懂的地方,欢迎批评指正和提问。

链接: 提取码: ee3b

四、总结

至此,一个非常简单的静态网页的个人博客便搭建完成了!

写出这么个静态网页,带上这篇文章的完成,一共耗时2天,走的弯路没有描述。

其中包括Linux命令行控制、SSH密钥理解等,都是新知识,于我而言还是有很大提升的。

以后如果能用这个服务器,搭建一个动态的个人博客,想必对自己的提升是极大的!

想想还有些小激动呢!

2.2、Xshell连接云服务器

套餐一

配置:CPU 1核 内存2GB
时长:2个月
价格:1元

软件下载安装完成之后,首先打开Xshell,点击号按钮,然后在弹框中输入我们的连接名称、协议、我们的服务器主机地址和端口号。

2.2.1、新建会话

套餐二

配置:CPU 1核 内存2GB
时长:6个月
价格:99元

澳门新萄京官方网站 23

(1)文件->新建

输入云服务器对应的公网IP地址

填写云服务器公网Ip地址

套餐三

配置:CPU 1核 内存2GB
时长:1年
价格:188元

绝大数情况下,协议和端口号我们是不用修改的,使用默认的SSH协议和22端口即可。主机地址需要说一下,如下图所示,在阿里云网站来到云服务器管理控制台,在红框中的位置找到公有IP地址,填写到上图中的主机位置即可。

(2)属性->用户身份验证

输入云服务器设置的用户名和密码

设置用户名和密码

购买过程

  • 复制上方任一个购买链接到电脑浏览器,跳转京东云登录界面。如图所示。直接使用京东账号登录即可。

  • 登录后,若账号无实名认证则需实名认证,此步根据提示操作即可;若已实名认证,便可直接购买。如图所示。这里选择ubuntu 16.04的镜像,这是目前最流行Linux操作系统,因服务器相关基本都使用Linux系统。当然,也可选择Windows Server或其它。但在此所有演示都将使用ubuntu系统来演示。

  • 支付成功会自动跳转京东云控制台界面,如图所示。显示有服务器IP地址、状态、配置等信息。ubuntu系统服务器初始帐号为root,初始密码发送至手机和邮箱。也可点击更多按钮来重置密码。(重置密码后需重启服务器)

澳门新萄京官方网站 24

2.2.2、连接

连接成功

使用

填写完成之后,点击确定,来到会话界面,选中我们刚刚新建的会话,点击连接。

3.1、xftp连接云服务器

相关说明

至此服务器已启动,但还需能操作才可。京东云控制台界面提供有操作云服务器方式,但不太方便。较好操作方式通常借助第三方工具。在此推荐两个工具,Xshell和Xftp。其中Xshell用于远程连接服务器并执行命令;Xftp用于向服务器上传文件或从服务器下载文件。

澳门新萄京官方网站 25

3.1.1、新建会话

具体步骤

  • 安装好上述两软件,首先打开Xshell。界面如下:

  • 目前暂无任何服务器配置,现在点击新建进行配置。如图所示。服务器名称可随便填写,协议选SSH,主机须填写京东云控制台界面所显示公网IP地址,端口号须为22。点击确定完成配置。

  • 现已配置好一台服务器,选中该服务器并点击连接即可。如图所示:

  • 连接过程提示SSH安全警告对话框,选择接受并保存,以后连接便无需重复输入。如图所示:

  • 接下来提示输入用户名,必须输入root。如图所示:

  • 下一步提示输入云服务器密码,若没修改密码,用手机短信或邮箱收到的初始密码即可;若已修改密码,则用所设新密码。如图所示:

  • 设置好后,便可成功连接云服务器。如图所示:

  • 至此便可以root用户身份成功登录该云服务器,对该云服务器存在100%控制权。接下来便可做任何事情,比如部署服务器程序等。该云服务器是具备完整功能的Linux服务器,支持所有Linux命令。比如最常用cd、ls等命令。下面先cd到服务器根目录,然后ls,观察目录结构。如图所示。

接下来就是输入我们登录的用户名和密码,在初始化我们的服务器的时候,你应该会给root用户设置了一个密码,我们这里就是用root用户和该密码登录即可。

注意:这里一定要选择SFTP

搭建网站

登录完成之后,我们会来到下图界面,下面我们要使用Xftp软件连接到我们的Ubuntu服务器,以便我们后面的传输文件。因为Xshell和Xftp是同一个公司的产品,所以我们不用额外打开Xftp软件,直接在当前界面中点击,选择,这个时候便会自动打打开Xftp软件。

3.1.2、连接

连接成功

相关说明

服务器程序需开发者自己开发,语言分类较多,例如Java、.Net、PHP等都可用于开发服务器程序,在此不做过多介绍。但为演示,会搭建一个非常简易网站。因要求网站尽可能简单,故不用编程语言,单做一个静态网页便可。

澳门新萄京官方网站 26

注意:有文件新增和删除和修改时,记得点击刷新按钮刷新目录。

具体步骤

  • 首先安装apache服务器,它是一个专门用来显示静态网页的服务器程序。ubuntu系统上安装程序非常简单,只需输入apt-get install命令,再加需安装程序名即可。例如输入apt-get install apache2,如图所示:

  • 输入Y并点击回车确认安装。apache服务器安装完成后会自动启动,现在便可在浏览器输入京东云服务器IP地址来查看效果。如图所示:

  • 上方所示页面为一个apache服务器默认页面,看到这个页面便说明服务器已启动成功。接下来可编写一个网页替换当前默认页面。编写网页需用HTML,编写网页样式需用CSS。这些同为前端开发工程师必备技能。在此写一个最基础网页,代码简单易懂。如下所示。将该段代码保存为index.html文件,然后只需将云服务器上的/var/www/html/index.html文件替换掉就便可。

<!Doctype html>
<html>
  <head>
    <title>京东云测试</title>
    <style>
      body{text-align:center}
    </style>
  </head>
  <body>
    <h1>欢迎来到xxx的京东云主页</h1>
    <p>
      点击
      <a href="http://blog.csdn.net/zsp_android_com">这里</a>
      跳转到我的博客
    </p>
  </body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 如何将刚刚所写index.html文件上传到云服务器呢?此刻需借助刚才所介绍工具Xftp。Xftp配置和Xshell基本一模一样,只需注意协议部分须选SFTP。如图所示:

  • 配置完成后便可连接服务器,连接成功后界面如图所示。界面分两部分,左边部分为本机目录;右边部分为所连接云服务器目录。如图所示:

  • 现将云服务器目录切换到/var/www/html下,然后右击刚才所写index.html文件,点击传输,便可把文件上传服务器指定目录下。如图所示:

  • 文件替换成功,至此所有任务完成。现只需刷新刚才apache默认网页,便可看到如下界面:

在弹框中输入我们之前一样的密码,我们便可以建立文件传输连接,我们现在就可以像服务器传输文件,也可以从服务器上下载文件了。

4、在云主机Ubuntu 中安装所需的程序

延伸

若有域名,可对该IP绑定域名,这样访问网站便不用输入奇怪的IP地址。

澳门新萄京官方网站 27澳门新萄京官方网站 28

4.1、安装vim并对其配置

总结

对云服务器的强大和便利性上深有体会。不管在什么地方,都可轻而易举地远程操作千里之外云服务器。

到目前为止,我们已经成功建立了需要使用的两条连接,接下来我们就是在这两条连接的基础之上,安装jdk和Tomcat。

4.1.1、安装

输入命令

apt-get install vim /etc/vim/vimrc-gtk

安装vim

1.下载jdk并上传至服务器

点击下载链接,我们会来到jdk下载页面,首先选择【Accept License Agreement】,然后根据自己安装的Ubuntu系统位数选择红框中的链接。

澳门新萄京官方网站 29

现在使用Xftp工具,在服务器的/usr/lib文件夹下新建一个文件夹,命名为jdk,然后将我们电脑本地中刚刚下载的jdk安装包拖到这个文件夹下面,将我们下载的jdk安装包上传到服务器。

澳门新萄京官方网站 30

4.1.2、查看vim安装成功

输入命令

vim /etc/vim/vimrc

vim安装成功页面

2.解压jdk安装包进行安装

jdk文件上传完成之后,打开Xshell软件,使用cd命令来到我们刚刚新建的这个文件夹下面,在这里我们可以看到我们刚刚上产的jdk安装包。

澳门新萄京官方网站 31

接下来我们需要解压安装我们刚刚上传的jdk安装包,输入下面的命令:

tar -zxvf jdk-8u181-linux-x64.tar.gz
4.1.3、配置vimrc
3.配置JAVA环境变量

jdk安装包解压安装完成之后,我们要修改etc文件夹下的profile文件,为所有用户配置JAVA环境。输入下面的命令,我们使用vi打开profile文件:

sudo vi /etc/profile

文件打开之后,将下面的文字添加到profile文件末尾。这里需要注意的是,因为我下载jdk安装包的是jdk1.8.0_181,解压完成之后的文件夹名字是jdk1.8.0_181,所以下面文字的第一行的最后是jdk1.8.0_181。如果你下载的是其他的版本,那么这里要根据你的实际情况进行更改。

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 

添加完成之后输入下面的命令,使配置的环境立即生效。

source /etc/profile

到此为止,我们已经成功完成了jdk的安装,现在输入java -version命令查看java的版本,如果显示出java的版本,说明我们已经成功安装了jdk。

澳门新萄京官方网站 32

(1)点击 i 键,进入到进入编辑模式
1.下载Tomcat安装包并上传到服务器

jdk安装完成之后,我们接下来要安装Tomcat。首先我们到Tomcat官网下载安装包,如果你不知道如何进行下载,也可以直接点击百度云链接进行下载,这里我们安装Tomcat8.5.34。

澳门新萄京官方网站 33

我们可以将Tomcat安装在/usr/local文件夹下,所以我们先在/usr/local文件夹下创建Tomcat文件夹,然后使用Xftp软件将下载好的安装包上传到该文件夹下。

澳门新萄京官方网站 34

(2)设定光标和行数参数
set nu "显示行号
set tabstop
set ruler "显示光标位置
set cursorline "光标高亮显示
2.解压进行安装Tomcat

上传完成之后,来到Xshell软件中,使用cd命令来到/usr/local/Tomcat文件夹,然后输入下面的命令解压进行安装Tomcat。

tar -zxvf apache-tomcat-8.5.34.tar.gz
注意:-- INSERT --表示现在是编辑模式
3.配置环境

完成Tomcat的解压安装之后,使用cd命令来到/usr/local/Tomcat/apache-tomcat-8.5.34/bin文件夹下,输入下面的命令,使用vi编辑startup.sh文件:

sudo vi startup.sh

将下面的文字复制到startup.sh文件的最后一行之前,然后保存退出。跟之前配置JAVA环境一样,这里的jdk1.8.0_181也是也是要根据我们安装的jdk版本来定。

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_181export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 

澳门新萄京官方网站 35

(3)保存退出
按Esc键  再次进入命令模式
shift   : 再输入 x 保存退出
或shift   z z 保存退出
4.完成Tomcat安装,开启服务

保存退出之后,我们输入下面命令,执行/usr/local/Tomcat/apache-tomcat-8.5.34/bin文件夹下的startup.sh文件,开启Tomcat服务。

sudo ./startup.sh

如果出现下图的情况,说明我们已经成功安装Tomcat并开启了Tomcat服务。

澳门新萄京官方网站 36

现在我们就可以在我们自己的电脑上面,使用我们服务器的公网IP来访问我们的服务器,Tomcat默认开启的是8080端口,所以在公网IP后面加上":8080"。如果出现了下图的情况,说明我们的Ubuntu服务器已经配置完成。

澳门新萄京官方网站 37

完成服务器的配置之后,你可能还想要修改Tomcat的端口号,这样以后输入IP地址之后就可以直接访问服务器,而不需要在IP地址之后添加:8080。你还可能想将自己备案的域名绑定到服务器。关于这些,你可以参考另一篇文章:网站搭建——修改Tomcat的默认端口并绑定域名

其他快捷键的使用
shift   : 再输入 q! 强制退出

命令模式下,x 表示删除,dd 表示删除行

4.2、安装 dos2unix 将DOS格式的文本文件转换成UNIX格式

apt-get install dos2unix

4.3、安装make用来完成编译工作

apt-get install make

4.4、安装unzip用来解压zip文件包

apt-get install unzip 

5、搭建NDK环境

5.1、下载Linux版本的NDK

我下载的是android-ndk-r14b-linux-x86_64.zip这个文件,大家则根据自己项目需要下载。

5.2、在目录下创建一个usr文件夹

cd /
mkdir usr

创建了usr文件夹

说明:有些开发者问我,usr之外的文件是怎么来的?这些文件是你买云服务的时候,已经配置好的。大家可以先不用管。

5.3、在usr目录中创建NDK目录,通过Xftp上传已下载好压缩文件

mkdir NDK

5.4、 赋予ndk文件夹下所有文件的drwx权限,使其可执行解压操作。

 chmod 777 -R ndk

权限操作

5.5、解压上传的的zip文件

解压zip文件到ndk文件下

unzip android-ndk-r14b-linux-x86_64.zip
注意:解压过程比较长属于正常情况

解压结果

5.6、配置NDK环境变量

使用命令vim ~/.bashrc 进入到环境变量配置文件进行编辑 (~代表用户),添加

export NDKROOT=/usr/ndk/android-ndk-r14b
export PATH=$NDKROOT:$PATH

配置环境变量

5.7、更新环境变量

使用命令source ~/.bashrc更新环境变量,ndk-build -v 查看是否配置成功

环境变量配置成功

至此,NDK环境已经搭建好了。

6、编译FFmpeg

6.1、到FFmpeg官网下载FFmpge. zip

我这里使用FFmpeg 2.6.9版本,建议大家用2.8以下版本,出现问题便于解决。

6.2、上传FFmpeg文件并解压

使用xftp上传ffmpeg压缩包,使用命令unzip ffmpeg-2.6.9.zip解压文件

6.3、修改 ffmpeg-2.6.9 目录下的configure文件

修改输出的动态库的命名规则:

注释或删除以下语句
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

同时修改成以下语句
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
注意:如果不进行这一步操作,将生成以.56、.5、.3等结尾的库,这种库Android很难加载到,我们需要的是后缀.so结尾的库。

6.4、编写shell脚本文件并将其放在ffmpeg-2.6.9目录下

build_android.sh文件:

#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r14b  
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"


function build_one
{
./configure --target-os=linux 
--prefix=$PREFIX --arch=arm 
--disable-doc 
--enable-shared 
--disable-static 
--disable-yasm 
--disable-symver 
--enable-gpl 
--disable-ffmpeg 
--disable-ffplay 
--disable-ffprobe 
--disable-ffserver 
--disable-doc 
--disable-symver 
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- 
--enable-cross-compile 
--sysroot=$SYSROOT 
--extra-cflags="-Os -fpic $ADDI_CFLAGS" 
--extra-ldflags="$ADDI_LDFLAGS" 
$ADDITIONAL_CONFIGURE_FLAG
make clean
make  -j4
make install
}

指定NDK路径:export NDK=/usr/ndk/android-ndk-r14b ;
配置CPU架构类型:export CPU=arm,PREFIX是指定动态库输出的路径,然后disable一些不需要的库(可减小输出的动态库的大小);
enable-shared:生成共享库。

注意:
  • 换行的时候需要有,注意不要有额外的空格,否则编译出错
  • 脚本文件统一转为UTF-8无BOM格式。可通过note pad 进行转码,或者先由Linux创建文件再由Windows编辑。
  • NDK尽量不要使用太新的版本,一般使用Android-9即可,否则会出现在Android编译不兼容老版本而无法使用的问题。
  • 将编写好的shell脚本放在解压后的ffmpeg-2.6.9文件夹中。

6.5、build_android.sh给予执行权限。

chmod 777 -R build_android.sh

6.6、执行文件build_android

./build_android.sh

执行结束页面

说明:

如果出现问题:bad interpreter : No such file or directory,原因:没有将文件转成Linux编码格式。
转换Linux编码格式有两种方式:

1、在Linux下创建这个文件touch build_android.sh,从Linux传出到桌面,然后把脚本命令拷入这个文件中,再重新上传到Linux;
2、使用 dos2unix build_android.sh 转成Linux编码格式

6.7、用xftp查看生成文件

我们发现在ffmpeg-2.6.9文件夹生成android文件夹,在android文件夹下生成arm文件夹

生成的include和lib

include目录

lib目录

至此,FFmpeg库已编译完成。

7、利用编译好的FFmpeg库写一个视频解码Demo

7.1、jni Java声明

public class VideoUtils {

    public native static void decode(String input,String output);

    static{
        System.loadLibrary("avutil-54");
        System.loadLibrary("swresample-1");
        System.loadLibrary("avcodec-56");
        System.loadLibrary("avformat-56");
        System.loadLibrary("swscale-3");
        System.loadLibrary("postproc-53");
        System.loadLibrary("avfilter-5");
        System.loadLibrary("avdevice-56");
        System.loadLibrary("myffmpeg");
    }
}

7.2、编写C主程序

jni目录

ffmpeg_player.c
#include <com_haocai_ffmpegtest_VideoUtils.h>

#include <android/log.h>

//解码
#include "include/libavcodec/avcodec.h"
//封装格式处理
#include "include/libavformat/avformat.h"
//像素处理
#include "include/libswscale/swscale.h"

#define LOGI(FORMAT,...) __android_log_print(ANDROID_LOG_INFO,"FFmpeg",FORMAT,##__VA_ARGS__);
#define LOGE(FORMAT,...) __android_log_print(ANDROID_LOG_ERROR,"FFmpeg",FORMAT,##__VA_ARGS__);

JNIEXPORT void JNICALL Java_com_haocai_ffmpegtest_VideoUtils_decode
  (JNIEnv *env, jclass jcls, jstring input_jstr, jstring output_jstr){
    //需要转码的视频文件(输入的视频文件)
    const char* input_cstr = (*env)->GetStringUTFChars(env,input_jstr,NULL);
    const char* output_cstr = (*env)->GetStringUTFChars(env,output_jstr,NULL);

    //1.注册所有组件
    av_register_all();

    //封装格式上下文,统领全局的结构体,保存了视频文件封装格式的相关信息
    AVFormatContext *pFormatCtx = avformat_alloc_context();

    //2.打开输入视频文件
    if (avformat_open_input(&pFormatCtx, input_cstr, NULL, NULL) != 0)
    {
        LOGE("%s","无法打开输入视频文件");
        return;
    }

    //3.获取视频文件信息
    if (avformat_find_stream_info(pFormatCtx,NULL) < 0)
    {
        LOGE("%s","无法获取视频文件信息");
        return;
    }

    //获取视频流的索引位置
    //遍历所有类型的流(音频流、视频流、字幕流),找到视频流
    int v_stream_idx = -1;
    int i = 0;
    //number of streams
    for (; i < pFormatCtx->nb_streams; i  )
    {
        //流的类型
        if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            v_stream_idx = i;
            break;
        }
    }

    if (v_stream_idx == -1)
    {
        LOGE("%s","找不到视频流n");
        return;
    }

    //只有知道视频的编码方式,才能够根据编码方式去找到解码器
    //获取视频流中的编解码上下文
    AVCodecContext *pCodecCtx = pFormatCtx->streams[v_stream_idx]->codec;
    //4.根据编解码上下文中的编码id查找对应的解码
    AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
    //(迅雷看看,找不到解码器,临时下载一个解码器)
    if (pCodec == NULL)
    {
        LOGE("%s","找不到解码器n");
        return;
    }

    //5.打开解码器
    if (avcodec_open2(pCodecCtx,pCodec,NULL)<0)
    {
        LOGE("%s","解码器无法打开n");
        return;
    }

    //输出视频信息
    LOGI("视频的文件格式:%s",pFormatCtx->iformat->name);
    LOGI("视频时长:%lld", (pFormatCtx->duration)/1000000);
    LOGI("视频的宽高:%d,%d",pCodecCtx->width,pCodecCtx->height);
    LOGI("解码器的名称:%s",pCodec->name);

    //准备读取
    //AVPacket用于存储一帧一帧的压缩数据(H264)
    //缓冲区,开辟空间
    AVPacket *packet = (AVPacket*)av_malloc(sizeof(AVPacket));

    //AVFrame用于存储解码后的像素数据(YUV)
    //内存分配
    AVFrame *pFrame = av_frame_alloc();
    //YUV420
    AVFrame *pFrameYUV = av_frame_alloc();
    //只有指定了AVFrame的像素格式、画面大小才能真正分配内存
    //缓冲区分配内存
    uint8_t *out_buffer = (uint8_t *)av_malloc(avpicture_get_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height));
    //初始化缓冲区
    avpicture_fill((AVPicture *)pFrameYUV, out_buffer, AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height);

    //用于转码(缩放)的参数,转之前的宽高,转之后的宽高,格式等
    struct SwsContext *sws_ctx = sws_getContext(pCodecCtx->width,pCodecCtx->height,pCodecCtx->pix_fmt,
        pCodecCtx->width, pCodecCtx->height, AV_PIX_FMT_YUV420P,
        SWS_BICUBIC, NULL, NULL, NULL);


    int got_picture, ret;

    FILE *fp_yuv = fopen(output_cstr, "wb ");

    int frame_count = 0;

    //6.一帧一帧的读取压缩数据
    while (av_read_frame(pFormatCtx, packet) >= 0)
    {
        //只要视频压缩数据(根据流的索引位置判断)
        if (packet->stream_index == v_stream_idx)
        {
            //7.解码一帧视频压缩数据,得到视频像素数据
            ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet);
            if (ret < 0)
            {
                LOGE("%s","解码错误");
                return;
            }

            //为0说明解码完成,非0正在解码
            if (got_picture)
            {
                //AVFrame转为像素格式YUV420,宽高
                //2 6输入、输出数据
                //3 7输入、输出画面一行的数据的大小 AVFrame 转换是一行一行转换的
                //4 输入数据第一列要转码的位置 从0开始
                //5 输入画面的高度
                sws_scale(sws_ctx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height,
                    pFrameYUV->data, pFrameYUV->linesize);

                //输出到YUV文件
                //AVFrame像素帧写入文件
                //data解码后的图像像素数据(音频采样数据)
                //Y 亮度 UV 色度(压缩了) 人对亮度更加敏感
                //U V 个数是Y的1/4
                int y_size = pCodecCtx->width * pCodecCtx->height;
                fwrite(pFrameYUV->data[0], 1, y_size, fp_yuv);
                fwrite(pFrameYUV->data[1], 1, y_size / 4, fp_yuv);
                fwrite(pFrameYUV->data[2], 1, y_size / 4, fp_yuv);

                frame_count  ;
                LOGI("解码第%d帧",frame_count);
            }
        }

        //释放资源
        av_free_packet(packet);
    }

    fclose(fp_yuv);

    (*env)->ReleaseStringUTFChars(env,input_jstr,input_cstr);
    (*env)->ReleaseStringUTFChars(env,output_jstr,output_cstr);

    av_frame_free(&pFrame);

    avcodec_close(pCodecCtx);

    avformat_free_context(pFormatCtx);
  }

7.3、写mk文件

Android.mk
LOCAL_PATH := $(call my-dir)

#ffmpeg lib
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec
LOCAL_SRC_FILES := libavcodec-56.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avdevice
LOCAL_SRC_FILES := libavdevice-56.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avfilter
LOCAL_SRC_FILES := libavfilter-5.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avformat
LOCAL_SRC_FILES := libavformat-56.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := libavutil-54.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := postproc
LOCAL_SRC_FILES := libpostproc-53.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swresample
LOCAL_SRC_FILES := libswresample-1.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swscale
LOCAL_SRC_FILES := libswscale-3.so
include $(PREBUILT_SHARED_LIBRARY)

#myapp
include $(CLEAR_VARS)
LOCAL_MODULE := myffmpeg
LOCAL_SRC_FILES := ffmpeg_player.c
LOCAL_C_INCLUDES  = $(LOCAL_PATH)/include
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := avcodec avdevice avfilter avformat avutil postproc swresample swscale
include $(BUILD_SHARED_LIBRARY)
Applicatoin.mk
APP_MODULES := myffmpeg
APP_ABI := armeabi
APP_PLATFORM := android-9

7.4、Android调用主函数

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void mDecode(View btn){
        String input = new File(Environment.getExternalStorageDirectory(),"小苹果.mp4").getAbsolutePath();
        String output = new File(Environment.getExternalStorageDirectory(),"小苹果_out.yuv").getAbsolutePath();
        VideoUtils.decode(input, output);
    }
}

7.5、其它文件配置

build.gradle中
        ndk{
            moduleName "myffmpeg"
        }
        sourceSets.main{
            jni.srcDirs = []
            jniLibs.srcDir "src/main/libs"
        }
AndroidManifest.xml中
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

7.6 结果运行

7.6.1、Log输出
I/FFmpeg: 视频的文件格式:mov,mp4,m4a,3gp,3g2,mj2
I/FFmpeg: 视频时长:211
I/FFmpeg: 视频的宽高:720,480
I/FFmpeg: 解码器的名称:mpeg4
I/FFmpeg: 解码第1帧
I/FFmpeg: 解码第2帧
I/FFmpeg: 解码第3帧
I/FFmpeg: 解码第4帧
I/FFmpeg: 解码第5帧
I/FFmpeg: 解码第6帧
I/FFmpeg: 解码第7帧
I/FFmpeg: 解码第8帧
I/FFmpeg: 解码第9帧
太多省略......
7.6.2、mp4转换格式生成的文件

至此,Android调用FFmpeg库完成。

结语

虽然过程漫长,但我相信大家会涨不少知识。

源码下载

Github:https://github.com/kpioneer123/FFmpegTest

微信号kpioneer

本文由澳门新萄京官方网站发布于服务器运维,转载请注明出处:澳门新萄京官方网站:云服务器,ubuntu云服务器

关键词: