Skip to content

Commit 184839f

Browse files
committed
test
1 parent f41c583 commit 184839f

2 files changed

Lines changed: 329 additions & 0 deletions

File tree

ct/nginxproxymanager.sh

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
#!/usr/bin/env bash
2+
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func)
3+
# Copyright (c) 2021-2025 tteck
4+
# Author: tteck (tteckster)
5+
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
6+
# Source: https://nginxproxymanager.com/
7+
8+
APP="Nginx Proxy Manager"
9+
var_tags="${var_tags:-proxy}"
10+
var_cpu="${var_cpu:-2}"
11+
var_ram="${var_ram:-1024}"
12+
var_disk="${var_disk:-4}"
13+
var_os="${var_os:-debian}"
14+
var_version="${var_version:-12}"
15+
var_unprivileged="${var_unprivileged:-1}"
16+
17+
header_info "$APP"
18+
variables
19+
color
20+
catch_errors
21+
22+
function update_script() {
23+
header_info
24+
check_container_storage
25+
check_container_resources
26+
if [[ ! -f /lib/systemd/system/npm.service ]]; then
27+
msg_error "No ${APP} Installation Found!"
28+
exit
29+
fi
30+
if ! command -v pnpm &>/dev/null; then
31+
msg_info "Installing pnpm"
32+
#export NODE_OPTIONS=--openssl-legacy-provider
33+
$STD npm install -g pnpm@8.15
34+
msg_ok "Installed pnpm"
35+
fi
36+
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
37+
grep "tag_name" |
38+
awk '{print substr($2, 3, length($2)-4) }')
39+
msg_info "Stopping Services"
40+
systemctl stop openresty
41+
systemctl stop npm
42+
msg_ok "Stopped Services"
43+
44+
msg_info "Cleaning Old Files"
45+
rm -rf /app \
46+
/var/www/html \
47+
/etc/nginx \
48+
/var/log/nginx \
49+
/var/lib/nginx \
50+
"$STD" /var/cache/nginx
51+
msg_ok "Cleaned Old Files"
52+
53+
msg_info "Downloading NPM v${RELEASE}"
54+
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
55+
cd nginx-proxy-manager-"${RELEASE}"
56+
msg_ok "Downloaded NPM v${RELEASE}"
57+
58+
msg_info "Setting up Enviroment"
59+
ln -sf /usr/bin/python3 /usr/bin/python
60+
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
61+
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
62+
ln -sf /usr/local/openresty/nginx/ /etc/nginx
63+
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
64+
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
65+
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
66+
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
67+
for NGINX_CONF in $NGINX_CONFS; do
68+
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
69+
done
70+
mkdir -p /var/www/html /etc/nginx/logs
71+
cp -r docker/rootfs/var/www/html/* /var/www/html/
72+
cp -r docker/rootfs/etc/nginx/* /etc/nginx/
73+
cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
74+
cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
75+
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
76+
rm -f /etc/nginx/conf.d/dev.conf
77+
mkdir -p /tmp/nginx/body \
78+
/run/nginx \
79+
/data/nginx \
80+
/data/custom_ssl \
81+
/data/logs \
82+
/data/access \
83+
/data/nginx/default_host \
84+
/data/nginx/default_www \
85+
/data/nginx/proxy_host \
86+
/data/nginx/redirection_host \
87+
/data/nginx/stream \
88+
/data/nginx/dead_host \
89+
/data/nginx/temp \
90+
/var/lib/nginx/cache/public \
91+
/var/lib/nginx/cache/private \
92+
/var/cache/nginx/proxy_temp
93+
chmod -R 777 /var/cache/nginx
94+
chown root /tmp/nginx
95+
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
96+
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
97+
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
98+
fi
99+
mkdir -p /app/global /app/frontend/images
100+
cp -r backend/* /app
101+
cp -r global/* /app/global
102+
$STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
103+
msg_ok "Setup Enviroment"
104+
105+
msg_info "Building Frontend"
106+
cd ./frontend
107+
$STD pnpm install
108+
$STD pnpm upgrade
109+
$STD pnpm run build
110+
cp -r dist/* /app/frontend
111+
cp -r app-images/* /app/frontend/images
112+
msg_ok "Built Frontend"
113+
114+
msg_info "Initializing Backend"
115+
$STD rm -rf /app/config/default.json
116+
if [ ! -f /app/config/production.json ]; then
117+
cat <<'EOF' >/app/config/production.json
118+
{
119+
"database": {
120+
"engine": "knex-native",
121+
"knex": {
122+
"client": "sqlite3",
123+
"connection": {
124+
"filename": "/data/database.sqlite"
125+
}
126+
}
127+
}
128+
}
129+
EOF
130+
fi
131+
cd /app
132+
$STD pnpm install
133+
msg_ok "Initialized Backend"
134+
135+
msg_info "Starting Services"
136+
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
137+
sed -i 's/su npm npm/su root root/g' /etc/logrotate.d/nginx-proxy-manager
138+
sed -i 's/include-system-site-packages = false/include-system-site-packages = true/g' /opt/certbot/pyvenv.cfg
139+
systemctl enable -q --now openresty
140+
systemctl enable -q --now npm
141+
msg_ok "Started Services"
142+
143+
msg_info "Cleaning up"
144+
rm -rf ~/nginx-proxy-manager-*
145+
msg_ok "Cleaned"
146+
147+
msg_ok "Updated Successfully"
148+
exit
149+
}
150+
151+
start
152+
build_container
153+
description
154+
155+
msg_ok "Completed Successfully!\n"
156+
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
157+
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
158+
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:81${CL}"
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
#!/usr/bin/env bash
2+
3+
# Copyright (c) 2021-2025 tteck
4+
# Author: tteck (tteckster)
5+
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
6+
# Source: https://nginxproxymanager.com/
7+
8+
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
9+
color
10+
verb_ip6
11+
catch_errors
12+
setting_up_container
13+
network_check
14+
update_os
15+
16+
msg_info "Installing Dependencies"
17+
$STD apt-get update
18+
$STD apt-get -y install \
19+
ca-certificates \
20+
apache2-utils \
21+
logrotate \
22+
build-essential \
23+
jq \
24+
git
25+
msg_ok "Installed Dependencies"
26+
27+
NODE_VERSION="20" NODE_MODULE="yarn" NODE_OPTIONS="--openssl-legacy-provider" setup_nodejs
28+
PYTHON_VERSION="3.12" setup_uv
29+
fetch_and_deploy_gh_release "nginxproxymanager" "NginxProxyManager/nginx-proxy-manager" "tarball" "latest" "/tmp/nginxproxymanager"
30+
31+
msg_info "Installing Python Dependencies"
32+
$STD apt-get install -y \
33+
python3 \
34+
python3-dev \
35+
python3-venv
36+
msg_ok "Installed Python Dependencies"
37+
38+
msg_info "Setting up Certbot Environment"
39+
$STD uv venv /opt/certbot --python "$PYTHON_VERSION"
40+
/opt/certbot/bin/uv pip install \
41+
certbot \
42+
certbot-dns-cloudflare \
43+
certbot-dns-multi
44+
msg_ok "Certbot Environment Ready"
45+
46+
msg_info "Installing Openresty"
47+
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
48+
curl -fsSL "https://openresty.org/package/pubkey.gpg" | gpg --dearmor -o /etc/apt/trusted.gpg.d/openresty-archive-keyring.gpg
49+
echo -e "deb http://openresty.org/package/debian $VERSION openresty" >/etc/apt/sources.list.d/openresty.list
50+
$STD apt-get update
51+
$STD apt-get -y install openresty
52+
msg_ok "Installed Openresty"
53+
54+
msg_info "Setting up Environment"
55+
ln -sf /usr/bin/python3 /usr/bin/python
56+
ln -sf /opt/certbot/bin/certbot /usr/bin/certbot
57+
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
58+
ln -sf /usr/local/openresty/nginx/ /etc/nginx
59+
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
60+
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
61+
for NGINX_CONF in $NGINX_CONFS; do
62+
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
63+
done
64+
65+
mkdir -p /var/www/html /etc/nginx/logs
66+
cd /tmp/nginxproxymanager
67+
cp -r docker/rootfs/var/www/html/* /var/www/html/
68+
cp -r docker/rootfs/etc/nginx/* /etc/nginx/
69+
cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
70+
cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
71+
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
72+
rm -f /etc/nginx/conf.d/dev.conf
73+
74+
mkdir -p /tmp/nginx/body \
75+
/run/nginx \
76+
/data/nginx \
77+
/data/custom_ssl \
78+
/data/logs \
79+
/data/access \
80+
/data/nginx/default_host \
81+
/data/nginx/default_www \
82+
/data/nginx/proxy_host \
83+
/data/nginx/redirection_host \
84+
/data/nginx/stream \
85+
/data/nginx/dead_host \
86+
/data/nginx/temp \
87+
/var/lib/nginx/cache/public \
88+
/var/lib/nginx/cache/private \
89+
/var/cache/nginx/proxy_temp
90+
91+
chmod -R 777 /var/cache/nginx
92+
chown root /tmp/nginx
93+
94+
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
95+
96+
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
97+
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem &>/dev/null
98+
fi
99+
100+
mkdir -p /app/global /app/frontend/images
101+
cd /tmp/nginxproxymanager
102+
cp -r backend/* /app
103+
cp -r global/* /app/global
104+
msg_ok "Set up Environment"
105+
106+
msg_info "Building Frontend"
107+
cd /tmp/nginxproxymanager/frontend
108+
$STD yarn install --frozen-lockfile
109+
$STD yarn build
110+
cp -r dist/* /app/frontend
111+
cp -r app-images/* /app/frontend/images
112+
msg_ok "Built Frontend"
113+
114+
msg_info "Initializing Backend"
115+
rm -rf /app/config/default.json
116+
if [ ! -f /app/config/production.json ]; then
117+
cat <<'EOF' >/app/config/production.json
118+
{
119+
"database": {
120+
"engine": "knex-native",
121+
"knex": {
122+
"client": "sqlite3",
123+
"connection": {
124+
"filename": "/data/database.sqlite"
125+
}
126+
}
127+
}
128+
}
129+
EOF
130+
fi
131+
cd /app
132+
$STD yarn install --production
133+
msg_ok "Initialized Backend"
134+
135+
msg_info "Creating Service"
136+
cat <<'EOF' >/lib/systemd/system/npm.service
137+
[Unit]
138+
Description=Nginx Proxy Manager
139+
After=network.target
140+
Wants=openresty.service
141+
142+
[Service]
143+
Type=simple
144+
Environment=NODE_ENV=production
145+
Environment=NODE_OPTIONS=--openssl-legacy-provider
146+
ExecStartPre=-mkdir -p /tmp/nginx/body /data/letsencrypt-acme-challenge
147+
ExecStart=/usr/bin/node index.js --abort_on_uncaught_exception --max_old_space_size=1024
148+
WorkingDirectory=/app
149+
Restart=on-failure
150+
151+
[Install]
152+
WantedBy=multi-user.target
153+
EOF
154+
msg_ok "Created Service"
155+
156+
motd_ssh
157+
customize
158+
159+
msg_info "Starting Services"
160+
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
161+
sed -r -i 's/^([[:space:]]*)su npm npm/\1#su npm npm/g;' /etc/logrotate.d/nginx-proxy-manager
162+
systemctl enable -q --now openresty
163+
systemctl enable -q --now npm
164+
msg_ok "Started Services"
165+
166+
msg_info "Cleaning up"
167+
rm -rf /tmp/*
168+
systemctl restart openresty
169+
$STD apt-get -y autoremove
170+
$STD apt-get -y autoclean
171+
msg_ok "Cleaned"

0 commit comments

Comments
 (0)