mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-10-23 19:55:05 +00:00
Every interactive prompt takes a var_<app>_<name> override and treats a closed stdin like Enter (`|| true`), so an install keeps going after the console that started it is gone. Values the script cannot do without end with exit 64 and name the variable to set. Validation loops stop asking when nobody can answer instead of spinning on an empty read.
107 lines
2.9 KiB
Bash
107 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2021-2026 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
|
|
|
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
color
|
|
verb_ip6
|
|
catch_errors
|
|
setting_up_container
|
|
network_check
|
|
update_os
|
|
|
|
msg_info "Installing Dependencies"
|
|
apt_update_safe
|
|
$STD apt install -y \
|
|
ssh \
|
|
software-properties-common
|
|
|
|
$STD add-apt-repository -y ppa:dotnet/backports
|
|
$STD apt install -y \
|
|
dotnet-sdk-9.0 \
|
|
vsftpd \
|
|
nginx
|
|
msg_ok "Installed Dependencies"
|
|
|
|
var_project_name="${var_project_name:-}"
|
|
[[ -n "$var_project_name" ]] || read -r -p "${TAB3}Type the assembly name of the project: " var_project_name || true
|
|
[[ -n "$var_project_name" ]] || { msg_error "No assembly name given; set var_project_name or answer the prompt"; exit 64; }
|
|
|
|
msg_info "Setting up FTP Server"
|
|
useradd ftpuser
|
|
FTP_PASS=$(random_password 13)
|
|
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
|
|
|
|
cat <<EOF >~/ftp.creds
|
|
FTP-Credentials
|
|
Username: ftpuser
|
|
Password: $FTP_PASS
|
|
EOF
|
|
|
|
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
|
|
msg_ok "Created Service"
|
|
|
|
motd_ssh
|
|
customize
|
|
cleanup_lxc
|