How to use Firebase to host your Web Application using a custom domain
WRITTEN BY GARETH DUNNE @DUNNEDEV
In comparison to a few years ago, there are a wide variety of ways to deploy a web application. Many will vouch for Heroku for prototyping and I tend to agree. Its a great service to deploy an app free of charge with the option to pay for premium features to scale up.
Another great option would be Github Pages which allows you to host a website or web application by deploying one of your repositories. It gives you a url to view your repository such as :
https://username.github.io.
Again, this is another great option for getting you application live.
The best option that I have been using at the moment is Firebase hosting. Its similar to the other options but allows you to stack extra services on top such as cloud functions. Heroku, of course, also lets you run similar server side functions and its backend and is a lot more flexible.
And although I might come back to compare all these providers the main thing to take away from these services for the purposes of this post, is that Firebase automatically provides SSL encryption. This makes it very easy to link it to a custom domain purchase from domain name sites. In my case, it was NameSilo, who I find dirt cheap without the shadiness of other low cost domain providers. Its reliable with a great albeit uninspired interface.
This is all taken from an experience I had when deploying my random beer finder web application.
This is an application that uses some nice animations from a frontend Coursetro tutorial in combination with RxJS Observables and requests to BreweryDB API.
Be sure to check it out here.
So lets deploy our web application and apply our custom purchased domain.
Setup Firebase
Full instructions from the Firebase documentation are listed here, however I’m just going to cover installing it via NPM.
Run the following command in your console window to install firebase tools globally:
npm i -g firebase-tools
Now, in the directory of your desired project, you now want to initiate hosting for Firebase:
firebase init hosting
From here you can dictate how you want you Firebase application to be configured.
Say yes to public directory and configuring as a single page app:
You should then create your project in the Firebase console here.
You project has now been initialized with Firebase. Once you are ready to deploy move onto this next section.
Deploying
When ready to deploy your Angular application to Firebase we want to build a production version of it.
Run the command:
ng build --prod
You application will be built and the output is usually in the dist
folder. You can now do a full firebase deploy with the command:
firebase deploy
Or if you just want to deploy the hosting services
firebase deploy --hosting
When finished your console will indicate what url your deployed application is being hosted.
In my case it was something along the lines of :
https://random-beer.firebaseapp.com
Custom Domain
So the final step in this process is to verify your purchased domain to Firebase. Firebase will also take in any other subdomains you might have and redirect it to your deployed Firebase app url.
We will need to navigate to the Firebase hosting console.
You will have to change the DNS records in order to indicate to Google that you own the domain name. We want to create a TXT record in our domain backend. This is made relatively simple in NameSilo and most other domain hosting interfaces will be quite similar.
Log in and navigate to the domain manager:
Select your desired domain and click the DNS Records option.
From here we want to add two TXT record with details from our Firebase console.
After about an hour Google was able to recognize these new records and establish that I was the owner of the domain. Google will then ask you add two A records with custom IP addresses that they will give you. From here we will do the exact same thing on your domain provider except adding two A records instead using the details from our Firebase console.
SEO
As you may be aware, a typically bundled and deployed JavaScript web app using a modern web frontend framework is not crawlable or index able by most search engine bots. To solve, it can be a complicated beast, especially for Angular applications.
The most common approach in order to make your Angular app SEO friendly is to allow your server to generate your HTML markup dynamically. In some cases, this can be easier said than done and was mostly done with Angular Universal.
However, I found it needlessly cumbersome and I think I have found a great alternative specifically for Firebase hosted applications. The folks at Angular Firebase have come up with a fantastic tutorial for this using Rendertron. An external service that allows your site to serve dynamic SEO friendly markup only to search bots while serving your users the standard JavaScript version.
I really think this is the future of SEO for web application so I highly reccomend you watch this video.
Conclusion
Its proven relatively pain free process to transfer a domain name over to our hosted web application. This seamless process is one of the reasons I’m looking at Firebase Hosting more longer term. Apart from just hosting, there are many other added features such as cloud functions which are particulary useful for deploying server side code alongside your application. I hope to cover that soon.