Click here to Skip to main content
15,440,314 members
Articles / Web Development / HTML
Posted 15 Dec 2016


27 bookmarked

Angular2 & WebApi (SPA) for Enterprise App - Part 8 - Build & Deploy Application

Rate me:
Please Sign up or sign in to vote.
3.34/5 (13 votes)
29 May 2017CPOL3 min read
In this article, we will learn how to build and deploy the code

Other Articles in the Series

  1. Overview
  2. Add new Permission
  3. Project structure
  4. Multi-Languages (i18n)
  5. DI & IoC - Why and Why not?
  6. RESTful & WebApi
  7. Manage Application Lifecycle
  8. New version of TinyERP with Angular 2 (typescript)
  9. CQRS: Avoiding performance issues in enterprise app (basic)
  10. Multiple data-stores: Scale your repository (Part 1)
  11. Multiple data-stores: Scale your repository (Part 2)

What Can I Get From This Article?

In this article, I will introduce how to deploy the app to production environment in 2 modes:

  • Client and Api in separated domain
  • Client and Api in the same domain

What Should I Do To Deploy Client and API in Separated Domain?

OK, for deploying the client and Api on different domains is rather simple as below:

  1. Update configuration (in app.common/configurations/configuration.release.config) for production environment
  2. Publish code of Api using Visual Studio Editor
  3. Upload Api code to Api domain
  4. Update ApiBaseUrl in app/config/appConfig.ts point to Api domain
  5. Build client side
  6. Upload client to domain for client side

1. Update Configuration (in app.common/configurations/configuration.release.config) for Production Environment

Open your code in Visual Studio and navigate to "configurations/configuration.release.config" in app.common project as below:

<?xml version="1.0" encoding="utf-8" ?>
  <authentication tokenExpiredAfterInMinute="20" ></authentication>
  <paging pageSize="10"></paging>
    <clear />
    <add name="DefaultConnection" 
    database="MyERP" server="<server>" port="<port>" 
     userName="<username>" password="<pwd>" 
     dbType="MSSQL" default="true"></add>
  <localization defaultLanguageCode="en"></localization>
  <uitest reportTemplate="templates/report.xlsx" 
   zipFile="report_{0}.zip" environtmenFile="environments.xml" 
  <mail server="" port="587" 
  ssl="true" username=" " 
   password="pwd" displayName="No-reply" 
   defaultSender=" " />
  <folder mailTemplate="templates/email/" 

Please be aware of <databases />. This is the list of connectionstrings that were used in our app. By default, it's name is "DefaultConnection".

Please update appropriate information as sample below:

<add name="DefaultConnection" 
database="MyERP" server="localhost" port="1433" 
userName="tinyerp" password="123456" 
dbType="MSSQL" default="true"></add>

2. Publish Code of API using Visual Studio Editor

  • Right click on App.Api and select "Publish" from context menu:

    Image 1

  • Select "published" from dropdownlist and click on "Publish" button at the bottom of dialog:

    Image 2

  • You will see the result as below:

    Image 3

The publish code was located at <solution root>/application.api/published.

To deploy the API, just upload this to API domain (for example:

3. Upload API code to API Domain

Using any FTP client to upload published file to your domain:

Image 4

Access to, you will receive as below:

Image 5

4. Update ApiBaseUrl in app/config/appConfig.ts Point to API Domain

Please change the baseUrl in "<root>/app/config/appConfig.ts" as below:

Image 6

5. Build Client Side

Open command prompt/ terminal and go to "<root>/client/", and run "gulp build":

Image 7

After this command was finished, the compiled code was located in "<root>/client/dist" folder:

Image 8

Look at this folder, all ts files were compiled into js files and were compressed into "<root>/client/dist/bundle.js". The remaining are html/ image files.

Open the "<root>/client/dist/bundle.js", we see the content was compressed:

Image 9

We can also apply some minification during the compile process. So the code is safe to be delivered.

6. Upload Client to Domain for Client Side

Please use any FTP client tool, such as filezilla and upload those files into your domain (for example ""). Then, we can check it by access to "".

The result is the photo below:

Image 10

Login with "". We will see default page as below:

Image 11

Congratulations! You deployed your client successfully.

I Got An Error as Below on IIS, How Can I Solve It?

Image 12

If looked at "<root>/client/dist", there is web.config file. We need this file when deploying the app on IIS.

There is rewrite rule in web.config, this will always redirect the request to index.html.

        <rule name="Rewrite to default" 
        enabled="true" stopProcessing="true">
            <match url="^[^.]+$" />
                <add input="/api/" pattern="^OFF$"/>
            <action type="Rewrite" url="/" />

Without this rule, IIS may not be able to handle request when user accesses "".

To solve this, we need to install "Url Rewrite" for your IIS. We can download it from here.

I Got An Exception When Installing "Url Rewrite Module" on IIS?

Image 13

This mostly related to IIS issue. Please refer to this link for solving this problem.

What Should I Do to Deploy Client and API in the Same Domain?

To deploy API and client on the same domain, it was mostly the same as in separated domain. The compiled Api code was uploaded to the sample folder with client with some modifications:

  • Remove index.html from App.Api
  • Merge web.config in both client and App.Api

The final folder will be:

Image 14


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Written By
Vietnam Vietnam
I have more than 8 years in web development for multiple types of applications (ERP, Education System, ...).
I usually organize training/ coaching on specified topic (such as: RESTful/ WebApi, Angular2, BEM, LESS, SASS, EF, NodeJs ....). Please contact me on Skype (tranthanhtu83) or email ( if need.
For more information about me, Please visit

Comments and Discussions

QuestionYou are a life saver Pin
NaibedyaKar4-Oct-17 3:33
professionalNaibedyaKar4-Oct-17 3:33 
AnswerRe: You are a life saver Pin
tranthanhtu.vn4-Oct-17 3:41
professionaltranthanhtu.vn4-Oct-17 3:41 
QuestionError gulp build Pin
Member 23546866-Jun-17 2:27
MemberMember 23546866-Jun-17 2:27 
AnswerRe: Error gulp build Pin
tranthanhtu.vn6-Jun-17 2:34
professionaltranthanhtu.vn6-Jun-17 2:34 
GeneralRe: Error gulp build Pin
Member 23546866-Jun-17 3:23
MemberMember 23546866-Jun-17 3:23 
AnswerRe: Error gulp build Pin
tranthanhtu.vn6-Jun-17 3:44
professionaltranthanhtu.vn6-Jun-17 3:44 
Questionchange to Angular4 Pin
shaileshbc20-Apr-17 2:46
Membershaileshbc20-Apr-17 2:46 
QuestionAuthentication and Authorization with ASP.Net Core and Angular 2 Pin
Zeshan Munir7-Feb-17 7:37
MemberZeshan Munir7-Feb-17 7:37 
AnswerRe: Authentication and Authorization with ASP.Net Core and Angular 2 Pin
tranthanhtu.vn7-Feb-17 18:26
professionaltranthanhtu.vn7-Feb-17 18:26 
GeneralRe: Authentication and Authorization with ASP.Net Core and Angular 2 Pin
Zeshan Munir14-Sep-17 1:07
MemberZeshan Munir14-Sep-17 1:07 
AnswerRe: Authentication and Authorization with ASP.Net Core and Angular 2 Pin
tranthanhtu.vn14-Sep-17 2:06
professionaltranthanhtu.vn14-Sep-17 2:06 
Questiongulp build Pin
DannyJooste22-Jan-17 5:37
MemberDannyJooste22-Jan-17 5:37 
AnswerRe: gulp build Pin
DannyJooste22-Jan-17 5:44
MemberDannyJooste22-Jan-17 5:44 
AnswerRe: gulp build Pin
tranthanhtu.vn22-Jan-17 16:52
professionaltranthanhtu.vn22-Jan-17 16:52 
AnswerRe: gulp build Pin
tranthanhtu.vn22-Jan-17 16:52
professionaltranthanhtu.vn22-Jan-17 16:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.