b7e91fb42797aa7453af7745cbd2004e23c65f46
art-get-arrays-jwt-springsecurity-angular
JSON Web Token (JWT) with Spring Security And Angular - Tutorial from Get Arrays (Udemy)
Notes
Section 19: HTML Template
134. Configuring routes
- Generate AppRoutingModule
ng generate module app-routing --flat --module=app
- Modify
app-routing.module.ts
Section 29: Security Management - Front End
199. Unsubscribe using Subsink library
- Install SubSink
npm install subsink --save
- Use it
Section 30: Deployment
202. Creating EC2 instance
Create EC2 instance with custom security rules
- open port 80, 5000, 443(ssh) for everyone
203. Configure EC2 instance
- Install apache web server
sudo service httpd start-> service not foundsudo yum -y install httpd-> OKsudo service httpd status-> running- Go to EC2 public URL -> Apache Server Default Page
- Test work
- Navigate to server content
cd /var/www/html
- create sample html file
sudo nano index.html<h1>Welcome to AWS Apache server</h1>- Ctrl+O
- Ctrl+X
- Go to EC2 public URL -> Our web page
- Navigate to server content
- Install Java
sudo amazon-linux-extras install java-openjdk11
- Install MySQL
sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmsudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmsudo yum localinstall mysql57-community-release-el7-11.noarch.rpmsudo yum install mysql-community-server
- Start MySQL
sudo systemctl start mysqld.servicesudo systemctl status mysqld.service- Check for temporarily root password
sudo grep 'temporary password' /var/log/mysqld.logA temporary password is generated for root@localhost: idy7c#>jEetF
sudo mysql_secure_installation- new password:
Supp0rtP0rta! - No for other questions
- new password:
- Configure mysql
sudo mysql -u root -p-> enter passwordshow databases;create database support_portal;create user 'support_portal_user'@'localhost' identified by 'Supp0rt_Porta!_P@ssword';grant all privileges on support_portal.* to 'support_portal_user'@'localhost';
206. Running in AWS
- Copy JAR file to EC2 home folder (secured copy)
scp -i "certified-dev-assoc-course.pem" "C:\Users\Admin\IdeaProjects\Study\GetArrays\art-get-arrays-jwt-springsecurity-angular\support-portal-backend\target\support-portal.jar" ec2-user@ec2-13-51-129-89.eu-north-1.compute.amazonaws.com:~/
- Set Environment Variables
export PORTAL_MAIL_USERNAME="{{your_gmail_username}}"export PORTAL_MAIL_PASSWORD="{{your_gmail_password}}"export SPRING_PROFILES_ACTIVE="aws-local"
- Start java app
java -jar support-portal.jar
- Run as executable
sudo chmod 755 support-portal.jarls -lh support-portal.jar-> view permissions./support-portal.jar
207. Deploying Angular Application
- Build Angular Application
ng build --prod
- Upload dist/support-portal-frontend folder to EC2
scp -r -i "certified-dev-assoc-course.pem" "C:\Users\Admin\IdeaProjects\Study\GetArrays\art-get-arrays-jwt-springsecurity-angular\support-portal-frontend\dist\*" ec2-user@ec2-13-51-129-89.eu-north-1.compute.amazonaws.com:~/
- Move files to httpd directory
sudo cp ~/support-portal-frontend/* /var/www/html
208. Creating Unix Service
- Create dedicated user to run this app as a service
- without ability to login
sudo adduser --home /var/lib/supporthome --shell /sbin/nologin supportusersudo cat /etc/passwrd
- Add access for the system processes to access home folder's content
cd /var/libls -lh-> only supportuser has accesssudo chmod 755 /var/lib/supporthome- owner has full access 7 (rwx) - read write execute
- others - 5 (r-x) - read and execute
- Copy jar into supportuser home
cd ~sudo cp support-portal.jar /var/lib/supporthome
- Change ownership of jar file
ls -lh-> owner is rootsudo chown supportuser:supportuser support-portal.jarls -lh-> owner is supportuser
- Change permission to read and execute only for supportuser
sudo chmod 500 support-portal.jar
- Protect the file from accident deletion
sudo chattr +i support-portal.jar- change attribute+i(add immutable)rm support-portal.jar->cannot remove ‘support-portal.jar’: Operation not permitted
sudo rm -f support-portal.jar->cannot remove ‘support-portal.jar’: Operation not permitted
- (for deletion we need first remove immutability -
sudo chattr -i support-portal.jar)
- Create symbolic link
sudo ln -s /var/lib/supporthome/support-portal.jar /etc/init.d/supportapiln- link-s- symbolic/etc/init.d- init directorysupportapi- name of service
cd /etc/init.dls-> we have supportapi
- Start service
sudo service supportapi startsudo service supportapi status
- View logs
cd /var/log->lscat /var/log/supportapi.log- or
sudo vim supportapi.log-> :qa for quit- or
sudo tail -f /var/log/supportapi.log
- Setting Permanent Global Environment Variables for All Users
-
sudo nano /etc/environment-SPRING_PROFILES_ACTIVE=aws-local
208.2 Creating Unix Service - Correct Way
- cd /etc/systemd/system
- Create a file named your-service.service and include the following:
[Unit]
Description=Support Portal API
[Service]
User=supportuser
WorkingDirectory=/var/lib/supporthome
ExecStart=/var/lib/supporthome/support-portal.jar
Restart=always
Environment="SPRING_PROFILES_ACTIVE=aws-local"
[Install]
WantedBy=multi-user.target
- Reload the service files to include the new service.
sudo systemctl daemon-reload
- Start your service
sudo systemctl start supportapi.service
- To check the status of your service
sudo systemctl status supportapi.service
- To enable your service on every reboot
sudo systemctl enable supportapi.service
209. Testing in Production
- Test with:
- Username:
art.shyshkin - Password:
17aH!?o>CJ - and another
- Username:
shyshkin.art - Password:
5C<"0dVx=>
- Username:
33 deploy frontend into s3 bucket
- S3 console
- Create bucket:
portal.shyshkin.net
- Create bucket:
- Build Angular app
- create
environment.test.ts - modify
angular.json ng build -c test
- create
- Copy files from
dist/support-portal-frontendto the bucket - Static website hosting
- Enable
- index.html
- Allow public access
Block public access (bucket settings)- All OFF
- Edit bucket policy
{"Version": "2012-10-17","Statement": [{"Sid": "PublicRead","Effect": "Allow","Principal": "*","Action": ["s3:GetObject","s3:GetObjectVersion"],"Resource": "arn:aws:s3:::portal.shyshkin.net/*"}]}
- Visit
http://portal.shyshkin.net.s3-website.eu-north-1.amazonaws.com - Make an Alias to Website
- Route 53 console
- Hosted zone: shyshkin.net
- Add record
- Name: portal
- Record Type: A
- Routing policy: Simple routing
- Alias: true
- Alias to S3 website endpoint
- Stockholm
- s3-website.eu-north-1.amazonaws.com
- Tune CORS for backend
- add
http://portal.shyshkin.net
- add
35.1 deploy MySQL into AWS RDS - with public access
- RDS Console
- MySQL 8.0.23
- Dev/Test
- DB instance identifier:
portal-db - Master username: portal_user
- Master password: Supp0rt_Porta!_PAssword
- DB Instance: db.t3.micro
- Public access: yes
- Additional configuration
- Initial database name: support_portal
- Create DB
- Create Security Group MySQLFromEverywheere
- allow port 3306 from everywhere (for testing purposes)
- Attach SG MySQLFromEverywheere to DB instance
35.2 deploy MySQL into AWS RDS - WITHOUT public access
- Detach SG MySQLFromEverywheere
- To access DB from EC2
support-portal- attach
defaultSG to EC2 (DB hasdefaultSG too)
- attach
- Delete SG MySQLFromEverywheere
- Run backend app with new profile (for testing)
java -jar -Dspring.profiles.active=aws-rds
- Change environment variable (for service)
sudo systemctl edit supportapi- Content:
[Service]Environment="SPRING_PROFILES_ACTIVE=aws-rds"
34.1 Create EC2 instance for Docker
- Create EC2 instance
- User Data:
#!/bin/bash
yum update -y
amazon-linux-extras install -y docker
service docker start
usermod -a -G docker ec2-user
chkconfig docker on
mkdir -p /etc/systemd/system/docker.service.d
echo "[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2375" > /etc/systemd/system/docker.service.d/options.conf
systemctl daemon-reload
systemctl restart docker
- Security group:
docker-security-group- Allow 8080 (tomcat), 2375 (from my PC), 22 (SSH)
- Allocate Elastic IP:
docker-elastic-ip - Associate
docker-elastic-ipwithdocker-ec2 - In Route 53 create record
dockerappwithdocker-ec2public IP
34.2 Allow Docker EC2 to Access RDS
- Create
mysql-vpc-security-group- Allow port 3306 from
docker-security-group
- Allow port 3306 from
- Attach SG to database in RDS
portal-db
34.3 Build and Run Docker image in Docker EC2
mvn clean package docker:build docker:start
Description
Languages
HTML
38.2%
Java
26.2%
TypeScript
20.7%
CSS
9.3%
SCSS
5.2%
Other
0.4%