|
22 | 22 | - Database design and Create, Read, Update in SQL
|
23 | 23 | - Rewrote the entire application to use [Flask SQL Alchemy](https://flask-sqlalchemy.palletsprojects.com/en/2.x/), an extension of [SQL Alchemy](https://www.sqlalchemy.org/)
|
24 | 24 | - Developed MVP of application with [SQLite](https://www.sqlite.org/index.html) locally and Deployed with [MySQL](https://www.mysql.com/)
|
25 |
| -- Using [Flask](https://flask.palletsprojects.com/en/1.1.x/) as a server-side framework |
| 25 | +- Using [Flask](https://flask.palletsprojects.com/en/1.1.x/) as a server-side micro-framework |
26 | 26 | - Python Class/Models and Schemas
|
27 | 27 | - [Jinja](https://jinja.palletsprojects.com/en/2.11.x/) templating
|
28 | 28 | - Password hashing using [Werkzeug](https://werkzeug.palletsprojects.com/en/1.0.x/)
|
| 29 | +- Caching user sessions with [Redis](https://redis.io/) and [Flask-sessions](https://flask-session.readthedocs.io/en/latest/) |
29 | 30 | - Parsing data from API with python
|
30 | 31 | - Parsing data from SQL queries with python
|
31 | 32 | - Calculations using data from API and database
|
32 |
| -- Continous integration and continuous deployment with [Travis CI](https://travis-ci.org/) |
33 |
| -- Hosting application on AWS with an [EC2](https://aws.amazon.com/ec2/) instance with an [Ubuntu](https://ubuntu.com/) operating system, [Gunicorn](https://gunicorn.org/) WSGI HTTP server, and [Nginx](https://www.nginx.com/) reverse proxy |
34 |
| -- Using [Ubuntu](https://ubuntu.com/) as operating system |
35 |
| -- [Gunicorn](https://gunicorn.org/) configuration |
36 |
| -- [Nginx](https://www.nginx.com/) configuration |
| 33 | +- Hosting application on AWS with an [EC2](https://aws.amazon.com/ec2/) instance with an [Ubuntu](https://ubuntu.com/) operating system, [Gunicorn](https://gunicorn.org/) WSGI HTTP server, and [Nginx](https://www.nginx.com/) front-end reverse proxy |
| 34 | +- Using [Ubuntu](https://ubuntu.com/) as an operating system |
| 35 | +- [Gunicorn](https://gunicorn.org/) configuration and error-logging |
| 36 | +- [Nginx](https://www.nginx.com/) configuration and server security/performance optimization |
37 | 37 | - Hosting MySQL database on AWS with a [RDS](https://aws.amazon.com/rds/) instance
|
38 |
| -- (Deprecated) Hosting application on AWS with an [Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) instance and MySQL database on AWS with a [RDS](https://aws.amazon.com/rds/) instance |
| 38 | +- Hosting Redis cache on AWS with an [Elasticache](https://aws.amazon.com/elasticache/) instance |
39 | 39 | - Using AWS Cloudfront as a Content Delivery Network (CDN) and connecting Google Domains custom domain to AWS CDN
|
40 | 40 | - Error logging with [Sentry](https://sentry.io/welcome/) for hosted application in production
|
| 41 | +- Continous integration and continuous deployment with [Travis CI](https://travis-ci.org/) and AWS CodeDeploy |
| 42 | +- (Deprecated) Hosting application on AWS with an [Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) instance and MySQL database on AWS with a [RDS](https://aws.amazon.com/rds/) instance |
41 | 43 |
|
42 | 44 | ## 🛠 Technologies
|
43 | 45 | |Graphic Design |Front-End |Back-End |Database |Deployment |Testing |
|
44 | 46 | | ------------- | ------------- | ------------- | ------------- | ------------- | --------------|
|
45 | 47 | |Inkscape |HTML5 |Python3 |MySQL |AWS EC2 |Pytest |
|
46 | 48 | |Freepik |CSS3 |Flask |SQL Alchemy |Ubuntu |Lighthouse |
|
47 | 49 | |. |Bootstrap 4 |Werkzeug |Flask SQL Alchemy|Gunicorn |. |
|
48 |
| -|. |Jinja |. |. |Nginx |. | |
| 50 | +|. |Jinja |. |Redis |Nginx |. | |
49 | 51 | |. |. |. |. |AWS RDS |. |
|
| 52 | +|. |. |. |. |AWS Elasticache|. | |
50 | 53 | |. |. |. |. |Sentry |. |
|
51 | 54 | |. |. |. |. |Travis CI |. |
|
| 55 | +|. |. |. |. |AWS CodeDeploy |. | |
52 | 56 |
|
53 | 57 | ## ⚖️ Methodology
|
54 | 58 | - Initially hosted application on AWS [Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) for a gradual introduction to AWS. Previously only used Heroku to host full-stack web applications, so I chose a similar IaaS offered by AWS. After numerous Elastic Beanstalk policy changes and disconnections, decided to go to the next level down in AWS, which is hosting this application on an EC2 instance. This offered a lot of experience and opportunities for learning about web servers.
|
55 | 59 | - Ubuntu as OS since it's the most popular operating system for web servers. Gunicorn as the WSGI since it's fast. Nginx as the reverse proxy since it was made with this optimization in mind.
|
| 60 | +- Initially stored user sessions in a tmp folder with [`mkdtemp`](https://docs.python.org/3/library/tempfile.html), however Nginx had trouble accessing it in production. Therefore refactored application to store user sessions in a Redis database and hosted the Redis database on AWS [Elasticache](https://aws.amazon.com/elasticache/). |
56 | 61 |
|
57 | 62 | ## ⚙️ Features
|
58 | 63 | - Login, sign-up
|
|
0 commit comments