Tag Archives: Linux

ASP.NET på mac og Linux

I denne guide vil jeg vise hvordan man kan udvikle ASP.NET på en mac og deploye koden på en Linux server der kører apache2.

For at få dette til at virke skal  mono og monodevelop installeres på mac’en og mono skal installeres på Linux serveren.

For at starte med mac’en hvor udviklingen skal foregå skal man hente og installere mono develop fra http://monodevelop.com/Download og installere denne.

Når dette er gjort er man klar til at få udviklet noget C# kode. Dette kan enten gøres ved at man åbner en eksisterende ASP.NET solution lavet i visual studio eller man starter en ny.

Media_httpblogmartins_kdfpc

Når man så har et projekt man er klar til at teste kan man gøre det ved at gå op i Kør og vælge kør.

Media_httpblogmartins_skpqy

Tip: Codecomplete kommer ikke automatisk frem, du skal show completion windows eller genvejstasten.

Monodevelop er ikke helt på højde med Visual Studio som IDE, men bliver hele tiden forbedret, som det er nu ser jeg kun tre ting jeg mangler:

-       En visuel designer.

-       Understøttelse af WPF og winforms.

-        Edit and continue i debuggeren.

Når du så har fået udviklet din solution og skal have installeret den på din linux server. Dette gøre forskelligt alt efter hvilken linux distribution du bruger, på en debian gøres det simpelt hen med sudo apt-get install libapache2-mod-mono hvilket vil installere og aktivere mono i din apache2.  På suse ligger modulet også i deres pakke manager.

Når det er gjort skal du have tilføjet din applikation til din sites availble fil Mine er sat op som Applications og ikke virtual hosts, da jeg ikke har været instand til at få mono til at køre som i en virtual host på min egen debian server.

Her følger min kommenterede opsætning (tt er både min namespace og det bibliotek løsningen ligger i):

Alias /tt “/stien/til/filerne/tt”

MonoServerPath tt “/usr/bin/mod-mono-server2″

#Hvis du af en eller anden underliggrund ønsker at køre .NET 1.1 kan #du i overstående ændre to tallet til et et tal:

# MonoServerPath tt “/usr/bin/mod-mono-server1″

MonoDebug tt true

#Jeg vil gerne se stacktraces når noget går galt.

MonoSetEnv tt MONO_IOMAP=all

#Mono skal stå for tilpasning til platformen, fx håndtereing af #backslashes i filadgang og store/små bokstaver.

MonoApplications tt “/tt: /stien/til/filerne/tt ”

<Location “/tt”>

Allow from all

Order allow,deny

MonoSetServerAlias Timetrack

SetHandler mono

SetOutputFilter DEFLATE

SetEnvIfNoCase Request_URI “.(?:gif|jpe?g|png)$” no-gzip dont-vary

</Location>

<IfModule mod_deflate.c>

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript

</IfModule>

Når man har gjort dette skal man bare reloade ens apache konfiguration og det vil køre J

PHP i html filer

Hvis du ønsker at køre php koder i filer der ender på .html (.htm) kan det godt lade sig gøre med en enkelt ændring i webstedets lokale apache konfiguration.

Du skal oprette en fil i roden af dit webbibliotek med navnet .htaccess og i den skal du tilføje følgende:

AddType application/x-httpd-php .htm
AddType application/x-httpd-php .html

Så vil apache fortolke .html filer med php kode i. Det kan man også bruge til sjove ting som at kalde sine php filer .asp og smide følgende i filen:

AddType application/x-httpd-php .asp
AddType application/x-httpd-php .aspx

Så vil det se ud som om din side køre asp. Du skal naturligvis have adgang til at bruge .htaccess filer for at dette virker.

Sådan sætter du Apache2 op til at køre SSL

Da jeg kører webmail på min server ville jeg gerne kører https således at dit brugernavn/adgangskode og indholdet af mine e-mails ikke bliver opsnappet af uvedkomne. Da hvordan man gjorde dette ikke var umiddelbart indlysende har jeg lavet denne guide så andre kan få glæde af mine erfaringer.

Først skal vi generere krypterings nøglerne. Dette gøres med følgende kommandoer (der, som alle andre kommandoer i denne guide skal køres som root):

Først skifter vi til apache2 ssl biblioteket (Behøves ikke, men gør det nemmere at få fat i certifikatet senere)
cd /etc/apache2/ssl/

Og derefter genereres certifikatet:
openssl genrsa -out ssl.key 1024 openssl req -new -key ssl.key -out ssl.csr

Når du kører den sidste kommando vil du blive spurgt om ting som dit navn osv. Den vigtige ting her er når du bliver spurgt om host. Den skal være præcis det samme som domænenavnet, ellers vil brugerne få en fejl.
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt -days 365 angiver hvor længe nøglen er gyldig. I dette tilfælde 365 dage.
Når den er genereret skal du fortælle apache at den skal bruge SSL med kommandoen a2enmod der loader nye moduler i apache ved at skrive (Dette skridt er kun relevant på debian baserede systemer (inklusiv ubuntu): a2enmod ssl

Når SSL nå er slået til skal vi også fortælle apache at den skal lytte på https porten der er 443.

Dette gøres ved at tilføje linien: Listen 443 Til filen: /etc/apache2/ports.conf

Nu skal du så opsætte din virtual host i apache. Den kunne for eksempel se ud som den følgende og skal som regel ligge i filen /etc/apache2/sites-available/ default:

<VirtualHost webmail.martinschultz.dk:443>
DocumentRoot /stien/til/din-webmail ServerName webmail.martinschultz.dk
<Directory “/stien/til/din-webmail “> allow from all Options +Indexes </Directory>
SSLEngine on SSLProtocol +SSLv2 +SSLv3
SSLCertificateFile /etc/apache2/ms.dk.crt
SSLCertificateKeyFile /etc/apache2/ms.dk.key
ServerAlias webmail.martinschultz.dk
ErrorLog  /stien/til/din-webmail/webmail.log
LogLevel notice
Options FollowSymLinks Includes
Includes NOEXEC SymLinksIfOwnerMatch
</VirtualHost>

Det vigtige i denne fil er at adressen i VitualHost bliver efterfulgt af :443 og sll bliver slået til og peget hen på certifikatet hvilket sker med:
SSLEngine on SSLProtocol +SSLv2 +SSLv3
SSLCertificateFile /etc/apache2/ms.dk.crt
SSLCertificateKeyFile /etc/apache2/ms.dk.key