Installing mongodb as a service on windows

  1. Get the latest version of mongodb from here.
  2. Unpack the content of the archive wherever you need.
    1. [edit] looked at v3 at some point and could not find the binary - only msi available. in order to unpack msi use 7zip or type the following in the cmd (you may need admin rights); instaling msi will also extract it ;)
    2. msiexec /a filepath to MSI file /qb TARGETDIR=filepath to target folder
      
  3. Create a directory for the db data
  4. Prepare a mongodb config, for example:
  5. systemLog:
        destination: file
        path: "h:\\ere\\goes\\path\\to\\the\\logfile.log"
        quiet: true
        logAppend: true
    storage:
        journal:
            enabled: true
    net:
        port: 10005
        bindIp: 1270.0.0.1
    storage:
        dbPath: h:\\ere\\goes\\db\\path\\
    • starting with 2.6 cfg is in yaml, the old syntax is compatible though
    • spaces are used for indentation, tabs will not do (see)
    • paths need to be escaped
  6. Install mongodb as a service:
  7. mongod.exe --config h:\ere\goes\the\cfg\path --install
    
    • By default --install command will create a service named MongoDB; in order to adjust it have a look at the --serviceName, --serviceDisplayName and --serviceDescription params
    • By default the service will be configured to be runned under the ".\LocalSystem" not the "NT AUTHORITY\NetworkService" account as one coulde expect; If you want to specify a service user / pass use the --serviceUser and --servicePassword args

  8. And start it either through the services tab of the task manager or from the command line:
  9. net start serviceName


The service can be stopped through the services tab or from the command line:

net stop serviceName


To uninstall the service run:

mongod.exe --remove --serviceName sName

IIS - multiple host aliases for the loopback adapter 127.0.0.1

Scenario: ARR listening on port 80 set to load balance multiple sites listening on different ports on local host

Problem: Server Farm will refuse to add multiple localhost addresses - it does not use port number to differentiate between host aliases

Solution: locate the Windows\System32\drivers\etc\hosts file and add for example the following:

127.0.0.1	localhost1
127.0.0.1	localhost2
127.0.0.1	localhost3
127.0.0.1	localhost4

This will make the above aliases point to localhost

Installing redis as a service on windows

A quick reminder (mainly for myself) on how to setup redis on windows

  1. Get the latest release of redis from https://github.com/MSOpenTech/redis (downloading from github may be tricky, so in order to download https://github.com/MSOpenTech/redis/tree/2.8/bin/release/redis-2.8.12.zip just go to https://github.com/MSOpenTech/redis/raw/2.8/bin/release/redis-2.8.12.zip; 2.8.12 was the current at the time of writing so the links will die at some point); archive contains a step by step guide on how to set up the redis, so you can actually skip reading already ;)
  2. Extract the executables to some location of choice, for example c:\redis\version
  3. Create a folder for the db data (by default redis will store the files where the executables reside)
  4. Copy the redis.windows.conf and rename it as needed - this is a redis instance cfg; some settings worth considering:
    • dir - specifies the db files folder (by default redis will store the files where the executables reside)
    • port - the default one is 6379
    • maxmemory / maxheap - from the cfg itself: the maxheap flag controls the maximum size of this memory mapped file, as well as the total usable space for the Redis heap. Running Redis without either maxheap or maxmemory will result in a memory mapped file being created that is equal to the size of physical memory; The Redis heap must be larger than the value specified by the maxmemory
  5. Create a service using the redis-server.exe (the service will be configured as autostart and will be launched as "NT AUTHORITY\NetworkService"):
  6. redis-server --service-install c:\redis\data\mydb\redis.conf --service-name testRedisService

This is pretty much it. The service should be properly configured and just needs to be started!

GeoServer production environment on Windows Server with IIS and Apache

In this post Andre explained how to set up a dev environment on win7 so Geoserver can coexist with IIS 7.5.

When it comes to deploying Geoserver to a machine that is exposed to the Internet things may go a bit more difficult. It actually took me a while to figure out how to make all the pieces work together so if you are in a similar situation - trying to run Geoserver on Windows Server - keep on reading.

We have decided to create a subdomain that will take all the traffic targeted at our Geoserver. Apart from looking unusual it certainly makes life easier when setting up rewrite rules for IIS. But let me explain it step by step.

 

1. Installing Apache Tomcat

I had some problems with Tomcat 7.0.6 and Geoserver 2.1RC1 (betas failed too) but luckily Tomcat 6.0.3 was ok. When installing the server it is worth to choose the service startup option so the Tomcat service starts automatically with WIndows. If you are running win x64 make sure you choose x64 JRE as well.

 

2. Making Tomcat pick a proper host name

By default Tomcat binds itself to the port 8080 an I have let it do so in this case as well. The problem though is that geoserver will pick the localhost:8080 for the capabilities documents and also for the example pages generated by the layer preview links. This is not a problem when working with geoserver locally but when accesssing it from another machine, the urls have to be resolved properly.

To make Tomcat know how of the host its pages are requested from I had to edit the tomcat/conf/server.xml file. By default the Connector tag does not have the proxyPort and proxyName properties so I needed to add them. proxyPort is the actual port the resource is requested through (the default is 80 and IIS listens at this port of course) and proxyName specifies the host name that will be used. Adding these two properties to the Connector section makes the geoserver report proxyName:proxyPort as the host name instead of localhost:8080 (in my case geoserver now uses http://geoserver.cartoninjas.net:80).

 

3. Deploying Geoserver

Since I have fixed the server.xml file I can start the Tomcat service and navigate to localhost:8080. After logging in I deployed Geoserver by using the war file available at the download page:

 

4. Setting a rewrite rule in IIS

Having installed Geoserver I was ready to route all the trafic to geoserver.cartoninjas.net to my Tomcat. I had the subdomain already created so there had to be a rewrite rule set appropriately. In my case I needed to have all the incoming traffic routed to localhost:8080:

 

5. Testing the geoserver from a remote computer

The final step was to test if everything worked ok. I have navigated to geoserver.cartoninjas.net/geoserver and tested the tiger ny layer group. It looked like everything was ok now ;-)

 

Why bothering with all the steps above? Initially I had the rewriting set in IIS and I could connect to geoserver through my subdomain. The actual problem though was with the capabilities documents but also with some of the automatically generated preview pages. Of course when knowing the actual resource location it was already possible to connect to the services exposed by geoserver. But clients trying to connect to the geoserver services automatically without knowing there was a problem with the host resolution would obviously fail. A dirty solution was to make the client application replace localhost:8080 with the actual host name and we had it working for quite a while. Luckily there was a bit more elegant way of fixng things and now we have our geoserver instance work as expected. I found that little proxy thing here.