Skip to content

Commit 3cadc10

Browse files
Added support for NGINX Instance Manager 2.10.1 and App Delivery Manager 4.0.0 (#99)
* Added API Connectivity Manager 1.5.0 support * Ownership fix * Startup script fix * NGINX App Protect WAF updates * Tested with NGINX Instance Manager 2.9.1 * Added docker-compose support * Tested with NGINX Instance Manager 2.10.0 and Security Monitoring 1.4.0 * Tested with NGINX Instance Manager 2.10.0 and API Connectivity Manager 1.5.0 * Tested with API Connectivity Manager 1.6.0 * Tested with API Connectivity Manager 1.6.0 * README updated * Added support for NGINX Instance Manager 2.10.1 and App Delivery Manager 4.0.0
1 parent 3943b23 commit 3cadc10

File tree

7 files changed

+211
-14
lines changed

7 files changed

+211
-14
lines changed

nginx-agent-docker/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ This repository can be used to build a docker image with NGINX Plus and NGINX In
88

99
This repository has been tested with NGINX agent for:
1010

11-
- NGINX Instance Manager 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.10.0
11+
- NGINX Instance Manager 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.10.0, 2.10.1
1212
- API Connectivity Manager 1.4.0, 1.5.0, 1.6.0
1313
- NGINX App Protect WAF 4.100.1+
1414

nginx-agent-docker/container/start.sh

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@
33
nginx
44
sleep 2
55

6+
# NGINX Agent version detection, change in behaviour in v2.24.0+
7+
AGENT_VERSION=`nginx-agent -v|awk '{print $3}'`
8+
AGENT_VERSION_MAJOR=`echo $AGENT_VERSION | awk -F\. '{print $1}' | sed 's/v//'`
9+
AGENT_VERSION_MINOR=`echo $AGENT_VERSION | awk -F\. '{print $2}'`
10+
11+
echo "=> NGINX Agent version $AGENT_VERSION"
12+
13+
OLD_AGENT=false
14+
if ([ $AGENT_VERSION_MAJOR -le 2 ] && [ $AGENT_VERSION_MINOR -lt 24 ])
15+
then
16+
echo "=> Pre-v2.24 NGINX Agent detected"
17+
OLD_AGENT=true
18+
fi
19+
620
PARM="--server-grpcport $NIM_GRPC_PORT --server-host $NIM_HOST"
721

822
if [[ ! -z "$NIM_INSTANCEGROUP" ]]; then
@@ -13,9 +27,32 @@ if [[ ! -z "$NIM_TAGS" ]]; then
1327
PARM="${PARM} --tags $NIM_TAGS"
1428
fi
1529

16-
1730
if [[ "$NAP_WAF" == "true" ]]; then
18-
PARM="${PARM} --nginx-app-protect-report-interval 15s --nap-monitoring-collector-buffer-size 50000 --nap-monitoring-processor-buffer-size 50000 --nap-monitoring-syslog-ip 127.0.0.1 --nap-monitoring-syslog-port 514"
31+
if [ $OLD_AGENT == "true" ]
32+
then
33+
PARM="${PARM} --nginx-app-protect-report-interval 15s --nap-monitoring-collector-buffer-size 50000 --nap-monitoring-processor-buffer-size 50000 --nap-monitoring-syslog-ip 127.0.0.1 --nap-monitoring-syslog-port 514"
34+
else
35+
cat - << __EOT__ >> /etc/nginx-agent/nginx-agent.conf
36+
37+
# Enable NAP and Advanced Metrics
38+
extensions:
39+
- advanced-metrics
40+
- nginx-app-protect
41+
- nap-monitoring
42+
43+
# NGINX App Protect Monitoring config
44+
nap_monitoring:
45+
# Buffer size for collector. Will contain log lines and parsed log lines
46+
collector_buffer_size: 50000
47+
# Buffer size for processor. Will contain log lines and parsed log lines
48+
processor_buffer_size: 50000
49+
# Syslog server IP address the collector will be listening to
50+
syslog_ip: "127.0.0.1"
51+
# Syslog server port the collector will be listening to
52+
syslog_port: 514
53+
__EOT__
54+
fi
55+
1956
su - nginx -s /bin/bash -c "/opt/app_protect/bin/bd_agent &"
2057
su - nginx -s /bin/bash -c "/usr/share/ts/bin/bd-socket-plugin tmm_count 4 proc_cpuinfo_cpu_mhz 2000000 total_xml_memory 471859200 total_umu_max_size 3129344 sys_max_account_id 1024 no_static_config &"
2158

@@ -28,7 +65,17 @@ if [[ "$NAP_WAF" == "true" ]]; then
2865
fi
2966

3067
if [[ "$NAP_WAF_PRECOMPILED_POLICIES" == "true" ]]; then
31-
PARM="${PARM} --nginx-app-protect-precompiled-publication"
68+
if [ $OLD_AGENT == "true" ]
69+
then
70+
PARM="${PARM} --nginx-app-protect-precompiled-publication"
71+
else
72+
cat - << __EOT__ >> /etc/nginx-agent/nginx-agent.conf
73+
74+
# Enable NGINX App Protect WAF precompiled policies
75+
nginx_app_protect:
76+
precompiled_publication: true
77+
__EOT__
78+
fi
3279
fi
3380

3481
if [[ "$ACM_DEVPORTAL" == "true" ]]; then

nginx-nms-docker/Dockerfile.automated

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ ARG BUILD_WITH_SECONDSIGHT=false
44
ARG ADD_ACM
55
ARG ADD_SM
66
ARG ADD_PUM
7+
ARG ADD_ADM
78

89
# Initial setup
910
RUN apt-get update && \
@@ -17,7 +18,8 @@ RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt,mode=0644
1718
--mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key,mode=0644 \
1819
set -x \
1920
&& chmod +x /deployment/startNIM.sh \
20-
&& printf "deb https://pkgs.nginx.com/nms/ubuntu `lsb_release -cs` nginx-plus\n" | tee /etc/apt/sources.list.d/nms.list \
21+
&& printf "deb https://pkgs.nginx.com/nms/ubuntu `lsb_release -cs` nginx-plus\n" > /etc/apt/sources.list.d/nms.list \
22+
&& printf "deb https://pkgs.nginx.com/adm/ubuntu `lsb_release -cs` nginx-plus\n" >> /etc/apt/sources.list.d/nms.list \
2123
&& wget -q -O /etc/apt/apt.conf.d/90pkgs-nginx https://cs.nginx.com/static/files/90pkgs-nginx \
2224
&& wget -O /tmp/nginx_signing.key https://cs.nginx.com/static/keys/nginx_signing.key \
2325
&& apt-key add /tmp/nginx_signing.key \
@@ -33,6 +35,9 @@ RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt,mode=0644
3335
# Optional WAF Policy Compiler
3436
&& if [ ! -z "${ADD_PUM}" ] ; then \
3537
apt-get -y install nms-nap-compiler-$ADD_PUM; fi \
38+
# Optional App Delivery Manager
39+
&& if [ ! -z "${ADD_ADM}" ] ; then \
40+
apt-get -y install nms-app-delivery-manager; fi \
3641
# Set permissions
3742
&& chmod +x /etc/nms/scripts/*.sh
3843

nginx-nms-docker/README.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ Docker image creation is supported for:
88

99
- [NGINX Instance Manager](https://docs.nginx.com/nginx-instance-manager/) 2.4.0+
1010
- [NGINX Management Suite API Connectivity Manager](https://docs.nginx.com/nginx-management-suite/acm/) 1.0.0+
11-
- [Security Monitoring](https://docs.nginx.com/nginx-management-suite/admin-guides/installation/install-guide/#install-nms-modules) 1.0.0+
11+
- [Security Monitoring](https://docs.nginx.com/nginx-management-suite/security/) 1.0.0+
1212
- [NGINX App Protect WAF compiler](https://docs.nginx.com/nginx-management-suite/nim/how-to/app-protect/setup-waf-config-management)
13+
- [NGINX App Delivery Manager](https://docs.nginx.com/nginx-management-suite/adm/) 4.0.0+
1314

1415
The image can optionally be built with [Second Sight](https://github.com/F5Networks/SecondSight) support
1516

16-
1717
## Deployment through the official Helm chart
1818

1919
A bash script to quickly install NGINX Management Suite through the official Helm chart is available here:
@@ -24,10 +24,11 @@ A bash script to quickly install NGINX Management Suite through the official Hel
2424

2525
This repository has been tested with:
2626

27-
- NGINX Instance Manager 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.9.1, 2.10.0
27+
- NGINX Instance Manager 2.4.0, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.9.1, 2.10.0, 2.10.1
2828
- NGINX Management Suite API Connectivity Manager 1.0.0, 1.1.0, 1.1.1, 1.2.0, 1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.5.0, 1.6.0
2929
- Security Monitoring 1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0
3030
- NGINX App Protect WAF compiler 3.1088.2, 4.2.0, 4.100.1, 4.218.0
31+
- NGINX App Delivery Manager 4.0.0
3132

3233
## Prerequisites
3334

@@ -74,6 +75,7 @@ NGINX Management Suite Docker image builder
7475
-A - Enable API Connectivity Manager - optional
7576
-W - Enable Security Monitoring - optional
7677
-P [version] - Enable WAF policy compiler, version can be [v3.1088.2|v4.2.0|v4.100.1|v4.218.0] - optional
78+
-D - Enable App Delivery Manager - optional
7779
7880
=== Examples:
7981
@@ -86,7 +88,7 @@ NGINX Management Suite Docker image builder
8688
8789
Automated build:
8890
./scripts/buildNIM.sh -i -C nginx-repo.crt -K nginx-repo.key
89-
-A -W -P v4.218.0 -t my.registry.tld/nginx-nms:2.9.0
91+
-A -W -P v4.218.0 -D -t my.registry.tld/nginx-nms:2.9.0
9092
```
9193

9294
### Automated build
@@ -119,6 +121,12 @@ NGINX Instance Manager, API Connectivity Manager, WAF Policy Compiler and Securi
119121
./scripts/buildNIM.sh -t registry.ff.lan:31005/nginx-nim2:automated -i -C certs/nginx-repo.crt -K certs/nginx-repo.key -A -W -P v4.2.0
120122
```
121123

124+
NGINX Instance Manager, API Connectivity Manager, WAF Policy Compiler, Security Monitoring and App Delivery Manager
125+
126+
```
127+
./scripts/buildNIM.sh -t registry.ff.lan:31005/nginx-nim2:automated -i -C certs/nginx-repo.crt -K certs/nginx-repo.key -A -W -P v4.2.0 -D
128+
```
129+
122130
### Manual build
123131

124132
1. Clone this repo
@@ -251,6 +259,7 @@ and then restart nginx-agent
251259

252260
- [Grafana dashboard for telemetry](contrib/grafana)
253261
- [Helm installer](contrib/helm-installer)
262+
- [Docker compose](contrib/docker-compose)
254263

255264

256265
# Starting NGINX Management Suite

nginx-nms-docker/buildNIM.sh

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#!/bin/bash
2+
3+
BANNER="NGINX Management Suite Docker image builder\n\n
4+
This tool builds a Docker image to run NGINX Management Suite\n\n
5+
=== Usage:\n\n
6+
$0 [options]\n\n
7+
=== Options:\n\n
8+
-h\t\t\t- This help\n
9+
-t [target image]\t- Docker image name to be created\n
10+
-s\t\t\t- Enable Second Sight (https://github.com/F5Networks/SecondSight/) - optional\n\n
11+
Manual build:\n\n
12+
-n [filename]\t\t- NGINX Instance Manager .deb package filename\n
13+
-a [filename]\t\t- API Connectivity Manager .deb package filename - optional\n
14+
-w [filename]\t\t- Security Monitoring .deb package filename - optional\n
15+
-p [filename]\t\t- WAF policy compiler .deb package filename - optional\n\n
16+
Automated build:\n\n
17+
-i\t\t\t- Automated build - requires cert & key\n
18+
-C [file.crt]\t\t- Certificate file to pull packages from the official NGINX repository\n
19+
-K [file.key]\t\t- Key file to pull packages from the official NGINX repository\n
20+
-A\t\t\t- Enable API Connectivity Manager - optional\n
21+
-W\t\t\t- Enable Security Monitoring - optional\n
22+
-P [version]\t\t- Enable WAF policy compiler, version can be [v3.1088.2|v4.2.0|v4.100.1|v4.218.0] - optional\n
23+
-D\t\t\t- Enable App Delivery Manager - optional\n\n
24+
=== Examples:\n\n
25+
Manual build:\n
26+
\t$0 -n nim-files/nms-instance-manager_2.6.0-698150575~focal_amd64.deb \\\\\n
27+
\t\t-a nim-files/nms-api-connectivity-manager_1.2.0.668430332~focal_amd64.deb \\\\\n
28+
\t\t-w nim-files/nms-sm_1.0.0-697204659~focal_amd64.deb \\\\\n
29+
\t\t-p nim-files/nms-nap-compiler-v4.2.0.deb \\\\\n
30+
\t\t-t my.registry.tld/nginx-nms:2.6.0\n\n
31+
Automated build:\n
32+
\t$0 -i -C nginx-repo.crt -K nginx-repo.key\n
33+
\t\t-A -W -P v4.2.0 -t my.registry.tld/nginx-nms:2.6.0\n
34+
"
35+
36+
# Defaults
37+
COUNTER=false
38+
39+
while getopts 'hn:a:w:p:t:siC:K:AWP:D' OPTION
40+
do
41+
case "$OPTION" in
42+
h)
43+
echo -e $BANNER
44+
exit
45+
;;
46+
n)
47+
DEBFILE=$OPTARG
48+
;;
49+
a)
50+
ACM_IMAGE=$OPTARG
51+
;;
52+
w)
53+
SM_IMAGE=$OPTARG
54+
;;
55+
p)
56+
PUM_IMAGE=$OPTARG
57+
;;
58+
t)
59+
IMGNAME=$OPTARG
60+
;;
61+
s)
62+
COUNTER=true
63+
;;
64+
i)
65+
AUTOMATED_INSTALL=true
66+
;;
67+
C)
68+
NGINX_CERT=$OPTARG
69+
;;
70+
K)
71+
NGINX_KEY=$OPTARG
72+
;;
73+
A)
74+
ADD_ACM=true
75+
;;
76+
W)
77+
ADD_SM=true
78+
;;
79+
P)
80+
ADD_PUM=$OPTARG
81+
;;
82+
D)
83+
ADD_ADM=true
84+
;;
85+
esac
86+
done
87+
88+
if [ -z "$1" ]
89+
then
90+
echo -e $BANNER
91+
exit
92+
fi
93+
94+
if [ -z "${IMGNAME}" ]
95+
then
96+
echo "Docker image name is required"
97+
exit
98+
fi
99+
100+
if ([ -z "${AUTOMATED_INSTALL}" ] && [ -z "${DEBFILE}" ])
101+
then
102+
echo "NGINX Instance Manager package is required for manual installation"
103+
exit
104+
fi
105+
106+
if ([ ! -z "${AUTOMATED_INSTALL}" ] && ([ -z "${NGINX_CERT}" ] || [ -z "${NGINX_KEY}" ]))
107+
then
108+
echo "NGINX certificate and key are required for automated installation"
109+
exit
110+
fi
111+
112+
echo "==> Building NGINX Management Suite docker image"
113+
114+
if [ -z "${AUTOMATED_INSTALL}" ]
115+
then
116+
docker build --no-cache -f Dockerfile.manual --build-arg NIM_DEBFILE=$DEBFILE --build-arg BUILD_WITH_SECONDSIGHT=$COUNTER \
117+
--build-arg ACM_IMAGE=$ACM_IMAGE --build-arg SM_IMAGE=$SM_IMAGE --build-arg PUM_IMAGE=$PUM_IMAGE -t $IMGNAME .
118+
else
119+
DOCKER_BUILDKIT=1 docker build --no-cache -f Dockerfile.automated --secret id=nginx-key,src=$NGINX_KEY --secret id=nginx-crt,src=$NGINX_CERT \
120+
--build-arg ADD_ACM=$ADD_ACM --build-arg ADD_SM=$ADD_SM --build-arg ADD_PUM=$ADD_PUM --build-arg ADD_ADM=$ADD_ADM \
121+
--build-arg BUILD_WITH_SECONDSIGHT=$COUNTER \
122+
-t $IMGNAME .
123+
fi
124+
125+
docker push $IMGNAME

nginx-nms-docker/container/startNIM.sh

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ clickhouse:
6464
;;
6565
esac
6666

67-
/etc/init.d/nginx start
68-
6967
# Start nms core - from /lib/systemd/system/nms-core.service
7068
/bin/bash -c '`which mkdir` -p /var/lib/nms/dqlite/'
7169
/bin/bash -c '`which mkdir` -p /var/lib/nms/secrets/'
@@ -114,13 +112,26 @@ su - nms -c "/usr/bin/nms-ingestion &" -s /bin/bash
114112
su - nms -c "/usr/bin/nms-integrations &" -s /bin/bash
115113

116114
# Start API Connectivity Manager - from /lib/systemd/system/nms-acm.service
117-
sleep 5
118-
su - nms -c "/usr/bin/nms-acm server &" -s /bin/bash
115+
if [ -f /usr/bin/nms-acm ]
116+
then
117+
sleep 5
118+
su - nms -c "/usr/bin/nms-acm server &" -s /bin/bash
119+
fi
120+
121+
# Start App Delivery Manager
122+
if [ -f /usr/bin/nms-adm ]
123+
then
124+
/bin/bash -c '`which mkdir` -p /var/run/nms/modules/adm'
125+
/bin/bash -c '`which chown` -R nms:nms /var/run/nms/modules/adm'
126+
su - nms -c "/usr/bin/nms-adm server &" -s /bin/bash
127+
fi
119128

120129
sleep 5
121130

122131
chmod 666 /var/run/nms/*.sock
123132

133+
/etc/init.d/nginx start
134+
124135
# License activation
125136
if ((${#NIM_LICENSE[@]}))
126137
then

nginx-nms-docker/scripts/buildNIM.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Manual build:\n
2929
\t\t-t my.registry.tld/nginx-nms:2.6.0\n\n
3030
Automated build:\n
3131
\t$0 -i -C nginx-repo.crt -K nginx-repo.key\n
32-
\t\t-A -W -P v4.218.0 -t my.registry.tld/nginx-nms:2.9.0\n
32+
\t\t-A -W -P v4.218.0 -D -t my.registry.tld/nginx-nms:2.9.0\n
3333
"
3434

3535
# Defaults

0 commit comments

Comments
 (0)