mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	New script: Dotnet ASP.NET Web Server (#1501)
* Added files * Update dotnetaspwebapi.json * Updated build.func reference back to the original repos one * Update dotnetaspwebapi.json for ubuntu 24.04 * Update dotnetaspwebapi.sh for ubuntu 24.04 * Update dotnetaspwebapi-install.sh for ubuntu 24.04 * Update install/dotnetaspwebapi-install.sh Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com> * Updated for review * Fixed FTP authentication * Update dotnetaspwebapi-install.sh Changed the service name to a static one --------- Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
This commit is contained in:
		
							
								
								
									
										49
									
								
								ct/dotnetaspwebapi.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								ct/dotnetaspwebapi.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Kristian Skov
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Dotnet ASP Web API"
 | 
			
		||||
var_tags="web"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_os="ubuntu"
 | 
			
		||||
var_version="24.04"
 | 
			
		||||
var_unprivileged="0"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/www ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    apt-get update &>/dev/null
 | 
			
		||||
    apt-get -y upgrade &>/dev/null
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:80${CL}"
 | 
			
		||||
							
								
								
									
										110
									
								
								install/dotnetaspwebapi-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								install/dotnetaspwebapi-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Kristian Skov
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  ssh \
 | 
			
		||||
  software-properties-common
 | 
			
		||||
$STD add-apt-repository -y ppa:dotnet/backports
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  dotnet-sdk-9.0 \
 | 
			
		||||
  vsftpd \
 | 
			
		||||
  nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure Application"
 | 
			
		||||
var_project_name="default"
 | 
			
		||||
read -r -p "Type the assembly name of the project: " var_project_name
 | 
			
		||||
echo "Target assembly: '${var_project_name}'"
 | 
			
		||||
msg_ok "Application Configured"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up FTP Server"
 | 
			
		||||
useradd ftpuser
 | 
			
		||||
FTP_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
usermod --password $(echo ${FTP_PASS} | openssl passwd -1 -stdin) ftpuser
 | 
			
		||||
mkdir -p /var/www/html
 | 
			
		||||
usermod -d /var/www/html ftp
 | 
			
		||||
usermod -d /var/www/html ftpuser 
 | 
			
		||||
chown ftpuser /var/www/html
 | 
			
		||||
 | 
			
		||||
sed -i "s|#write_enable=YES|write_enable=YES|g" /etc/vsftpd.conf
 | 
			
		||||
sed -i "s|#chroot_local_user=YES|chroot_local_user=NO|g" /etc/vsftpd.conf
 | 
			
		||||
 | 
			
		||||
systemctl restart -q vsftpd.service
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    echo "FTP-Credentials"
 | 
			
		||||
    echo "Username: ftpuser"
 | 
			
		||||
    echo "Password: $FTP_PASS"
 | 
			
		||||
} >> ~/ftp.creds
 | 
			
		||||
 | 
			
		||||
msg_ok "FTP server setup completed"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Nginx Server"
 | 
			
		||||
rm -f /var/www/html/index.nginx-debian.html
 | 
			
		||||
 | 
			
		||||
sed "s/\$var_project_name/$var_project_name/g" >myfile <<'EOF' >/etc/nginx/sites-available/default
 | 
			
		||||
map $http_connection $connection_upgrade {
 | 
			
		||||
  "~*Upgrade" $http_connection;
 | 
			
		||||
  default keep-alive;
 | 
			
		||||
}
 | 
			
		||||
server {
 | 
			
		||||
  listen        80;
 | 
			
		||||
  server_name   $var_project_name.com *.$var_project_name.com;
 | 
			
		||||
  location / {
 | 
			
		||||
      proxy_pass         http://127.0.0.1:5000/;
 | 
			
		||||
      proxy_http_version 1.1;
 | 
			
		||||
      proxy_set_header   Upgrade $http_upgrade;
 | 
			
		||||
      proxy_set_header   Connection $connection_upgrade;
 | 
			
		||||
      proxy_set_header   Host $host;
 | 
			
		||||
      proxy_cache_bypass $http_upgrade;
 | 
			
		||||
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 | 
			
		||||
      proxy_set_header   X-Forwarded-Proto $scheme;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
systemctl reload nginx
 | 
			
		||||
msg_ok "Nginx Server Created"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/kestrel-aspnetapi.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=.NET Web API App running on Linux
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/var/www/html
 | 
			
		||||
ExecStart=/usr/bin/dotnet /var/www/html/$var_project_name.dll
 | 
			
		||||
Restart=always
 | 
			
		||||
# Restart service after 10 seconds if the dotnet service crashes:
 | 
			
		||||
RestartSec=10
 | 
			
		||||
KillSignal=SIGINT
 | 
			
		||||
SyslogIdentifier=dotnet-${var_project_name}
 | 
			
		||||
User=root
 | 
			
		||||
Environment=ASPNETCORE_ENVIRONMENT=Production
 | 
			
		||||
Environment=DOTNET_NOLOGO=true
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now kestrel-aspnetapi.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										39
									
								
								json/dotnetaspwebapi.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/dotnetaspwebapi.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
   "name":"Dotnet ASP Web API",
 | 
			
		||||
   "slug":"dotnetaspwebapi",
 | 
			
		||||
   "categories":[
 | 
			
		||||
      0
 | 
			
		||||
   ],
 | 
			
		||||
   "date_created":"2025-01-15",
 | 
			
		||||
   "type":"ct",
 | 
			
		||||
   "updateable":true,
 | 
			
		||||
   "privileged":true,
 | 
			
		||||
   "interface_port":80,
 | 
			
		||||
   "documentation":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu",
 | 
			
		||||
   "website":"https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-9.0&tabs=linux-ubuntu",
 | 
			
		||||
   "logo":"https://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/Microsoft_.NET_logo.svg/456px-Microsoft_.NET_logo.svg.png",
 | 
			
		||||
   "description":"Automatically setup a ASP.NET server up, as well as a FTP server so you can publish to this container from Visual Studio.",
 | 
			
		||||
   "install_methods":[
 | 
			
		||||
      {
 | 
			
		||||
         "type":"default",
 | 
			
		||||
         "script":"ct/dotnetaspwebapi.sh",
 | 
			
		||||
         "resources":{
 | 
			
		||||
            "cpu":1,
 | 
			
		||||
            "ram":1024,
 | 
			
		||||
            "hdd":8,
 | 
			
		||||
            "os":"Ubuntu",
 | 
			
		||||
            "version":"24.04"
 | 
			
		||||
         }
 | 
			
		||||
      }
 | 
			
		||||
   ],
 | 
			
		||||
   "default_credentials":{
 | 
			
		||||
      "username":null,
 | 
			
		||||
      "password":null
 | 
			
		||||
   },
 | 
			
		||||
   "notes":[
 | 
			
		||||
      {
 | 
			
		||||
         "text":"FTP server credentials: `cat ~/ftp.creds`",
 | 
			
		||||
         "type":"info"
 | 
			
		||||
      }
 | 
			
		||||
   ]
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user