Build a Forum App, from Code to Deploy
Tags: webdev
Published: 2020-05-23 19:11:20


Hi there! I recently graduated from the coding bootcamp Flatiron School. Flatiron’s excellent curriculum taught the skills required to build full stack applications from start to finish. We learned everything from SQL to React.

One thing that we did not learn, though, is how to deploy the apps we build. So, if you’re a recent bootcamp grad like me, you might be wondering how to get your newly created app hosted. Or maybe you just want to know how to set up a production environment and deploy your apps to it. 

Either way, I hope to help you out with this series of posts sharing my knowledge of deployment technologies.

I hope to guide readers through building a generic forum app from code all the way to deploying it on Amazon’s cloud. I want to cover everything from an intro to GraphQL to continuous integration to an overview of some of Amazon’s Web Services.
# The Stack
Here are some of the details of the stack I plan to use. 
## Backend
- [PostgreSQL][postgres] database
- [Ruby on Rails][rails]
- [GraphQL][graphql] (to save time on the frontend and backend)

## Frontend
- [Node][node]
- [React][react] (using Create React App)
- [Redux][redux] (maybe React Hooks instead)
- [Bulma][bulma] via [rbx][rbx] (I’m definitely not the world’s best frontend developer, and I’ve found that Bulma is easy to use and customize)

## Testing and Continuous Integration
- [Minitest][minitest] for the backend
- [Jest][jest] for the frontend
- [Travis CI][travis] for continuous integration

## Deployment
- [Docker][docker]
- Various [Amazon Web Services][aws] (probably EC2, but maybe Elastic Beanstalk, AWS Amplify or Fargate if EC2 proves too difficult to work with).

## Development environment
I will be using Ubuntu 20.04 as my development environment, however everything should work pretty well on a Mac. Unfortunately, Ruby on Rails and Docker only seem to have partial Windows support, so Windows users will have to use the Ubuntu distro for Windows Subsystem for Linux.

I’ll be using Visual Studio Code as my editor.

# Road map
Here's a brief overview of what I hope to cover in this series:

1. Backend
  a. Domain modeling and generating models
  b. Writing tests for our models and integrating with Travis CI
  c. GraphQL intro, writing types and mutations for our models

2. Frontend
  a. Wireframing and component hierarchy
  b. Writing tests and Building basic components
  c. Adding GraphQL queries
  d. Tying it all together

3. Deploy
  a. Making Docker containers for the front and backends
  b. Configuring Amazon services

Maybe if I’m feeling adventurous, I’ll cover these topics:
- [Kubernetes][kubernetes]
- Domain name registration and configuration
- HTTPS with [Let’s Encrypt][letsencrypt]


This is going to be a learning experience as much for me as it will be for readers. The things I want to cover in the series are things that I have learned just by experimenting in my free time, so if you are more experienced with them than I am and see a mistake or an area which could be improved, I would welcome any suggestions you have.

I hope to post a new installment in the series every week, but I cannot guarantee that I will be able to. I hope that this series is instructive and helpful to any new web developers out there.

[postgres]: https://www.postgresql.org/
[rails]: https://rubyonrails.org/
[graphql]: https://graphql.org/
[node]: https://nodejs.org/
[react]: https://reactjs.org/
[minitest]: https://github.com/seattlerb/minitest
[jest]: https://jestjs.io/
[travis]: https://travis-ci.org/
[docker]: https://www.docker.com/
[aws]: https://aws.amazon.com/
[kubernetes]: https://kubernetes.io/
[redux]: https://redux.js.org/
[bulma]: https://bulma.io/
[rbx]: https://github.com/dfee/rbx
[letsencrypt]: https://letsencrypt.org/