CPSC559 Project
If you modify your nginx.conf file, you need to restart nginx for the changes to take effect start proxy server:
sudo nginx
stop proxy server:
sudo nginx -s stop
/usr/local/etc/nginx/nginx.conf
from backend folder run server 1:
npm run start-server-1
run server 2:
npm run start-server-2
run server 3:
npm run start-server-3
from frontend folder
start frontend:
npm run dev
try npm install if you get errors with npm
npm install
bypass proxy in local development: change .env.development to (point to server1):
VITE_SERVER_URL=http://localhost:4000/api
VITE_SOCKET_URL=http://localhost:4000/
In order to set up the project in AWS, we set up 5 servers on 3 machines (for now, can expand to 5 different machines).
Each machine is a different EC2 instance.
2 machines are two different proxy servers. They are using NGINX Plus, with High Availabilty. Essentially this delagates one main server and one backup server for the proxies. If the main server goes down, there is a script in the NGINX server (both of them) that re-associates the Elastic IP to the other proxy server (EC2 instance resource).
The main machine that handles our backend is another EC2 instance. It runs the same as the local development; each backend server is assigned a port that the proxies will redirect to. The front end willbe listening to connections at a certain port.
Start server:
sudo systemctl start keepalived
Stop server:
sudo systemctl stop keepalived && sudo systemctl stop nginx
Check status:
sudo systemctl status keepalived
Troubleshoot:
sudo nginx -t
- Install NGINX on the EC2 isntacnes. We followed this tutorial: https://docs.nginx.com/nginx/deployment-guides/amazon-web-services/high-availability-keepalived/#step-2--allocate-an-elastic-ip-address
- Start another EC2 instance to put this project in, we will call this the main EC2 isntance.
- Install NPM/Node on the main EC2 instance.
- Transfer the project files into the EC2 instance (can change this to a docker image in the future)
- Run
nvm install 16
after installing npm.
- Log into the main EC2 instance using ssh.
- make sure that your IP address is added to the security group
- Whenever you log into an ssh session in the main EC2 instance, you need to run the following command
nvm install 16
- Go into the
/backend/
folder and run the server commands from above:npm run start-server-X
whereX
is the server number - Go into the
/frontend/
folder and run the following command. It is slightly different as we need to expose the port to outside connections:npm run dev-expose
- SSH into both of the NGINX servers. Start/stop/check status accordingly, using the commands under NGINX.
- Should now be able to connect to http://18.189.193.57:5173/ to run the application.
There are a couple of issues encountered when setting up the project in AWS
- .pem key error
- in order for the ".pem" key file to work. will need to run "chmod 400 NGIN_Key.pem" to change the permissions
- nginx not changing?
- to change the nginx config file, you will need to head over to /etc/nginx/ and change either "/etc/nginx/nginx.conf" or "/etc/nginx/conf.d/default.conf"
- nginx just not working?
- troubleshoot using:
sudo nginx -t
. It will give you the most likely cause and you can go from there
- troubleshoot using:
- nginx was still not working --> connection refused error
- this was due to the aws scripts that was needed to switch the elastic ip association when the other ip was down
- the aws cli commands in the /usr/lib/keepalived/nginx-ha-notify" were not working
- need to install AWS CLI before running anything
sudo apt install awscli
- furthermore, there were bugs in the
nginx-ha-notify
script that was provided in the NGINX tutorial that was followed. Mainly needed to point to the right python path (python3
instead ofpython
) and including the correct python notation for the AWS cli commands. - The fix for this issue: running each AWS command in the script on its own, to make sure that the correct variables were being extracted by the script (and in turn, the correct instance ids of the other server were being serverd correctly, allowing for the AWS account to switch the elastic IP.)
- nginx, aws cli commands are still not working
- this is most likely a AWS credential issue. Either attatch a correct IAM role to the EC2 instance or have the correct access key and credentials key in the
nginx-ha-notif
script file - My fix was to generate a new acccess key and update the credentials by running "aws configure"
- this is most likely a AWS credential issue. Either attatch a correct IAM role to the EC2 instance or have the correct access key and credentials key in the
- After switching, you will get kicked out of the EC2 instance as a new static ip is being provisioned. SSH issue when trying to ssh back in
- old key issue in the ssh-keygen
- need to remove the key stuff
ssh-keygen -R hostname
wherehostname = ec2-123-456-78-910.us-east-2.compute.amazonaws.com
in this case