QueTwo's Blog

thouoghts on telecommunications, programming, education and technology

ColdFusion (Railo) on Microsoft Azure Websites with IntelliJ IDEA — Part 2

In Part 1 of this series, I showed how to setup your project on Railo so that you could publish your CFML to Microsoft Azure Websites.  You should have your project in a state that you want published on the web.

For this part, you will need to have an Azure account.  You can sign up for one at http://azure.microsoft.com.  Remember, BizSpark and certain MSDN members get free credits on Microsoft Azure.

  1. Login to the Microsoft Azure “Management Portal”
    1. At the time of writing, there are two versions of the portal — the Classic and New.  I’m going to show the Classic portal as it seems to be changing the least at the moment — but I’m sure the New portal will eventually replace it.
  2. Create a new “Custom” Website
    1. After you’ve logged into the Management Portal, click on the “+ New” button on the bottom of the site.
    2. Chose “Compute” -> “Website” -> “Custom Create”
    3. Chose a URL for the site, Web Hosting Plan, and if you want a database.  Don’t chose the “Publish from Source Control” at this point — we will set this up later.
    4. It will launch the new site. This will take a few minutes.  Once you see “running” on the dashboard, click on it to modify the settings of the site.
    5. Click on Configure to configure the site.
      1. Enable Java by setting a version.  This will disable PHP, Python and .NET processing.
      2. Make sure to select Tomcat as your container.
      3. Your choice on 64 or 32 bit.  Railo doesn’t care which is running.
      4. Web Sockets will allow for outgoing connections from Railo to outside servers (such as HTTP calls).  If you don’t do this, keep it off.
      5. Always On will keep the site “warm” if it is not in active use.  If this is off, Azure will unload it from memory if there is not traffic to the site within a half-hour.
      6. Scroll down to Default Documents.  Add index.cfm.  You are free to remove the other options if you wish.
      7. Hit “Save”  It will take about 5 minutes for Websites to update your site to use Java.
  3. Upload your site to Azure (Using FTP)
    1. Click back to the Dashboard of your site.  Scroll down about half way through the page and find your FTP credentials.
    2. Using your favorite FTP client, login to this FTP site.
    3. Change to the /site/wwwroot/webapps/ROOT/ folder on the remote side.  This is where your files will be served out of.
    4. Delete the files that exist in the ROOT folder.  Upload ALL the files that exist in the output of your exploded WAR directory (in my case, E:\Projects\SampleWebsite\out\artifacts\SampleWebsite_war_exploded\).
    5. In some cases, you may need to restart the website.  You can do this via the management portal and clicking on “STOP” on the bottom of the page.  You can then click “START” to restart it.
    6. The first load after you upload the files can take 30 seconds.  Don’t be alarmed about this — subsequent loads should be much faster after Railo is loaded into memory.
    7. Keep uploading subsequent changes to your code and play around with settings in Azure.  For example, if you want a “custom domain”, you can change the site to a Standard plan instead of the free one.  You can also configure IntelliJ to automatically upload changes via FTP when you deploy a site.
  4. Upload your site to Azure (Using GIT)
    1. Deploying via GIT is a pretty cool concept, but it does take a few additional steps to get working.  First, we will need to create a new artifact in IntelliJ.  This is so we can keep our GIT repository separate from our working one (if we are using GIT for source control).
    2. Right-Click on the SampleWebsite Module in the Project view.  Chose Open Module Settings (or you can press F4)
    3. Click on the Artifacts tab.
    4. Add a new Artifact “Web Application: Exploded” -> Empty
    5. Give the new artifact an obvious name, like Azure Push.
    6. Make a note of the output directory name.  This will be the root of your new GIT repository
    7. Under Output Layout, click the create directory button to add a new directory named “webapps”
    8. Add another directory below that named “ROOT” (caps matter)
    9. Under Available Artifacts on the right-column, drag “SampleWebsite war:exploded” to be under ROOT
    10. Click Apply, then OK to get out of the Artifact setup.
    11. Go back to the Azure Management Portal.  Open your site, and go to the dashboard.
    12. FTP into the site using the site using the instructions above.  You don’t need to upload the files, but you DO need to remove all the files in ROOT in order to get a clean site started.
    13. Go back to the site dashboard.
    14. Click “Setup Deployment From Source Control”
    15. Click on “From Local GIT Repository”
    16. Load your GIT client (like git bash), and go to the output directory of the artifact we just created.
    17. Follow the commands on the Azure site on how to commit your initial files to your local GIT repository.  Don’t clone the existing site.
    18. After you’ve committed your first file, and connected it to Azure GIT, do a git add * , and commit those files to your site.
    19. Your Azure site may need to be restarted after your first commit.  I’ve seen it both ways.  If it still shows a generic Azure is running Java page, try restarting the site.
    20. In order to refresh the site’s contents, follow the following steps :
      1. In IntelliJ, Go to the Rebuild Menu -> Rebuild Artifacts -> Azure Push -> Build.    This will refresh your site’s artifact.  DO NOT CHOSE REBUILD OR CLEAN — these will remove the GIT database files and you will have to re-connect it to GIT.
      2. In GIT, add *, then commit.  This should update the site with the latest.

And that is it.  A few notes, however :

  • You can’t deploy .WAR files onto Azure websites.  It doesn’t work for some odd reason — and when it does (it happens sometimes), it breaks your site because of partial loads.
  • It seems that connections to Amazon S3 are blocked.  You can’t use the s3:// commands.
  • If you use Microsoft’s Azure SQL Server, you can’t use any ORM (hibernate).  Azure SQL Server requires some changes to the SQL Statements to allow for clustered indexes.  You can use their “free” MySQL instance.  Manual SQL statements via Stored Procs and CFQUERY work fine.
  • If you do things like update Railo or upload files locally on your machine, make sure that you update your local project or those files may not make it into your deployed project on Azure.

Hope this tutorial gets you in the right path!  I’ve been deploying a few sites using this method with great success.  (I’m using GIT to deploy my sites — it’s already in my toolchain and seems to work well).


2 responses to “ColdFusion (Railo) on Microsoft Azure Websites with IntelliJ IDEA — Part 2

  1. Jeff November 15, 2014 at 4:30 pm

    Since you have done both I’m curious which do you prefer for Railo. Azure or AWS?

    • quetwo November 15, 2014 at 6:38 pm

      AWS is much better understood by the community, and I feel a bit less buggy than Azure. Azure is more expensive than AWS for the lowest end, but you get more horsepower for your buck at the lowest level (more, and better performing CPU and RAM). At this point, AWS is much more configurable if you are running Java based apps compared to Azure, but the defaults in Azure work pretty well, as long as you understand what is happening in the background (and I don’t think many do).

      Right now I’ve got many of my production sites running in Azure, but that’s because they gave me a butt-load of free credits to start off with. If I had to pay for it out of my own pocket, I would probably pay for AWS. That being said Azure is maturing very quickly and that may change in the future.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: