Mono bei Hostsharing
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!