在国外没啥事做, 考前也不愿意复习, 看到aws能免费试用一年, 于是就试着搞了搞, 就准备搭建个个人网站玩玩.

aws的注册与创建实例

首先个人感觉这个东西使用起来还是很方便的, 一开始注册完验证完银行卡手机等等一系列的东西之后, 会有一个等待时间. 之后要搭建网站, 我实际上只是使用了了其中的ES2(elastic computing cloud), 这东西实际上就是一个远程的服务器. 这里要特别注意如下几点 :

  1. 服务器地址的选择, 右上角可以选择地址, 我开始选的是美国西部, 结果卡的一比, 换了伦敦网速暴涨, 简直无敌.
  2. 安全组的设置, 创建实例过程中, 不同的地址的实例是分离的而不是共享的. 这里感觉配置参数没什么需要注意的, 除了这个安全组. 安全组中, 如果你用tomcat, 默认开启的监听端口是8080, 但是一般来说安全组中只设置了80(http), 22(ssh)这两个端口, 那么此时如果你就这样, 那么到时候你tomcat服务器开起来之后, 你会发现你尝试访问8080端口, 会出现一个巨长的等待时间然后告诉你connection time out. 这里比较烦就在于, 我当时压根不知道是tomcat没有设置好还是云服务器这边没有设置好, 所以这里特别要注意.
  3. 申请一个elastic ip, 在左下方能看到, 申请之后和你的实例绑定就行了, 实际上就是一个公用的ip地址而已.

弄完这些之后, 之后开启服务器, 即使没有绑定域名, 你也可以用这个ip地址, 或者是它提供的public DNS进行访问.

tomcat的安装

  1. 先用curl从tomcat的官网把那个安装包下来, 解压到任意目录就行了, 理论上安装就这么简单.
    2.此时进入tomcat的bin目录, ./startup即可, 然后你可以用我上面说的, 你申请的ip地址或者是public DNS尝试访问, 如果能看到tomcat说明成功了. 如果你上面安全组中没有加入8080, 那么这时候你发现页面一直在加载但就是加载不出来. 这里和那种输错端口号, 比如你这时候直接不加端口号8080, 也就是使用默认短号号进行访问又有所不同, 默认端口号进行访问的话, 会直接返回给你connection refused. (注意是直接返回, 速度很快)
  2. 但是一般来说默认的http端口是80, 所以你也可以到tomcat的conf目录下把server.xml中把协议为http的connector的端口号从8080改为80.
  3. 本来讲道理这时候./startup即可, 但是其实不然, 必须要用sudo ./startup, 这又是一个坑, 因为默认状态下低于1024的端口号必须要管理员权限才能开启, 这里的坑在于, 即使你直接./startup, 也不会有任何提示, 搞得还以为自己设置成功了. 这时候你只需要使用sudo lsof -i (list of file)这里也必须加sudo, 否则低于1024的是隐藏的, 来查看网络端口的占用情况, 如果你发现80(一般会直接写成http)已经在监听状态, 这时候说明是成功了. 如果你不加sudo启动tomcat, 是不会有这个端口在监听的. 另外,没有开启成功还有一个特征, 就是你用./shutdown关闭的时候会出现exception, 但不保证一定是这样, 反正我这种情况下失败了就是这样.

tomcat的配置

  1. 主要是 conf/server.xml中 :

这里讲几个重要的参数 :

  1. appBase : 不写的话默认是webapps, 值得注意的是这个并不是你项目的目录, 而是你项目目录的目录, 里面的每一个文件夹算是一个javaWeb应用. 如果你用绝对路径的话, 则为绝对路径, 如果用相对路径的话, 则是以tomcat的根目录为起点的相对路径. 所以默认情况下这个地方写的是webapps, 实际指定的是$CATALINA_HOME/webapps, 这也就能解释为什么我们一开始不设置这个文件直接开启服务器却也就能访问到页面.
  2. path 和 docBase : 就是根据path来匹配对应的目录, 实际就是设置一个虚拟目录. 比如我图中的第二个path是/proj2, 那么我只需要输入localhost/proj2实际上就匹配了目录/home/ec2-user/FredNzhlWebProj/test. 如果path=""或者"/", 那么直接匹配的是localhost, 这时候如果你上面的appBase会被直接无视. 我做了大量实验发现, docBase似乎并不能是一个相对路径而必须是一个绝对路径(尽管网上很多人说它可以是相对路径, 而且是相对appBase的相对路径). 而且docBase和appBase的路径可以没有任何关系.
  3. 另外感觉appBase更像是一个更高级的docBase, 在这个目录下的每个文件夹都是一个context, 也就是说都会被自动部署, 而docBase只是一个单独的应用, 会在appBase之后再进行部署, 所以如果两者path有重合, appBase下同名path直接被忽略.

所以总结来讲, 最简单的应该是这样(其中appBase也可以不要, 反正不要就默认webapps, 所以这种情况下那个目录无论如何都会部署) :

或者是这种(index.html必须放在根目录的ROOT文件夹中) :

  1. 很多网站提到了可以在conf/Catalina/domain_name 中添加xml文件里面放context, 比如对于我 :

文件名是xixi, 那么可以直接使用localhost/xixi进行访问的是, 与在server中不同之处在于, 在这里设置, context中的path无效, 这个path的效果由文件名代替了. 所以其实path 那一项到这里不写也可以. 这样部署也获得了一个好处, 就是如果要添加一个context, 只需要在这里多添加一个文件即可, 无需重启tomcat, 所以很方便. 据说tomcat是先扫描这个路径如果没找到合适的context才去server.xml中寻找context的. 另外如果要使用这种方式部署根目录项目, 文件名是ROOT.xml即可.

关于部署就这么多...

使用aws和tomcat搭建服务器过程中的一些坑.的更多相关文章

  1. VS2017 + EF + MySQL 我使用过程中遇到的坑

    原文:VS2017 + EF + MySQL 我使用过程中遇到的坑 写在前面: 第一次使用MySQL连接VS的时候本着最新版的应该就是最好的,在MySQL官网下载了最新版的MySQL没有并且安装完成之 ...

  2. 爬取CVPR 2018过程中遇到的坑

    爬取 CVPR 2018 过程中遇到的坑 使用语言及模块 语言: Python 3.6.6 模块: re requests lxml bs4 过程 一开始都挺顺利的,先获取到所有文章的链接再逐个爬取获 ...

  3. MySql数据库GROUP BY使用过程中的那些坑

    MySql数据库GROUP BY使用过程中的那些坑 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 特别注意: group by 有一个原则,就是 select 后面的所有 ...

  4. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

  5. CentOS7中Tomcat的安装和配置以及启动配置tomcat。启动过程中的易错点

    Tomcat运行需要设置JRE目录,全局变量配置,请参见: Linux下JDK的安装和配置   当然也可以直接修改Tomcat的配置文件,请自行度娘   1.下载并解压 请先去官网找到需要下载的tom ...

  6. 【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑

    目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB.由于网站会有文章发布,因此需要有评论功能.评论功能也可以自己开发,但由于现在社会化评论插件很多, ...

  7. 在ubuntu18.0下安装qt4.7以及qt-creator安装过程中遇到的坑

    最近的嵌入式Linux系统上要做课程设计= =要用贼老贼老的qt4.7,配环境踩坑都费了我1天时间.....所以记录下来,希望能给和我遇到相同问题的朋友一点帮助 apt-get install g++ ...

  8. 分享一下我在mysql5.6+mysql8数据库安装过程中的一些坑!

    Mysql5.6安装 下载好安装包后,在bin目录下用cmd打开,输入mysqld install [服务名]新建个服务 在windows+r输入services.msc即可查看服务 怎样使用mysq ...

  9. [.NET跨平台]Jeuxs独立版本的便利与过程中的一些坑

    本文环境与前言 之前写过一篇相关的文章:在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验 当时的部署还是比较繁琐的,而且需要联网下载各种东西..有兴趣的可以看看, ...

随机推荐

  1. iOS开发AFN使用二:AFN文件下载与文件上传

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  2. js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译)

    js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译) 一.总结 1. RegExp的属性和方法,就是RegE ...

  3. VS(Visual Studio)自动创建的文件格式

    .sln:solution,解决方案文件: .vsxproj:解决方案下的项目文件: .vssettings:环境设置文件, 菜单栏 ⇒ [工具]⇒ [导入和导出设置]⇒ 进行环境设置的导入和导出操作 ...

  4. Android中的动画详解系列【1】——逐帧动画

    逐帧动画其实很简单,下面我们来看一个例子: <?xml version="1.0" encoding="utf-8"?> <animation ...

  5. 【社交分享SDK】ShareSDK for Android 2.5.9已经公布

    ShareSDK for Android 2.5.9已经公布 版本号:V2.5.9  2015-3-19 1.升级Dropbox对API接口的调用.包含授权.获取用户信息,分享三个接口 2.升级Kak ...

  6. Android Thread.setDaemon设置说明

    Thread.setDaemon的用法,经过学习以后了解: 1. setDaemon需要在start方法调用之前使用 2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为 ...

  7. javascript中隐藏显示的样式表属性

    display属性 隐藏不占据位置 visibility属性 隐藏占据位置 //使用display的样式属性 隐藏 显示 //隐藏后不占据文档流位置 function showAddForm(){ v ...

  8. Oracle数据库零散知识09 -- DBLink的创建(转)

    通过创建database link实现Oracle跨数据库查询的方法 在Oracle本地数据库端执行赋权dbuser帐号 SQL> grant create database link to d ...

  9. js 时间日期函数

    忘记从哪里拷贝过来的了,侵删 Date.prototype.format = function (format) { var date = { "M+": this.getMont ...

  10. hadoop 3.x 单机集群配置/启动时的问题处理

    一.修改配置文件(hadoop目录/etc/hadoop/配置文件) 1.修改hadoop-env.sh,指定JAVA_HOME 修改完毕后 2.修改core-site.xml <configu ...