1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

How to run Asp.Net Web Forms, MVC2 and MVC3 applications on FreeBSD

Discussion in 'Howtos and FAQs (Moderated)' started by vand777, Aug 17, 2011.

  1. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    1. Install Mono

    Code:
    # cd /usr/ports/lang/mono
    # make config-recursive
    # make install clean
    In order to test Mono installation, create a new file /tmp/test.cs:

    Code:
    using System;
     
    class Program {
        static void Main ()
        {
            Type t = Type.GetType ("Mono.Runtime");
            if (t != null)
                 Console.WriteLine ("You are running with the Mono VM");
            else
                 Console.WriteLine ("You are running something else");
        }
    }
    Then compile it and run:

    Code:
    # cd /tmp
    # mcs test.cs
    # mono test.exe
    You are running with the Mono VM
    2. Install Nginx web server
    Code:
    # cd /usr/ports/www/nginx
    # make config-recursive
    # make install clean
    # echo "nginx_enable=YES" >> /etc/rc.conf
     
  2. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    3. Install Xsp

    Code:
    # cd /usr/ports/www/xsp
    # make config-recursive
    # make install clean
    4. Configure Nginx

    Edit /usr/local/etc/nginx/nginx.conf file:

    Code:
    ...
    user  [color="Red"]asp[/color];
    worker_processes  [color="Red"]4;  # should be equal to number of cores on your server[/color]
    ...
     
            [color="Red"]location / {
                fastcgi_pass   192.168.1.100:9000; # change this IP to the IP and port of your fastcgi-mono-server (see below)
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }[/color]
     
            [color="Red"]#[/color]location / {
            [color="Red"]#[/color]    root   /usr/local/www/nginx;
            [color="Red"]#[/color]    index  index.html index.htm;
            [color="Red"]#[/color]}
    ...
    Create a new user asp (shell nologin, random password):

    Code:
    # adduser
    ...
    # mkdir /home/asp/www
    # chown asp:asp /home/asp/www/
    # chmod 555 /home/asp/www/
    # touch /var/log/mono-server4.log
    # chown asp:asp /var/log/mono-server4.log
     
  3. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    5. Configure startup scripts

    Create a new file /home/asp/fcgi:

    Code:
    fastcgi-mono-server4 /socket=tcp:[color="Red"]9000[/color] /address=[color="Red"]192.168.1.100[/color] /applications=/:. /root=/home/asp/www /logfile=/var/log/mono-server4.log &
    Adjust its permissions:

    Code:
    # chmod ug+x /home/asp/fcgi
    Create a startup script for fastcgi-mono-server4 in the /home/asp/fcgi_startup file:

    Code:
    #!/usr/local/bin/bash
     
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:$HOME/bin:; export PATH
    PID=`/bin/ps waux | /usr/bin/grep mono | /usr/bin/grep -v grep | /usr/bin/awk '{ print $2 }'`
     
    if  ps waux | grep mono | grep -v grep > /dev/null
     then
            echo "fastcgi-mono-server4 seems to run on PID $PID"
            exit
    else
        echo "fastcgi-mono-server4 is not running. Starting it"
        /home/asp/fcgi
    fi
    Make it executable:

    Code:
    # chmod ug+x /home/asp/fcgi_startup
    Now add the job to crontab:

    Code:
    # crontab -uasp -e
    And then add the following line to crontab file:

    Code:
    * * * * * /home/asp/fcgi_startup > /home/asp/mono_laststate
    Start Nginx:

    Code:
    # /usr/local/etc/rc.d/nginx start
    Do not forget to adjust firewall rules.
     
  4. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Test it

    Create a new file /home/asp/www/hello.aspx:

    Code:
    <html>
    <body>
    <p>It works! <% =Environment.OSVersion.ToString() %></p>
    </body>
    </html>
    And then request it at http://your.ip.address/hello.aspx. It should give you the version of your operating system. It displays on my system:

    Code:
    It works! Unix 8.2.2.0
     
  5. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Asp.Net Web Forms and MVC2 applications

    Asp.Net Web Forms and MVC2 applications should work automatically under this setup (Mono 2.10.2). Just copy files into the /home/asp/www/ folder.

    Asp.Net MVC3 applications


    In order to make Asp.Net MVC3 applications working under Mono 2.10.2, you have to copy additional files from your Windows development workstation into your project's bin directory (these files will finally end up in /home/asp/www/bin folder):
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\NuGet.Core.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Helpers.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Helpers.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.Razor.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Administration.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Deployment.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Deployment.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.Data.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.Data.xml
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.WebData.dll
    • c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\WebMatrix.WebData.xml

    Also you have to delete EntityFramework.xml and EntityFramework.dll from /home/asp/www/bin folder after you have copied your project there.

    Please read the section "ASP.NET MVC3 Support" on Mono 2.10 Release Notes for the details.
     
  6. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Should you have any problems when building or running mono, please do not forget to read /usr/ports/lang/mono/pkg-message message. Maybe you will find the solution to your problem.

    For example, this part might be important:
    Code:
    * If you are in a jailed environment, ensure System V IPC are enabled.
      You can rely on the security.jail.sysvipc_allowed  sysctl to check
      this status.  The following enables this feature on the host system:
        # echo "jail_sysvipc_allow=\"YES\"" >> /etc/rc.conf
    
    The above tutorial was tested in jail on FreeBSD 8.2p2, Mono 2.10.2.
     
  7. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Reserved
     
  8. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Reserved2
     
  9. Claud

    Claud New Member

    Messages:
    10
    Likes Received:
    0
    Hello,
    Excelent tutorial thanks,
    First, i don`t have bash as a default shell script fomr my user and it seems that the startup script needs some adjustemts or it will return bash pid olso , so the script that worked for me was:
    Code:
    #!/usr/local/bin/bash
     
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:$HOME/bin:; export PATH
    PID=`/bin/ps waux | /usr/bin/grep mono | /usr/bin/grep -v grep | /usr/bin/grep -v /bin/bash | /usr/bin/awk '{ print $2 }'`
     
    if  ps waux | grep mono | grep -v grep | grep -v /bin/bash > /dev/null
     then
            echo "fastcgi-mono-server4 seems to run on PID $PID"
            exit
    else
        echo "fastcgi-mono-server4 is not running. Starting it"
        /home/asp/fcgi
    fi
    
    Hope someone finds it useful.
     
  10. vand777

    vand777 New Member

    Messages:
    292
    Likes Received:
    0
    Thank you, Claud!
     
  11. wblock@

    wblock@ Administrator Staff Member Administrator Moderator Developer

    Messages:
    11,209
    Likes Received:
    15
    should be replaceable with

    Code:
    PID=`/usr/bin/pgrep mono`