Google have recently released support for ASP.NET Core on their “GCloud” hosting platform. And along with it released some documentation on how to get up and running here. The documentation itself uses their container engine, but you can actually get up and going on GCloud a lot faster using a couple of command line tools (Very similar to how you might get going on Azure). So for this tutorial instead we will try and get up and running much faster, and then you can transition to container hosting if it fits your needs better.
Something super important is that at the time of writing, GCloud only supports .net core 1.0 (Not 1.1). Ensure that your apps are running on .net core 1.0 before attempting to deploy them!
Note : This tutorial uses Windows Powershell a lot. If you are on Mac and Linux that could be an issue! But the commands will be very very similar if not exactly the same in your own native command line.
Setting Up GCloud
First install the GCloud SDK from here https://cloud.google.com/sdk/. This gives you a few extra powershell/cmd commands to be able to deploy straight from your desktop (And obviously in the future from your build server). Be sure to install the “beta” components along the way too (You will see this inside the installer). More than likely after installing you will have to restart your machine, if the powershell commands don’t work off the bat you might want to first try rebooting (It is Windows after all).
If you haven’t already head to Google Cloud at https://cloud.google.com/ and sign up. It’s free! You can read more about the limits of the free tier here. But for the purpose of this tutorial there is no way you are going to blow through the free hosting.
Once you are signed up and in, create your first project on the dashboard. Name it whatever you want – I went with “My First Project”.
Now, here it gets a little difficult but you should be able to handle it! Open a powershell prompt and type :
gcloud auth login
A browser window should open instantly on your machine asking you to login to your Google cloud account and give permission to access your GCloud account. After following the prompts your powershell window should have something similar to the following in it :
You are now logged in as [REDACTED]. Your current project is [None]. You can change this setting by running: $ gcloud config set project PROJECT_ID
Great! You are now logged into your account. On your GCloud dashboard in your browser, you should see something similar to :
Take the ProjectID and type the following into your Powershell window
gcloud config set project {YOURPROJECTID}
Now we are set up to deploy from Powershell!
Setting Up Your ASP.NET Core Project
For this tutorial I’m just using a basic hello world app (The default empty project from Visual Studio), but it really shouldn’t matter what your app is doing.
Add a file to your project called “app.yaml”. This is information for GCloud to work out how your app should be run. Inside the app.yaml file put the following :
runtime: aspnetcore env: flex
After creating this file you need to set it to copy to the output directory. If you are on project.json this means opening up your project.json file, and finding the publishOptions node. It should end up looking like this :
"publishOptions": { "include": [ "wwwroot", "web.config", "app.yaml" ] }
If you are on the latest version of .net core tooling (e.g. csproj), then you need to set the file to copy always in Visual Studio by right clicking the file, selecting properties, and then changing the drop down to Copy Always.
Again, another reminder that GCloud only supports .NET Core 1.0 (Not 1.1). This means that you must target 1.0 and not 1.1. Unfortunately switching around between .NET Core versions is another kettle of fish that deserves it’s own post really. Have a quick google around for how to switch around .NET Core targeting versions if you are not already using 1.0.
Deployment
Now onto deployment. For my test application I’m going to do a simple dotnet publish, but you may have something more complicated going on so you might want to read the docs here. But for now, let’s just run the following inside our project directory from Powershell.
dotnet publish -c Release
Take your powershell and move into your release directory. The path will be something like “bin\Release\netcoreapp1.0\publish”.
Run the following command from powershell :
gcloud beta app deploy app.yaml
This is basically the entire deploy process. You are telling GCloud to take everything inside that folder (Along with the app.yaml file describing what it is), and push it to your logged in project.
If this is your first time deploying, you will be asked which region you wish to deploy to, and then it will take a good 5 – 10 minutes for the deployment to complete. Just hang in there! Once complete, you should be able to type the following powershell command which will open your newly deployed app in your browser!
gcloud app browse
Moving Forward
The first thing you should learn is how to switch off your running instance. It’s sort of buried a bit behind layers of menus, but this link should take you directly there : https://console.cloud.google.com/appengine/versions. Select the latest version of your app (If you’ve only deployed once, then there will only be one), and hit stop up top.
Before you switch it off though, take a look around the portal and check out some of the awesome features like logging (Direct Kestrel logging which is pretty nifty), and monitoring. Both of which look very very good.
Drop a comment below with your experience getting up and running on GCloud!
We’re working on 1.1 support as we speak. Stay tuned!