Project setup!

ssh onto the server. The deployment scripts are available on the path (/var/local/deployScripts)

The Ubuntu server serves both the front-end and the back-end application.

Nginx deploys the frontend.

Apache serves the backend.

Nginx proxies (ignores ) any requests to “/api/” to the backend. Both the server software are listening on different ports.

Apache is the web server software used to host the java (.war) file that is generated.

CircleCi is running on the main master branches any changes to this branch forces the tests to be run. If the tests pass then the project is automatically deployed to a linux server. Which has apache and nginx software installed.

Tools used:

  1. Gradle


The manual approach is to log into the server. Then go to the web directories of where the server software is hosting. Then you need to clone the project. generate a war file and launch the project.



Software consultation

Lessons learnt

→ Tee told the Managers listen I want to do 100% of the code so that you can focus on the Manager tasks. At first Tee could not contribute straight away to the .NET project since it was his first time working on the project. He accepts that he knows programming, however he needs times. Sometime the lead developer had to take on the responsibility to doing some of the tasks.

→ Don’t worry too much about adding value on day one. Because then you are very tense, easy to get knocked out. Before a fight you want to be relaxed. You hired me that is your value.

→ Tee mentioned that for a lot of programmers the “Developer culture” is focused around, I know something you don’t. I am going to make you shit about it.

→ Tee mentioned that it is about human nature. There is not much you can do about it, know the game and play the game.

→ Be a little confident and cocky.

→ Tee said doesn’t want to buy and asset (car) if it is going to sit there are not garner him money.

→ Outside of work Tee occupies his time with personal pursuits. Self-development. Listen to videos of motivational people. AI, conspiracy.

→ Did not understand .Net framework, however he asked whether he had to understand the code in order to be productive.

→ Tee also said, don’t undermine your managers.

→ Tee said that 90% of developers learn better by pair programming instead of getting them to read documentation. “May be a situation whereby you have to implement some code, however the guy in charge may say don’t change that method because it will break another piece of code that was written five years ago”

→ You have to act as if your life is sorted out, even if it is not. Act as if you are some rich kid and your parents have just brought you a new home.

→ Listen to Developer Tea podcast, on the way to work so that you have something to say in the morning.

→ Tee told me to acknowledge who is your boss, because they pay your salary. Then run everything through that person.

→ Tee said I am trying to come up with the arguments of plugging head phones in. Fine you can use slack, however you can keep that away from me.

→ Be professional, earn respect rather than being liked.

→ Tee said if your in my team, then you can’t wear headphones during the 9 to 5. You have to ask smart questions. You can wear headphones when you get home, after 5 o’clock. When you wear headphones you are just chilling.

→ Tee told me to ignore the bad developer. Treat him the same regardless of how he is treating you. Never know he might come back to you asking for help. Try and stay away from him.

→ A ticket, is the same as a feature.

→ Pair programming. In pair programming, a more experienced developer is teamed up with a less experienced developer. On a particular ticket. The job of the more experienced developer is to improve the skills of the apprentice. The other alternative is to read documentation which works for 10% of people.

→ Tea is focusing on his Niche. Tea said that there is no quit in him. If you hire me then the project will be complete.

→ Tea mentioned that in a corporation there is a process of doing things so you can’t just do what ever you want like in a start-up company.

→ Tea mentioned that you are a good looking guy so sharpen-up.

→ WIP (Work In Progress). WIP Limit, Limit it to 5 tickets. That way when a team finishes on a task then you can help push through the remaining tickets on the WIP.

→ The Agile methodology is about working in teams.

→ Todo | In Progress | Test | Done

→ When you are proposing a new technology you must weigh up the advantages and disadvantages of the using a particular technology.

→ Tea ultimately wants to start a business. He is currently, getting paid for the skills that he brings.

→ Tee also mentioned that you can say we may not be productive for the first two weeks while we implement this workflow. However, afterwards you will see the benefits in the long-term.

→ Teams and moving from Jenkins to CircleCi for build automation.

→ You make the managers look good and they bring you up in return.

nginx configuration

This is the Nginx configuration that allows requests to be proxied through nginx to the apache web server.

upstream api_node_js {

server {
listen 80;

root /var/www/FEBookingAndCollections/build;
listen [::]:80 default_server;

index index.html index.htm;

location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

rewrite ^/api/?(.*) /$1 break;

proxy_pass http://api_node_js;
proxy_redirect off;

What is docker?

Docker is a program what allows you to set up the: operating system, the programs on a virtual machine.

When working in my previous role, sometimes we depended on other packages. However, before we imported the packages we had to make sure that the packages were in fact being updated. There is no point in using an outdated library.

Agile Methodology

This is my personal guide on how to implement Agile methodology into a company.

Firstly, the workflow needs to be set-up. There are tools that can be used in order to establish the workflow.

Trello and Github integration


Trello is used to represent the state of our Github repositories. One Github repo = One Trello Board. Always use Trello as the immediate go to when wanting to know what to do.

We use lists to divide our Trello board into sections. Each section represents the state of our tasks. The sections are divided as follows: General Backlog, Backlog, In Progress, For Revision and Done.

Each task that we have to complete in our application can be represented as a card.


At the start of each sprint we take tasks from the general backlog and put them into the weekly backlog. Once we define the tasks in the weekly backlog, they do not change for that week. Each team member assigns themselve to a card. When a user assigns themselve to a card then a branch in Github must also be made. The branch name must resonate with the card, ie same name.

In Progress

When a team member is working on a task then it must be in the “In Progress” list. A team member is allowed to attach a git branch and a pull request to the card. A pull request does not mean to merge the work into the master branch. A pull request is often attached, so that tests are CircleCI can start to run. A branch should only be merged when it’s corressponding card is in the “For Revision” list. While you are working on your task attach, all the resources that were used to complete the complete your assignment (Links to videos, online tutorials etc). This will help when you want to remember how you did a certain task.


For Revision

When a team member has completed a task then the card must be moved from “In Progress” to “For Revision”. The card must have the branch and a pull request attachment on it as well, for direct access. A fellow Reviewer can decide to pass your work or ask for a review depending on whether s/he thinks that there could be more improvements. Pull requests are how other people are able to contribute to your work.


The team member who reviewed the card is responsible for moving the card from “For Revision” to “Done”.


So far we have discussed just Trello and Github. Trello is used to represent the state of our application. It represents the truth, of our application it’s current state.


However, we can throw Slack into the mix. Slack is used to communicate with those in your team. Slack can also be used notify developers about the state of the Trello card. With slack you can sign on into your Slack workplace.

CircleCi (Continuous Integration and Continuous Deployment)

When you push code to Github, you can use the CircleCI tool to ensure that the code you push to Github repository, passes all of the tests and is hence production ready. When the tests pass on CircleCI then you can tell CircleCI to run a deploy script on your server which will checkout out the code from the Github repository and will automatically deploy your code onto the Server.


You can use a Ubuntu Server to serve your users on the WWW. You can set up your servers remotely or in-house. Using cloud based companies such as Digital Ocean can improve proficiency. Once you have acquired a Server. Then you can install the relevant web hosting software, Tomcat and Nginx to host your application.

Having difficulty running a deploy script ssh on the Server.

You can ssh into a Server without a password by turning off the password authentication on the config file.

1) Nano into etc/ssh/config file local terminal, actually this might be in the Computer’s command line. Because you can login a ubuntu server hosted on Digital Ocean from the Website. The website gives you access to the Ubuntu machine.

2) Inside the /etc/ssh/config file turn the password authentication off

3) Then write ssh-copy-id root@ into your local client terminal. This copies the ssh key to the server. We can do this because we set the password to be off.

4) Inside the /etc/ssh/config file turn the password authentication back on.

How to deploy a React.js application

Create an app with create-react-app.

Get an account with Digital Ocean.

SSH into the Droplet.

  • ssh root@your-ipaddress
  • Then install nginx: 1) apt-get update 2) apt-get install -y nginx

Once nginx is installed:

  • Remove symlink to default config
  • rm /etc/nginx/sites-enabled/default

Then with Vim

  • vim /etc/nginx/sites-available/nameofyourapp

paste this contents into “nameofyourappp”

server {
root /var/www/;
listen 80;
location / {

Create a Symllink

  • ln -s /etc/nginx/sites-available/nameofyourapp /etc/nginx/sites-enabled/nameofyourapp

Reload nginx

  • nginx -s reload