02 Building Training Environment

In order to do any meaningful work with computers, it's important to have a well established production environment as well as a well established test environment.

Any computer system is prone to human error, whether it be from the manufacturer or hopefully from you. Having a consistent test environment will help practice what you learn before the code, system, configuration, application makes it into production.

Here are some of the things that we will need to have in place in the test environment before we can implement the production equivalent.

There are stopping points marked through out the sessions which indicate when a specific item has been achieved.

Application and developmental concepts include:

  • Development environment. Some place where we can edit and run different types of code. I chose Eclipse IDE and implemented different plugins to extend the functionality.
  • Local web browser. I chose Chrome, but any browser will work.
  • Local web server. I chose Apache but any web server will work, such as nginx, or IIS. It must support the language you want to implement. For example, these instructions will touch on HTML (with CSS), PHP, Node.js, and Java server pages.
  • PHP interpreter. Requests from the HTTP server will be passed to the PHP interpreter for processing. The PHP interpreter will collect the information and pass it back to HTML web server for rendering.
  • Java server page host. I chose Tomcat to render Java server pages and process Java server side requests.
  • JavaScript host. Many websites use JavaScript to enhance the user's experience. I chose to use Node.js so that I could program also program server side JavaScript requests.
  • SQL database. It is useful to not only know SQL but also how to access it from different sources. I chose MariaDB (MySQL) because it's well supported. There are also
  • connectors so that different languages can query and extract useful information.
  • Source Code Repositories. This provides the ability to store, compare, and roll back code and settings. GIT and SVN are two methods.
  • Tools for automated testing and deployment. I chose Jenkins for automated deployment and testing. Once the coding and installations for the different applications are done manually, an automated tool will greatly speed up the process once the basics are understood.
  • Network File server. File servers for network storage is a great way to add and learn about shared folders, user permissions, and access.
  • Virtual Host Server. I chose VirtualBox to host servers. There is a lot of satisfaction to getting the different components running at the same time. Unfortunately, they are all running locally and under the same user credentials and user environment. I figured it would be a good idea to split each of these functions into
  • different servers running independently of one another. The trick here is to synchronize multiple servers to do the same as having everything running together.
  • Physical servers. Build actual servers with independent hardware connected through network cables and switches. Learn how to export the data and configurations from the virtual servers into the physical servers without loss of functionality.
  • Operating systems. Both Windows and Linux will be the operating systems used. My preference is to use Linux for everything, but not everybody is ready to make that change. The individual will choose which operating system to use locally for development, and which operating system to use on the servers. I choose to use Windows and Linux interchangeably for the desktop environments and Linux for the servers.
  • Automated Scripts. Operating systems require
  • maintenance. Writing scripts to regularly to tasks, such as perform nightly backups, will be invaluable if a system fails. I will be using shell scripts (*.sh) on Linux systems and batch (*.bat) on Windows systems.
  • Monitor System. With the different systems operating at the same time, a high-level dashboard will be a great way to see the overall system performance for each system as well as between systems.

Individual servers include:

  • HTTP. This server will host static pages, CSS, and PHP files
  • MariaDB. This server will store and maintain databases
  • Tomcat. This server will host Java Server Pages
  • Node.js. This server will host JavaScript Pages
  • File storage. This server will provide unified file network storage and backup
  • Monitoring and Logging. This server will monitor and gather statistics from other servers
  • Code Repository. This server will provide source code control with GIT and SVN
  • Jenkins. This server will assist with automated deployments
  • LDAP and Active Directory. This server will provide cross-system security and central user management

Kick it up a notch

To make things more complicated, I also suggest using these servers within Docker containers.