Create Azure Linux Virtual Machine and make website running


While moving my blog to Azure Virtual Machine, I found some complexity just because of Linux virtual machine. As a ASP.NET geek, I am not that much of aware about Linux and its management commands. So, I have decided to write the blog on how to make my first Hello World website in Azure Linux Virtual Machine. I am also planning to write the blog on installing ASP.NET 5 into Linux Virtual Machine.

Create Linux Virtual Machine into Azure Cloud

The first step into making your website up and live is creating Linux Virtual Machine into Azure Cloud. Hence, I am logging with my Azure Account. There are two methods to create Virtual Machine into Azure. First one is creating Virtual Machine using Quick Create. Quick Create is used when you are creating only one Azure Machine. Another way to create Virtual Machine is using From Gallery, and it will be used when you are a need into creating multiple Azure Virtual Machine with some advance settings.

Sign into Azure portal and Click on New at the bottom left of Azure portal, then Click on COMPUTE -> VIRTUAL MACHINE -> QUICK CREATE as shown into the image.

Create Azure Virtual Machine
Create Azure Virtual Machine

After clicking on Quick Create, you will be prompted for entering some information about Virtual Machine like DNS name, Image for VM, Size for VM, Username, password, and region. I am going to creating VM with webstackdemo DNS name, and I am selecting Ubuntu Server 15.10 as Image name to create Linux Virtual Machine. Just enter all information and click on CREATE A VIRTUAL MACHINE button. You have to wait for some time after clicking on CREATE A VIRTUAL MACHINE while new server is up and running. On successful creation, your will be prompt like Successfully created virtual machine webstackdemo.

Login into Linux Cloud Virtual Machine
After successfully creating the virtual machine, you can look at endpoints of the virtual machine in Azure Portal. There will be default endpoint with named SSH having 22 as private and public port. You can change port at any time to secure your Virtual Machine. You can find SSH Details to connect or login into your machine in Dashboard tab. To login with your windows machine you need SSH client for windows like PuTTY.

Now, open PuTTY client and enter hostname and port detail from SSH Detail and click on open.

PuTTY detail to login into Azure
PuTTY detail to login into Azure

Now, PuTTY will prompt for credential. Login with the credential that you have created while creating your Azure Machine.

Installing Apache2, MySql, and PHP
To run large data driven application you need to have Apache2, MySql, and PHP installed into the virtual machine. So, you must have root access. Type following command to switch to root user.

sudo su

In order to install the latest version of services, your packages list from repository should be updated. There is apt-get command in Ubuntu server to update package list from repository server. So, type the following command to update package list

sudo apt-get update

After update modules, type following commands to install Apache2, MySql, and PHP

sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php5
sudo apt-get install php5-mysql

While Installing the MySql you will be prompted to enter the password for MySql. After successfully installing all above services you can type the following command to check that MySql services properly installed.
mysql -u root –p
It will prompt you to enter the password to log in.

Setup Virtual Host for Apache2
Create directory structure for your website and to set up virtual host into Apache2. Consider that you are going to setup webstackgeek.com into apache. In order to create the directory structure for webstackgeek.com type following command.

sudo mkdir -p /var/www/webstackgeek.com/html

Now, Create file into that html directory for your webstackgeek.com, you can use touch command to create file and nano to edit that file. You can also upload it using FTP, but for now, I am not going to cover that. Type following commands to create and edit index file.

cd /var/www/webstackgeek.com/html
sudo index.html
nano index.html

Type some HTML into index.html and save index.html file. Apache2 should have proper permission on that newly created directory. You can use chmod to give 755 permission on /var/www/ directory. Now, Its turn to create virtual host file and configure Apache2 to point that directory for webstackgeek.com. Apache has default virtual host file called 000-default.conf. Copy that file with the new name like webstackgeek.com.conf. Type the following command of copying the file the as the new name.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/webstackgeek.com.conf

Open that file and edit it to add configuration related to webstackgeek.com domain. After editing your host file, it should look like

<VirtualHost *:80>
    ServerAdmin admin@yoursite.com
    ServerName webstackgeek.com
    ServerAlias www.webstackgeek.com
    DocumentRoot /var/www/webstackgeek.com/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

After creating host file, you have to enable host file into Apache2. You can use a2ensite command of apache2 to enable that and then restart Apache2.

sudo a2ensite yourdomain.com.conf

The final step for your site to up and running is to add endpoints into Azure Cloud portal. Go to your virtual machine and click on ENDPOINTS. Click Add button from the bottom and Add HTTP Endpoint having 80 public port and private port for your site, you can also configure the endpoint to use HTTPS with 443 port.

Now you can run yourdomain.com into your favorite browser to check that everything is working.

ASP.NET 5 beta8

ASP.NET 5 beta8 announced

ASP.NET team has announced ASP.NET 5 beta8. You can download ASP.NET 5 beta8 using NuGet Packages and ASP.NET tooling for Visual Studio. You can find installation instruction for ASP.NET 5 beta8 for Windows, Linux, and Mac.

Document and samples of ASP.NET 5 beta8 can be found at http://docs.asp.net

What is an announcement in ASP.NET 5 beta8?

There would be changes like

DNX Watch Command
DNX Watch has file watcher. Your application will be restarted when you change any file in your application. To install DNX-watch use following command

dnu commands install Microsoft.Dnx.Watcher

You can use watch command like dnx-watch . You can start to watch command from the same directory of Project.json

While publishing your application, you can Specify target frameworks
You can specify target framework of application at the time of publishing your application using the following command

dnu publish -framework dnx45

and it will only trim publish package and include only those set of packages that required for your application and
resulting in smaller deployed package.

Targeting old frameworks
Now, you can target .NET 2.0 and .NET 3.5 frameworks in your DNX projects. You just need to specify net20 and net35 into target framework of Project.json file.

Clear HTTP Response Cache used for package response
When restoring packages dnu do HTTP caching for any request send. You can use the following command to clear the cache.

dnu clear-http-cache

DNVM uninstall
Whenever you are keeping updated with your latest DNX releases, you might be in a situation like DNX hanging out your machine. You can find ~/.dnx/runtimes folder into your user profile directory and delete older versions anytime. This is a just tedious task. So now, you can run dnvm uninstall to remove or uninstall specified runtime.

Add additional files to a package
DNX generating NuGet Packages for your projects, but, in that case, you are in a need to add additional files to your package. You can now add additional files to NuGet packages by specifying in project.json using new packInclude property.

"packInclude": {
    "destination1Directory/": "source1Directory/**",
    "destination2Directory/": "source2Directory/**",
    "destination2Directory/some_additional_file.txt": "source2a/somefile.txt",
    "destination3Directory/": ["source3Directory/file1.txt", "source3Directory/file2.txt"]
}

You can specify the set of source and destination directory to include into the package. You can also add files using pattern and array of files.

Run script for each specified framework and creating the package.
With DNX, you can handle multiple framework(like net45,net46 or dnxcore50), and multiple build configuration like debug and release). In project.json you can specify the script that run on before and after each package creation and build. before ASP.NET 5 beta8 script was run twice.

Consider you have two dotnet frameworks and two build configuration say release and debug. Now, your script can run four times once for each framework and once for each build configuration. The prepack and postpack script run twice once for each build configuration.

Change in IIS Hosting model
Up to ASP.NET 5 beta8 application runs in IIS have been hosted by the component called “Helios”, contained in the Microsoft.AspNet.Server.IIS. This component facilitated the bootstrapping of the DNX and subsequently the .NET CLR or Core CLR by way of utilizing a hook in the existing System.Web hosting model to replace the runtime after the application had started.

In ASP.NET 5 beta8, they have discontinued the “Helios” IIS host to reduce complexity and manageability of two hosting environments. Now, Hosting ASP.NET 5 applications in IIS will now be achieved using the IIS HttpPlatformHandler configured to forward through to the ASP.NET 5 Kestrel server. HttpPlatformHandler module is native IIS module hence it needs to be install by Administrator.