在国外没啥事做, 考前也不愿意复习, 看到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. 创建ListView的基本步骤 分类: H1_ANDROID 2013-10-31 23:25 1276人阅读 评论(0) 收藏

    参考<疯狂android讲义>第2.5节P94 1.创建一个或者多个ListView <LinearLayout xmlns:android="http://schemas ...

  2. Java Queue的使用

    Queue的成员函数        add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常       rem ...

  3. css3背景透明文字不透明

    在 FF/Chrome 等较新的浏览器中可以使用css属性background-color的rgba轻松实现背景透明,而文字保持不透明.而IE6/7/8浏览器不支持rgba,只有使用IE的专属滤镜fi ...

  4. AE指定字段转成注记

    转自原文 ae指定字段转成注记 ArcMap中有一个功能是Label Features,就是可以将图层内指定字段值显示以Label形式显示在主窗口上,在Label Features后,用右键点击图层, ...

  5. ios app初始化和数据迁移的设计思路

    整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...

  6. Android5.0网络之ipv6

    移动设备的大量兴起势必进一步加强ip地址不足的危机. ipv6或许成为一种比較好的选择方案. ipv6地址的获取分为两种方式:无状态:有状态 无状态:通过接收路由公告(RA)来设置自己的ipv6地址 ...

  7. gcc新版本号引起的编译错误(命令运行时的外部库输入位置)

    昨天,遇到一个比較bug的错误,用gcc来编译几个简单的文件出错,编译环境为x86_64的Ubuntu12.04.gcc版本号号例如以下: gcc (Ubuntu/Linaro 4.6.3-1ubun ...

  8. Using Eredis, Redis With Erlang

    http://no-fucking-idea.com/blog/2012/03/23/using-eredis-in-erlang/ Using Eredis, Redis With Erlang M ...

  9. const常量用extern声明定义的问题(extern变量不能在使用类里初始化)

    test.h #ifndef TEST_H_ #define TEST_H //常量声明和定义采取这种方法即可 const int a = 20;  //不报错,因为const变量链接属性默认是内部链 ...

  10. scala 伴生对象与伴生类

    package cn.scala_base.oop.scalaobject import java.security.cert.Extension /** * object的构造器必须是无参的,且且构 ...