Katie
Posted on October 1, 2020
I’d like to get involved in a project at work that involves taking a tool comprised of a lot of databases and web servers (running Java in Apache Tomcat) and putting them into “the cloud” using best-practice architectures for installation, upgrade, maintenance, patching, backup, & recovery considerations.
After reading this helpful background about Tomcat by Secure Any Cloud, I think I’ve just come up with my first “hello world” homework assignment.
The plan
- Rent a machine from a cloud service with which I have some free credits.
- Always use Terraform to control working with the cloud service; avoid cloud-service-specific tools & GUIs as much as possible.
- Install & run Linux, Java, & Tomcat hosting Apache’s
sample.war
file on a non-8080 port.- Always use Git & continuous integration/deployment tools (Ansible? Jenkins?) & container images (Kubernetes? Docker?) rather than SSHing / SFTPing into the rented machine’s CLI or clicking around in GUI configuration panels when possible.
- Make sure
sample
has a public IP address – maybe even a public domain name to be snazzy.- Continue to pay attention to tooling & automation / infrastructure-as-code.
- Visit
http://...:xxxx/sample/
from my home computer to confirm it’s alive and on the web. - Kill the server & deallocate any IP / domain names gracefully.
- Always use Terraform to control working with the cloud service; avoid cloud-service-specific tools & GUIs as much as possible.
The accomplishment
According to one of my colleagues, the jargon I can say I’m studying is:
- Provisioning a server in the cloud
- Deploying an application to that server
It’s nice to have goals & a plan.
Misc
Some notes I took from Secure Any Cloud’s article that led to me making this plan:
- A lot of what a 3rd-party vendor will be providing my workplace is WAR files for services running Apache Tomcat.
- Tomcat’s been around since 1998.
- Tomcat operates only on the HTTP protocol.
- Tomcat processes (provides a runtime environment for the Java code within) Java servlets, encapsulating code & business logic to define how requests & responses should be handled by a server.
- “Servlet” is an API from the Java Platform Enterprise Engine designed to work with web servers.
- Monitoring a server for incoming client requests is the web server’s job, not hte servlet’s.
- “web.xml” maps servlet classes to incoming cloient requests.
- Servlets are responsible for providing responses back to Tomcat as JSP pages.
- Tomcat processes JSP pages.
- Java is a server-side view rendering technology (Salesforce Visualforce Pages are based off of it, I believe).
- Tomcat returns responses back to a client by rendering the JSP pages that servlets hand off to it.
- As a developer, our 3rd-party vendor would’ve written the servlets or JSP’s and let Tomcat handle routing.
- Tomcat provides a port 8080 connector (Coyote engine?) for serving stuff over HTTP; can’t tell if that’s related to all this.
- On Windows, you’d install a JDK and then GUI-install Tomcat, pointing it at your JRE & detailing some things like port 8080 for HTTP during install.
- It would likely install to
C:\Tomcat8
, which is where you’d likely think ofCATALINA_HOME
andCATALINA_BASE
referring to in documentation.
- It would likely install to
- Look in
server.xml
to be sure what the “application base directory” (e.g.CATALINA_HOME/webapps
) is – likelyC:\Tomcat8\webapps
.- That’s wher you’ll drop
.war
files (with the server stopped).
- That’s wher you’ll drop
- There’s a file in
CATALINA_BASE/conf/
(on Windows, likelyC:\Tomcat8\conf</code>)
calledtomcat-users.xml
that it seems you can add data to to make web sites present an authentication wall (again, edit with the server stopped). - As with most web servers, the typical way to see if they’re reunning well is to visit
http://localhost:XXXX/whatever/
in a web browser from the same box.
All this sounds like I’ve had to manage the installion/upgrade/configuration of:
- An operating system
- Java
- Apache Tomcat
(Some sort of driver for talking to a database, like JDBC, would probably be #4 in a more real-world-like setup. More to explore later.)
Infrastructure as code / containerization with Docker/Kubernetes can help. Or so I’d think.
Note: per some GitHub repos I was looking at, containers can be configured themselves to be direct-connected to or to be behind a load balancer. More to explore for another day.
Posted on October 1, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 24, 2024