Mono bei Hostsharing

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Mono [1] ist ein Open Source .NET Framework und ermöglicht es, .NET Anwendungen in C# unter Linux auszuführen.

Mono bei Hostsharing

Mono wird als Debian Paket bereitgestellt, siehe https://packages.debian.org/de/bookworm/mono-complete

Momentan ist Mono nicht zentral auf den Hostsharing Servern installiert, damit nicht unnötig Platz belegt wird.

Wir können die Mono Pakete pro Managed Server installieren. Bitte eine E-Mail an die Hostmaster.

Mono Anwendung mit xsp debuggen

Man kann eine Mono Anwendung direkt mit xsp ausführen, ohne den Umweg über den Apache. Das kann beim Debuggen nützlich sein.

Beispiel:

index.aspx

<%@ Page Language="C#" %>
<html xmlns="www.w3.org/1999/xhtml">
<%@ Import Namespace="System" %>
<head runat="server">
    <title></title>
</head>
<body>
    <div>
        <%
            Response.Write( "Hello World<br/>");
            Response.Write( String.Format("Current Time is {0}<br/>", DateTime.Now));
        %>
    </div>
</body>

Um Kompilierfehler im Browser zu sehen, diese Datei anlegen:

web.config

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

Eigene IP Adresse herausfinden:

ping -4 xyz00.hostsharing.net

Nun kann der Server mit dieser IP Adresse gestartet werden:

xsp4 --port=8080 --address=aa.bbb.cc.ddd

Die Seite ist nun über http://xyz00.hostsharing.net:8080 erreichbar.

Mono und fastcgi Server im Produktiveinsatz

Für den produktiven Einsatz benutzt man den fastcgi Server.

Dazu muss man entsprechend RAM für den Webspace buchen, und beim Service um einen freien Port bitten. Wir benutzen im Beispiel den Port 4001.

.config/systemd/user/mono.service:

[Unit]
Description=OpenPetra
After=network.target

[Service]
Type=simple
Restart=on-abort
WorkingDirectory=%h/aspnetapp

ExecStart=/usr/bin/fastcgi-mono-server4 /socket=tcp:127.0.0.1:4001 /applications=/:%h/aspnetapp /appconfigfile=%h/etc/common.config --logfile=%h/var/log/monoserver.log --loglevels=Standard

StandardOutput=append:%h/var/log/mono.log
StandardError=inherit

[Install]
WantedBy=default.target

etc/common.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <sessionState
      mode="InProc"
      timeout="30" /> <!-- timeout in minutes -->
    <customErrors mode="Off"/>
    <compilation tempDirectory="/home/pacs/xyz00/users/meinuser/var/tmp" debug="true" strict="false" explicit="true"/>
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
           <jsonSerialization maxJsonLength="8000000" />
      </webServices>
    </scripting>
   </system.web.extensions>
</configuration>

Es sollten die entsprechenden leeren Verzeichnisse erstellt werden:

mkdir -p $HOME/var/log
mkdir -p $HOME/var/run

Service aktivieren und starten:

$ systemctl --user enable mono.service --now

Nun muss noch dem Apache mitgeteilt werden, wie er auf den fastcgi Server zugreift:

doms/meine-domain.de/subs-ssl/www/.htaccess

DirectoryIndex index.aspx
RewriteEngine on
RewriteBase /
RewriteRule ^(.*) fcgi://127.0.0.1:4001/$1 [proxy,last]

Dann sollte unter https://www.meinedomain.de/ die Mono Applikation erreichbar sein!