# Administration ## Requirements ### Hardware - Ubuntu Server with - 2 CPU cores - 2 GB RAM - 50 GB SSD - Windows Server with - 4 CPU cores - 4 GB RAM - 100 GB SSD ### Software - DotNet Core 10.0 Hosting Bundle (Windows) - DotNet Core 10.0 Runtime (Ubuntu) - LDAP server (Active Directory or OpenLDAP) ## Hosting setup - Windows: [Read the Microsoft documentation regarding hosting .NET apps](https://learn.microsoft.com/en-us/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-10.0&tabs=visual-studio) - Ubuntu: - Install DotNet Core 10.0 runtime via package manager: `sudo apt install dotnet10 dotnet-runtime-10.0` - Set up nginx to point to the application: - `sudo apt install nginx` - Configure nginx: [example_nginx.conf](Resources/example_nginx.conf) - Restart nginx: `sudo systemctl restart nginx` - If you don't already have an SSL certificate: - Install certbot: `sudo apt install certbot -y` - Acquire a certificate: `sudo certbot certonly -d mydomain.com -d www.mydomain.com` - Set up a cronjob for renewal: - `sudo crontab -e` - Append the following line: `0 0 * * * /usr/bin/certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx nginx"` - Save with ctrl + s and exit with ctrl + x - Get the application by either: - Downloading the release from the releases section of the repository and unpacking it to `/var/www/HAM` - Building the application from source - Clone the repository on the target server (e.g. your home directory) - Enter the `src` folder - Build the application: - `dotnet build` - `dotnet publish -c Release` - Copy the output to the destination: `sudo cp bin/Release/net10.0 /var/www/HAM` - Configure the application as specified in [Configuration](#configuration) - Set up the Sytemd service - Create the service file: `sudo nano /etc/systemd/system/HAM.service` - Set up the contents of the service file. E.g.: [example_systemd.service](Resources/example_systemd.service) - Reload the systemd daemon: `sudo systemctl daemon-reload` - Enable and start the service: `sudo systemctl enable HAM.service --now` ## Configuration ### Environments There are three files named "appsettings" that end in ".json". These are the configuration files. The `appsettings.json` file is the generic one, and it specifies information that applies to all environments. The files named `appsettings.*.json` contain configuration specific to that environment. Everything that is put there overrides the `appsettings.json` configuration. ### Ldap This is where you put your LDAP configuration regarding connection and where the individual elements are located. - `Host`: The IP address of the LDAP server - `Port`: The port (usually 389) of the LDAP server - `UseSsl`: Whether to require SSL - `BindDn`: The username to authenticate with - `BindPassword`: The password to use to authenticate - `BaseDn`: The dn where everything is located under - `AssetsOu`: The ou under which the assets reside - `LocationsOu`: The ou under which the locations reside - `UsersOu`: The ou under which the users reside ### Other configuration For other configuration (like setting custom ports) consult the [Microsoft documentation](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-10.0)