Welcome to another working
with data and APIs video. I have one more thing
to demonstrate to you. I mean, the truth
of the matter is there's probably hundred
thousands, tens of thousands, millions of things that I've
missed that I should cover that I could get to that
I don't even know about that I will hear from you. And so I look forward to hearing
all about in the comments and hopefully
returning and making more videos that continue these
projects and this discussion. But before I go, at
least in this first round of what I'm making right now,
I'm gonna show you one thing. How to deploy your
project to a server. Put it out in the world so that
people could access and use it. There's an inherent problem
with me even making this video, because there's no
one way to do this. I mean, you could
build your own server, get your own internet
connection, get an IP address, create your own web
server on a Raspberry Pi even, put it somewhere out
in the forest wirelessly. Who knows? Attach it to a space station. But what I want to
look for here at least, I want to look at
least two scenarios of using a commercial
hosting service that allows you to deploy your node
code and have it run somewhere. And we'll give you a URL
so that you can actually see it in the browser. And the two services I want to
show you are Glitch and Heroku. Glitch, as it says
on their website, is the friendly
community where you'll find the app of your dreams. I love Glitch. It's an amazing code
editor in the browser that you can write node
code, client JavaScript. You can build all sorts of apps. You can share them. You can remix them. It's colorful. It's friendly. You can ask for help. There's so much there in Glitch. And honestly, I could imagine
a version of these tutorials where I just started
with the first day opening up Glitch and
building the project there. But since I've already
built the project, I'm going to show you how to
import it right into glitch and run it there. After that, I'm
going to show you another service called Heroku. It's a cloud platform that lets
you deploy web applications. It has a pretty reasonable
free tier that I can get up and running with easily. This is not sponsored content. There are lots of other
servers that I've used. Amazon Web Services,
DigitalOcean are just a couple to name a few. And I'm happy to come back and
show some other ones in a video as well if that might
be something useful. Or leave in the comments
what type of cloud server you like to deploy
your applications on. There's also this thing
called serverless programming. We'll come back to
that another time. Let's start off
here with Glitch. So here I am logged
into my Glitch account. My Glitch account is actually
linked to my GitHub account, although you don't
need to GitHub account to sign up and start
working with Glitch. I could make a new project,
and I could actually make a blank project. Hello express. This would have been
a good place for me to start when I was back in the
day I didn't have anything yet and I could just make a
new simple express app and build on top of that. But I'm going to do something
a little bit different. I'm going to use this
clone from Git Repo. Since I've already gone
through all the motions of writing my code
locally on the computer and then pushing it to
GitHub, I could just grab it and put it here. But before I do that, I
better make one more change. There's something that I
missed that's rather important. So in my code, I have hard
coded in here the port 3000. That's the port that
I've arbitrarily choosing to run and test the
stuff locally on this computer. But any type of web
hosting platform is probably going to generate
a port automatically. And there are some standard
ports for hosting up a website. So I actually want to pull that
from the environment variable. And this will be maybe
an environment variable that I don't actually
set but that already comes with the platform. So not necessarily something
that I put in here, but something that's just
going to be present whenever I'm on that platform itself. So let me go back
to the code, and let me add a const port equals
process dot env dot port. Now here's the thing. Now when I run this-- and I'm
going to put this port here, and I'm going to just change
the string to starting server at and then I'm just
going to say port. So this is some changes
I made to the code. OK, so here's the thing. This now, if I go and
try to run this locally. Boom. It doesn't have a port number. Or do I actually
have another error? Oh, that's a different error. I've got some syntax error. Let me fix that. Always getting syntax errors. Oh, I don't know. I lost my curly brackets. I'm not sure what I did here. There we go. Yes. Listen at that port and
start the ser-- then I log, starting the
server at that port. Sorry about that. Let's try that again. Starting server at undefined. So I don't even know how would
I possibly-- there's no port. I can't access the server. So this is where I
could do something nice. I could say, if there is
no port in an environment variable or 3000. So now if I run the server
again, it's starting at 3000. I can go back and look at
the project running locally at port 3000. And here it is. OK. But I needed to do
this, because I want now want Glitch to take
care of the port for me. I don't want to be
in charge of that. Now, since I'm going to be
getting the code from GitHub onto Glitch, I need to make
sure I take that change that I just made locally
and push it onto GitHub. So I'm going to add and
I'm gonna commit port from environment variable. And then I'm gonna say Git
push origin master, which sends it up to GitHub itself. This is getting a
little bit confusing, so let's make a quick diagram
just to understand the pieces. So I've got my laptop here. And so I've been writing
all the code here, the server and the client. Now what I've done is I have
now taken all that code, and I have put it onto GitHub. And these are now linked. I can always push, which
is sending code this way, or I can pull, which is
sending code this way. So this is really the
thing that I've set up. But I want to add a
third component here. So that third component, I'm
going to add Glitch as one. I'm also going to
show you, I'm also eventually going to add Heroku. Now, the difference
with Glitch and Heroku is this is actually
a code editor. So once I get the
code from GitHub and place it onto
Glitch, this is kind of a connection that
doesn't need to persist. And I can just--
it's just there. I can work on it. I just want a quick way of
getting this stuff on Glitch. I could have uploaded
my files or copy paste or been working there all along. But something
different will happen once I put it on
Heroku, which I will keep all of these things sort
of linked so I can continue to do the development
here on my laptop and push those changes through. So let's come back to Glitch
and let's look at-- click on this button Clone
From a Git Repo. And then I'm going to
go over to my repo. I'm gonna copy the URL. And I'm going to--
whoop, I'm going to press that button
again, and I'm going to go over
here and paste it in. So I am grabbing all
the code from coding train slash the weather here. And I'm gonna hit OK, and I'm
gonna wait for a little bit. And look at that. Look at this. Everything is there. Public check ins, public logs,
public index, public sketch, public style, Git ignore,
index, package, ooh, environment sample. Aha. So remember, I need my API key. So before I even try to run
this, what I'm going to do now is I'm going to hit Rename. And I'm gonna change
this to just dot env. So now you can see
it's got a key there. Glitch knows. Glitch really knows that dot
env files are secret files. So if someone chooses
to remix this project or based on it, if
I'm sharing this, no one will be able to
see the API key in there. I'm going to go and I'm
going to go back to my code where I have my dot env
file, grab this API key, paste it in here,
hit Save and then I'm going to click
on this Show button. And so now I can choose to show
in a new window or right next the code. Let's just look at it
right next the code. There it is. There's my project. Now let's click on Show
and go in a new window and look at this. If you go to coding dash
the dash weather dash here dot glitch dot me,
you have the project. And I can go back here
and I can start saying, hey, let's go to
Berlin and check in, and let's go to London
and check in, and let's go to San Francisco and check in. Let's view check ins. And all of those
check ins are here. And in fact, I
don't know what this is going to look like
now when you go to it. I assume I'm going to leave
this here as is and lots of other people
will have gone there and added their check ins. So we can see all
of that, and you'll see that if you go to
that URL right now. And to be clear, remember,
this is a code editor. So I can start changing stuff. I can go to this
index and HTML page and I can say the
weather is here. And you can see that
immediately updated. I could change
something in the server. I don't know. I'm afraid to change
things in the server. But I could start working
on the server code. It's all very, very small here. I could change that. And stuff would change that
the server would rerun itself automatically. So again, I would love to come
back and revisit more videos about how Glitch works itself. Now that this
project is there, I would encourage you
to go to the URL, it'll be in the
video's description, and click Remix Project. You don't even have to
do any of this stuff, because once I have
it deployed on Glitch, other people can get
the code and make their own version of it. So I'll include
this as an example that you can start with. And I probably
shouldn't mention that. I should have
mentioned that earlier. Oh well. Let's try one more
deployment, just so we can see how another system works. So now I'm going to show Heroku. Heroku has its own CLI, which
stands for a Command Line Interface. So you can actually do things
and deploy projects just from your terminal
application itself. So you're going to need to
first install the Heroku CLI. I've done that already. But then you can download
and install for Mac OS and you can download and
install for Windows or Ubuntu, whatever your
operating system is. You'll know that you
have the CLI installed if you can type Heroku
into the command line and see it doesn't say, I
don't know what that is. So one of the things I'm going
to do is type in Heroku log in. So I've already signed
up for a Heroku account. So you'll have to have done that
if you're going to follow along with these instructions. It's going to ask
me to press any key. It's going to open
up the browser. It's going to ask me to log in. I'm already logged in. I've already logged in. We can go back to the
terminal, and we can see that I've logged in now. Once I'm logged in in terminal,
I need to create a new app. So I can go to my Heroku
dashboard at this URL, and then I can just click here
and say New, Create New App. So I'm going to create an
app called the weather here. The weather here is available. I'm going to hit Create App. And then look at this. This is so perfect. It's kind of given me
everything I need to do. I need to do Heroku log in,
which I've already done. I've already created
a Git repository, so I don't need to
worry about any of this. But now I just need to
add Heroku as a remote. So I'm going to go
back to terminal here and I'm gonna say git remote
dash v. So this is listing me the current remotes. And the only current
remote is called origin, and it's at github.com. I want to add another remote
by copying and pasting this command right here. Gonna paste that in. OK, I've got another remote. If I say git remote
dash v, we can see, aha, I have the Heroku remote
and the origin remote. What's next? Now I'm going to
say, actually, if I made any changes of the code,
I would need to do git add and git commit. But all I need to
do is now deploy it to deploy it to Heroku is
say git push Heroku master. I'm sure I've
forgotten something. Let's see what happens. It's going to run through
a bunch of things. Building the project. And it's deployed. So I can click on this and
open it in the browser. And look, there it is. Huh. So it's working. It's deployed, but I
don't see temperature. If I go to View
Check Ins, there's nothing added to the database. So something's not working. It's deployed, but
it's not working. Aha. Do you remember? I remember. So the thing that I missed
is, once again, the API key. So this environment file
did not make it to Heroku. And actually, in this
case with Heroku, I don't need a dot env file. I don't actually even need
that NPM package dot env, because the Heroku command
line interface lets me set environment variables directly. So I can go back to the terminal
and I can type Heroku config. And Heroku config is
going to show me, ah, all of my environment variables,
of which there are none. So I can now say
Heroku config colon set API underscore key equals,
go back to my code, grab this, paste
that in, hit Enter. It's setting the API key and
even restarting the app for me. So nice of it to do that for me. Let's just check
Heroku config again. You can see that's my
environment variable. It's not found anywhere
other than here. It's saved secretly. And I can hit Refresh. And there we go. Now I've got the temperature. Once again, I can
go to Mountain View. I can hit Refresh to check in. I can go to San Francisco. I can check in again. Ooh, I can go to Sao Paolo. I can check in again. I can view all my check ins. And there they are. Everything is here and
the app is working. I kind of can't believe
this actually worked. And in many ways, I'm done with
the series and I'm not done. That's the thing I
already discussed. But there is some important
stuff I need to talk about. Number one, where's
the database again? Look at these three
check ins here. And I'm at
the-weather-here.herokuapp.com. Let me now go to codingtrain
the weather here.glitch.me. And let's look at
those check ins. One, two, three, four. There's like seven of them. Over here on the Heroku
one, there's four of them. They're not sharing a database. This is very important. Remember, the server is
the holder of the database. So you wouldn't want to deploy
this to multiple places. I'm just kind of showing
you how that works. But that database
is something that is created from the
server side itself. And it's different than I could
be running this local here. I'm not running the
server right now. But I could still say
node index dot js. And I've got whatever data I
happen to have here locally. So I could take that database
dot db file and pass it around, but that's not what
I'm doing here. So ultimately, once--
what I think of is I would have a sort of local
database for testing purposes. And once I've deployed it, that
database will persist forever. Of course, I might want to
wipe it for whatever reason. And again, I'm just sort
of tinkering around here. But where the database
lives, where the app lives, is quite important. There's also the
question, if I wanted to continue to work on
this if I'm on Glitch, Glitch is a whole
code editor itself. So I can kind of continue
and play and work there. But if I wanted to make a change
on Heroku, how would I do that? So to do that, I've got to
now go through multiple steps. I first would come
here to my local code. And just to make the
simplest change possible, I'm just going to change
and say the weather is here. Just as the header. Then I would have to
go back to my terminal. I've got to commit that. Making a change to
demonstrate deploy to Heroku. I'm going to make that change. And then I'm going to say
git push Heroku master. And this will now automatically
rebuild and restart the app. Heroku knows to do
that automatically when you try to send
it revised code. But it only can
[INAUDIBLE] revised code if it's been committed to Git. I can go back to the browser. I'm on Heroku. I can click on Check In. And you can see,
aha, is is there now. I've added is. Now, interestingly enough,
if I go here onto GitHub and I go into public
index dot HTML, it still just says
the weather here. Let's return to this
simple diagram for a second to think about this. So I'm working on the code. This is my local
dev environment. Then I can push my
code up to GitHub really just as a way of
backing it up or releasing it open source or collaborating
with other people who might want to work on it as well. I can pull changes from GitHub
if other people are sharing and implementing things. But that's kind of beyond the
scope of what I'm doing here. But now I've added Heroku. So what's important to
realize, unlike with Glitch when I kind of from Glitch
grabbed the code from GitHub, I'm actually also pushing
the code here to Heroku. So this is where
I'm working on it. When I push it to Heroku,
it rebuilds the server. So this is important. That's a deployment thing. So as I'm developing
it, I might just test it locally, push to
GitHub to publish the code, and then when I'm ready
actually push it to Heroku. And I can have a development
server and a deployment server, and I can kind of go grab
a lot of rabbit holes there to have a much
more complex workflow. But it's important to realize
that GitHub and Heroku are never talking to each
other themselves. I am just working on my code
here, sending it to GitHub, sending it to Heroku. So to finish this off, I'm going
to say git push origin master. And that's sending it to GitHub. And if I go here, we
can see that it now has the weather is here also. Everything is in
sync, and I have my project deployed
to the weather here dot Heroku dot app. And I'll remind you that
if you want to go here, you can-- a base project
for the git cloning. So I gotta clean this up
and edit this description. But you can go here to
this particular URL. And this is where now you
can also find the project, remix it, take a
look at the code, and have it already running
online in the browser itself just through Glitch. Thank you so much for
watching this whole course. Did you really watch
the whole course? If so, I'm quite amazed. I mean, maybe this
isn't the end. Maybe in the future,
there will actually be some videos that follow this. But right now, this is
where I'm finishing up. By watching this course, you've
hopefully added something new to your toolbox. Even just from the
client side, you've learned how to work
with the fetch wipe API, loading a CSV file, graphing it. Hopefully you've also
learned something about how the basics
of JavaScript, knowing how JavaScript
objects works, leads you to understand
how JSON data, data in JSON, format JavaScript
Object Notation, works. And you can make a call
to an external API, get information, and
use that information, repurpose it in a
web page itself. Then more importantly,
hopefully now you've realized that server side
programming is something that you can add
to your toolbox. You can use it to save
data to a database. You can use it to hide API keys. There is so much
more that you can do with server side
programming in terms of being able to have multiple
applications communicate to each other
across the network. So I hope this is just
the beginning for you. Let me know what
kind of questions you have in the comments. If you make a project,
if you've made one and you've deployed it,
go to thecodingtrain.com where I'll have a page that
you can share URLs to projects that you've made and deployed. And in particular, if you
found a web service, a web hosting service, that you
like to deploy your project, I would love to hear
about it as well. So thanks so much for watching. Hope you enjoyed this
whole set of videos, and I'll see you in
future Coding Train stuff. Goodbye. [BLOWS WHISTLE] [MUSIC PLAYING]