Re-thinking Candidate application
I’ve released 0.0.1 version of
Candidate pretty
long time ago. I was actually quite happy how the things went, before I
collected some initial feedback. Even, if I can see the application useful,
almost all responders had a different opinion. Let’s briefly see the major
concerns.
IIS hosting
Original idea of Candidate was that it works as usual ASP.NET application,
hosted under IIS. That worked really bad, though. Candidate is performing a
some operations that requires extended permissions (for git, msbuild, file
system operations etc.). That means that IIS web site has to be configured
to run under under your personal account (or any other administrative
account, with set-up SSH keys, access to msbuild etc).
All of that created a bit of overhead. First of all, Candidate has to be
installed and configured on IIS. Even, it is possible to create kind of
installer to automate this job, it does not sound good. In other hand, some
people might have very strict policies on their machines, so it is not even
possible to change any kind of IIS settings under it.
So, it turned out to be bad idea for this particular application.
Deployment scenarios
The primary deployment scenario that implemented in Candidate is local one.
It means, it’s able to build and test the site and deploy it to local IIS. I
did so, since I use the same scenario for deployment of
trackyt.net, which is hosted on VPS and
deployed by Jenkins running on the same server.
But many people are not using VPS, but rather sharing hosting there they are
not even able to install any kind of other software. So, they are more
interested in remote deployment, not local one. With the
re-invention of Azure, you
might consider scenarios of deployment existing web application to it
seamlessly.
Local deployments was a good for prototype, but not good at all for
product.
Technical stuff
I stick to framework named
Bounce. It’s very
powerful product, that basically allows to write a deployment scripts in
.NET languages. Then I originally saw it, I thought it’s great since it does
everything I need, including git operations, msbuild and IIS sites
deployment. Even more, Bounce is the one of the best .NET code I ever seen,
so respect to
refractalize.
But.. Bounce, is not that good for long perspective. It required to create a
lot of
configuration code, hard to change logging options and further extension.
For a long running product I need more lightweight and robust approach.
Starting it over again
Considering all things above, I decided to re-start the project, almost from
the scratch.
It would be based on 3 different technologies, that in my opinion are agile
enough to allow me to build what I want.
-
NancyFX - will be used as application host. Currently
Nancy is 0.11 version, that has a lot of improvements comparing to 0.9
that I used. The main reason to choose that, is Nancy allows to create
self-hosted application. It’s basically .exe application, that you can run
and it starts the HTTP server. I plan to have all-in-one executable, that
do not require any installations and will prepare all required
infrastructure and first run. That would solve both installation and IIS
limitations problem.
-
RavenDB - as application document storage. In previous
version I didn’t use any kind of database at all, being happy with simple
SettingsManager
to store .NET objects into JSON files. The reason is that I didn’t have
any dependencies on any software (as SQL Express). With Raven it is
possible to use Embedded mode, so it does not require any service running,
just the assemblies.
-
PowerShell - as deployment scripts. No more VCS, build,
test and deploy code in C#. I plan to have a generic PowerShell scripts
that would be easy to run and maintain. With a PowerShell I hope to extend
the deployment scenarios to support Local, FTP, MS Deploy, Azure
deployments.
Unfortunately, I’m not yet proficient with any of these technologies. It
makes me very exited to learn something new. I’ve already created a
branch
where some basic infrastructure is prepared. My goal would be create first
prototype in 2 - 3 weeks.
And I want to appreciate everyone who provided feedback and useful technical
suggestions. I hope it would turn in something good.
I’ve released 0.0.1 version of
Candidate pretty
long time ago. I was actually quite happy how the things went, before I
collected some initial feedback. Even, if I can see the application useful,
almost all responders had a different opinion. Let’s briefly see the major
concerns.
IIS hosting
Original idea of Candidate was that it works as usual ASP.NET application,
hosted under IIS. That worked really bad, though. Candidate is performing a
some operations that requires extended permissions (for git, msbuild, file
system operations etc.). That means that IIS web site has to be configured
to run under under your personal account (or any other administrative
account, with set-up SSH keys, access to msbuild etc).
All of that created a bit of overhead. First of all, Candidate has to be
installed and configured on IIS. Even, it is possible to create kind of
installer to automate this job, it does not sound good. In other hand, some
people might have very strict policies on their machines, so it is not even
possible to change any kind of IIS settings under it.
So, it turned out to be bad idea for this particular application.
Deployment scenarios
The primary deployment scenario that implemented in Candidate is local one.
It means, it’s able to build and test the site and deploy it to local IIS. I
did so, since I use the same scenario for deployment of
trackyt.net, which is hosted on VPS and
deployed by Jenkins running on the same server.
But many people are not using VPS, but rather sharing hosting there they are
not even able to install any kind of other software. So, they are more
interested in remote deployment, not local one. With the
re-invention of Azure, you
might consider scenarios of deployment existing web application to it
seamlessly.
Local deployments was a good for prototype, but not good at all for
product.
Technical stuff
I stick to framework named
Bounce. It’s very
powerful product, that basically allows to write a deployment scripts in
.NET languages. Then I originally saw it, I thought it’s great since it does
everything I need, including git operations, msbuild and IIS sites
deployment. Even more, Bounce is the one of the best .NET code I ever seen,
so respect to
refractalize.
But.. Bounce, is not that good for long perspective. It required to create a
lot of
configuration code, hard to change logging options and further extension.
For a long running product I need more lightweight and robust approach.
Starting it over again
Considering all things above, I decided to re-start the project, almost from
the scratch.
It would be based on 3 different technologies, that in my opinion are agile
enough to allow me to build what I want.
-
NancyFX - will be used as application host. Currently
Nancy is 0.11 version, that has a lot of improvements comparing to 0.9
that I used. The main reason to choose that, is Nancy allows to create
self-hosted application. It’s basically .exe application, that you can run
and it starts the HTTP server. I plan to have all-in-one executable, that
do not require any installations and will prepare all required
infrastructure and first run. That would solve both installation and IIS
limitations problem.
-
RavenDB - as application document storage. In previous
version I didn’t use any kind of database at all, being happy with simple
SettingsManager
to store .NET objects into JSON files. The reason is that I didn’t have
any dependencies on any software (as SQL Express). With Raven it is
possible to use Embedded mode, so it does not require any service running,
just the assemblies.
- PowerShell - as deployment scripts. No more VCS, build, test and deploy code in C#. I plan to have a generic PowerShell scripts that would be easy to run and maintain. With a PowerShell I hope to extend the deployment scenarios to support Local, FTP, MS Deploy, Azure deployments.
Unfortunately, I’m not yet proficient with any of these technologies. It
makes me very exited to learn something new. I’ve already created a
branch
where some basic infrastructure is prepared. My goal would be create first
prototype in 2 - 3 weeks.
And I want to appreciate everyone who provided feedback and useful technical
suggestions. I hope it would turn in something good.