Skip to content

Commit 3de2d99

Browse files
authored
Merge pull request #134 from UKHomeOffice/drone-v1
Switch to Drone v1 and package updates
2 parents bd629dc + e0b976c commit 3de2d99

File tree

11 files changed

+138
-103
lines changed

11 files changed

+138
-103
lines changed

.drone.yml

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,64 @@
1+
kind: pipeline
2+
name: default
3+
type: kubernetes
4+
5+
platform:
6+
os: linux
7+
arch: amd64
8+
19
workspace:
2-
base: /workdir
10+
path: /workdir
11+
12+
steps:
13+
- name: build_and_test_image
14+
image: 340268328991.dkr.ecr.eu-west-2.amazonaws.com/acp/dind
15+
commands:
16+
- apk add curl bash wget tar
17+
- n=0; while [ "$n" -lt 60 ] && [ ! docker stats --no-stream ]; do n=$(( n + 1 )); sleep 1; done
18+
- ./ci-build.sh
19+
environment:
20+
GEOIP_ACCOUNT_ID:
21+
from_secret: geoip_account_id
22+
GEOIP_LICENSE_KEY:
23+
from_secret: geoip_license_key
24+
when:
25+
event:
26+
- pull_request
27+
- push
28+
- tag
329

4-
pipeline:
5-
build_and_test_image:
6-
image: quay.io/ukhomeofficedigital/centos-base:latest
7-
environment:
8-
- DOCKER_HOST=tcp://172.17.0.1:2375
9-
commands:
10-
- yum update -y
11-
- yum install -y -q docker openssl wget
12-
- ./ci-build.sh
13-
when:
14-
event: [pull_request, push, tag]
30+
- name: push_image_to_artifactory
31+
image: 340268328991.dkr.ecr.eu-west-2.amazonaws.com/acp/dind
32+
commands:
33+
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_PASSWORD}" "$${DOCKER_REPO}"
34+
- ./publish.sh "ngx" "$${DOCKER_REPO}$${DOCKER_BASEDIR}$${DOCKER_IMAGE}" "$${DRONE_TAG}"
35+
environment:
36+
DOCKER_BASEDIR: /
37+
DOCKER_IMAGE: nginx-proxy
38+
DOCKER_PASSWORD:
39+
from_secret: docker_password
40+
DOCKER_REPO: artifactory-internal.digital.homeoffice.gov.uk
41+
DOCKER_USERNAME: docker-nginx-proxy-robot
42+
when:
43+
event:
44+
- tag
1545

16-
push_image_to_artifactory:
17-
image: docker:17.12.0
18-
secrets:
19-
- docker_password
20-
environment:
21-
- DOCKER_HOST=tcp://172.17.0.1:2375
22-
- DOCKER_IMAGE=nginx-proxy
23-
- DOCKER_REPO=artifactory-internal.digital.homeoffice.gov.uk
24-
- DOCKER_BASEDIR=/
25-
- DOCKER_USERNAME=docker-nginx-proxy-robot
26-
commands:
27-
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_PASSWORD}" "$${DOCKER_REPO}"
28-
- ./publish.sh "ngx" "$${DOCKER_REPO}$${DOCKER_BASEDIR}$${DOCKER_IMAGE}" "$${DRONE_TAG}"
29-
when:
30-
event: tag
46+
- name: push_image_to_quay
47+
image: 340268328991.dkr.ecr.eu-west-2.amazonaws.com/acp/dind
48+
commands:
49+
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_QUAY_PASSWORD}" "$${DOCKER_REPO}"
50+
- ./publish.sh "ngx" "$${DOCKER_REPO}$${DOCKER_BASEDIR}$${DOCKER_IMAGE}" "$${DRONE_TAG}"
51+
environment:
52+
DOCKER_BASEDIR: /ukhomeofficedigital/
53+
DOCKER_IMAGE: nginx-proxy
54+
DOCKER_QUAY_PASSWORD:
55+
from_secret: docker_quay_password
56+
DOCKER_REPO: quay.io
57+
DOCKER_USERNAME: ukhomeofficedigital+nginx_proxy
58+
when:
59+
event:
60+
- tag
3161

32-
push_image_to_quay:
33-
image: docker:17.12.0
34-
secrets:
35-
- docker_quay_password
36-
environment:
37-
- DOCKER_HOST=tcp://172.17.0.1:2375
38-
- DOCKER_IMAGE=nginx-proxy
39-
- DOCKER_REPO=quay.io
40-
- DOCKER_BASEDIR=/ukhomeofficedigital/
41-
- DOCKER_USERNAME=ukhomeofficedigital+nginx_proxy
42-
commands:
43-
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_QUAY_PASSWORD}" "$${DOCKER_REPO}"
44-
- ./publish.sh "ngx" "$${DOCKER_REPO}$${DOCKER_BASEDIR}$${DOCKER_IMAGE}" "$${DRONE_TAG}"
45-
when:
46-
event: tag
62+
services:
63+
- name: docker
64+
image: 340268328991.dkr.ecr.eu-west-2.amazonaws.com/acp/dind

.travis.yml

Lines changed: 0 additions & 7 deletions
This file was deleted.

Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
FROM quay.io/ukhomeofficedigital/centos-base:latest
2-
MAINTAINER Lewis Marshall <[email protected]>
2+
3+
ARG GEOIP_ACCOUNT_ID
4+
ARG GEOIP_LICENSE_KEY
35

46
WORKDIR /root
57
ADD ./build.sh /root/
@@ -8,7 +10,8 @@ RUN ./build.sh
810
RUN yum install -y openssl && \
911
yum clean all && \
1012
mkdir -p /etc/keys && \
11-
openssl req -x509 -newkey rsa:2048 -keyout /etc/keys/key -out /etc/keys/crt -days 360 -nodes -subj '/CN=test'
13+
openssl req -x509 -newkey rsa:2048 -keyout /etc/keys/key -out /etc/keys/crt -days 360 -nodes -subj '/CN=test' && \
14+
chmod 644 /etc/keys/key
1215

1316
# This takes a while so best to do it during build
1417
RUN openssl dhparam -out /usr/local/openresty/nginx/conf/dhparam.pem 2048

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,9 @@ This is useful when testing or for development instances or when a load-balancer
8282
* `SSL_PROTOCOLS` - Change the SSL protocols supported default only TLSv1.2
8383
* `HTTP_LISTEN_PORT` - Change the default inside the container from 10080.
8484
* `HTTPS_LISTEN_PORT` - Change the default inside the container from 10443.
85-
* `INTERNAL_LISTEN_PORT` - Change the default inside the container from 10418. Note: This is used for internal processing and is not available externally.
8685
* `HTTPS_REDIRECT` - Toggle whether or not we force redirects to HTTPS. Defaults to true.
8786
* `ALLOW_COUNTRY_CSV` - List of [country codes](http://dev.maxmind.com/geoip/legacy/codes/iso3166/) to allow.
88-
* `STATSD_METRICS_ENABLED` - Toggle if metrics are logged to statsd (defaults to true)
87+
* `STATSD_METRICS` - Toggle if metrics are logged to statsd (defaults to true)
8988
* `STATSD_SERVER` - Server to send statsd metrics to, defaults to 127.0.0.1
9089
* `DISABLE_SYSDIG_METRICS` - Set to any non-empty string to disable support for Sysdig's metric collection
9190

build.sh

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
set -eu
55
set -o pipefail
66

7-
GEOIP_CITY_URL='http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz'
8-
GEOIP_COUNTRY_URL='http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz'
9-
GEOIP_MOD_URL='https://github.com/leev/ngx_http_geoip2_module/archive/3.0.tar.gz'
10-
GEOIP_UPDATE_CLI='https://github.com/maxmind/geoipupdate/releases/download/v3.1.1/geoipupdate-3.1.1.tar.gz'
11-
GEOIP_URL='https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz'
12-
LUAROCKS_URL='http://luarocks.org/releases/luarocks-2.4.2.tar.gz'
13-
NAXSI_URL='https://github.com/nbs-system/naxsi/archive/0.56.tar.gz'
14-
OPEN_RESTY_URL='http://openresty.org/download/openresty-1.11.2.4.tar.gz'
15-
STATSD_URL='https://github.com/UKHomeOffice/nginx-statsd/archive/0.0.1.tar.gz'
7+
GEOIP_ACCOUNT_ID="${GEOIP_ACCOUNT_ID:-123456}"
8+
GEOIP_LICENSE_KEY="${GEOIP_LICENSE_KEY:-xxxxxx}"
9+
GEOIP_CITY_URL="https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${GEOIP_LICENSE_KEY}&suffix=tar.gz"
10+
GEOIP_COUNTRY_URL="https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${GEOIP_LICENSE_KEY}&suffix=tar.gz"
11+
GEOIP_MOD_URL='https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz'
12+
GEOIP_UPDATE_CLI='https://github.com/maxmind/geoipupdate/releases/download/v4.7.1/geoipupdate_4.7.1_linux_amd64.tar.gz'
13+
GEOIP_URL='https://github.com/maxmind/libmaxminddb/releases/download/1.6.0/libmaxminddb-1.6.0.tar.gz'
14+
LUAROCKS_URL='https://luarocks.github.io/luarocks/releases/luarocks-3.7.0.tar.gz'
15+
NAXSI_URL='https://github.com/nbs-system/naxsi/archive/1.3.tar.gz'
16+
OPEN_RESTY_URL='http://openresty.org/download/openresty-1.19.3.1.tar.gz'
17+
STATSD_URL='https://github.com/UKHomeOffice/nginx-statsd/archive/0.0.1-ngxpatch.tar.gz'
1618

1719
MAXMIND_PATH='/usr/share/GeoIP'
1820

@@ -50,20 +52,21 @@ mkdir -p ${MAXMIND_PATH}
5052
./configure
5153
make check install
5254
echo "/usr/local/lib" >> /etc/ld.so.conf.d/libmaxminddb.conf
53-
curl -fSL ${GEOIP_COUNTRY_URL} | gzip -d > ${MAXMIND_PATH}/GeoLite2-Country.mmdb
54-
curl -fSL ${GEOIP_CITY_URL} | gzip -d > ${MAXMIND_PATH}/GeoLite2-City.mmdb
55+
curl -fSL ${GEOIP_COUNTRY_URL} | tar -xz > ${MAXMIND_PATH}/GeoLite2-Country.mmdb
56+
curl -fSL ${GEOIP_CITY_URL} | tar -xz > ${MAXMIND_PATH}/GeoLite2-City.mmdb
5557
chown -R 1000:1000 ${MAXMIND_PATH}
5658
popd
5759

5860
pushd geoipupdate
59-
./configure
60-
make check install
61+
sed -i 's/YOUR_ACCOUNT_ID_HERE/'"${GEOIP_ACCOUNT_ID}"'/g' GeoIP.conf
62+
sed -i 's/YOUR_LICENSE_KEY_HERE/'"${GEOIP_LICENSE_KEY}"'/g' GeoIP.conf
63+
./geoipupdate -f GeoIP.conf -d ${MAXMIND_PATH}
6164
popd
6265

63-
# check maxmind module
6466
echo "Checking libmaxminddb module"
6567
ldconfig && ldconfig -p | grep libmaxminddb
6668

69+
echo "Install openresty"
6770
pushd openresty
6871
./configure --add-dynamic-module="/root/ngx_http_geoip2_module" \
6972
--add-module="../naxsi/naxsi_src" \
@@ -73,21 +76,23 @@ pushd openresty
7376
make install
7477
popd
7578

76-
# Install NAXSI default rules...
79+
echo "Install NAXSI default rules"
7780
mkdir -p /usr/local/openresty/naxsi/
7881
cp "./naxsi/naxsi_config/naxsi_core.rules" /usr/local/openresty/naxsi/
7982

83+
echo "Installing luarocks"
8084
pushd luarocks
8185
./configure --with-lua=/usr/local/openresty/luajit \
8286
--lua-suffix=jit-2.1.0-beta2 \
8387
--with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1
8488
make build install
8589
popd
8690

91+
echo "Installing luarocks packages"
8792
luarocks install uuid
8893
luarocks install luasocket
8994

90-
# Remove the developer tooling
95+
echo "Removing unnecessary developer tooling"
9196
rm -fr openresty naxsi nginx-statsd geoip luarocks ngx_http_geoip2_module
9297
yum -y remove \
9398
gcc-c++ \

ci-build.sh

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ set -e
44

55
TAG=ngx
66
BUILD_NUMBER="${BUILD_NUMBER:-${DRONE_BUILD_NUMBER}}"
7-
PORT=$((${BUILD_NUMBER} + 1025))
7+
PORT="${HTTPS_LISTEN_PORT:-10443}"
88
BUILD_NUMBER="${BUILD_NUMBER:-local}"
99
START_INSTANCE="docker run "
10-
DOCKER_HOST_NAME=172.17.0.1
10+
DOCKER_HOST_NAME="localhost"
1111
MOCKSERVER="mockserver-${BUILD_NUMBER}"
1212
SLOWMOCKSERVER="slowmockserver-${BUILD_NUMBER}"
1313
MUTUAL_TLS="mutual-tls-${BUILD_NUMBER}"
@@ -40,13 +40,17 @@ function clean_up() {
4040
}
4141

4242
function add_files_to_container() {
43+
echo "Copying files to container: $1"
4344
local CONTAINER=$1
4445
shift
4546
while [[ -n $@ ]]; do
4647
local file=$1
4748
shift
48-
local dest=$1
49-
docker cp ${file} ${CONTAINER}:${dest}
49+
local rename=$1
50+
shift
51+
local destdir=$1
52+
cp ${file} ${rename}
53+
tar -cf - ${rename} --mode u=+rw,g=+r,o=+r --owner root --group root | docker cp - ${CONTAINER}:${destdir}
5054
shift
5155
done
5256
}
@@ -68,7 +72,7 @@ function start_test() {
6872
files="${files} $1"
6973
shift
7074
done
71-
echo "Running:$@ --name ${INSTANCE} -p ${PORT}:${HTTPS_LISTEN_PORT} ${TAG}"
75+
echo "Running: $@ --name ${INSTANCE} -p ${PORT}:${HTTPS_LISTEN_PORT} ${TAG}"
7276
bash -c "$@ --name ${INSTANCE} -d -p ${PORT}:${HTTPS_LISTEN_PORT} ${TAG}"
7377
# if files needed to be mounted in, the container stops immediately so start it again
7478
if [[ ${files} != "" ]]; then
@@ -87,7 +91,7 @@ echo "========"
8791
echo "BUILD..."
8892
echo "========"
8993
echo "travis_fold:start:BUILD"
90-
docker build -t ${TAG} .
94+
docker build --build-arg GEOIP_ACCOUNT_ID=${GEOIP_ACCOUNT_ID} --build-arg GEOIP_LICENSE_KEY=${GEOIP_LICENSE_KEY} -t ${TAG} .
9195
echo "travis_fold:end:BUILD"
9296

9397
echo "Running mocking-server..."
@@ -114,8 +118,8 @@ echo "TESTING..."
114118
echo "=========="
115119

116120
start_test "Start with minimal settings" "${STD_CMD} \
117-
-e \"PROXY_SERVICE_HOST=http://www.w3.org\" \
118-
-e \"PROXY_SERVICE_PORT=80\""
121+
-e \"PROXY_SERVICE_HOST=https://www.w3.org\" \
122+
-e \"PROXY_SERVICE_PORT=443\""
119123

120124
echo "Test it's up and working..."
121125
wget -O /dev/null --quiet --no-check-certificate https://${DOCKER_HOST_NAME}:${PORT}/
@@ -208,18 +212,18 @@ curl -s -I -X GET -k --compressed https://${DOCKER_HOST_NAME}:${PORT}/gzip | gre
208212
start_test "Start with SSL CIPHER set and PROTOCOL" "${STD_CMD} \
209213
-e \"PROXY_SERVICE_HOST=www.w3.org\" \
210214
-e \"PROXY_SERVICE_PORT=80\" \
211-
-e \"SSL_CIPHERS=RC4-MD5\" \
212-
-e \"SSL_PROTOCOLS=TLSv1.1\""
213-
echo "Test excepts defined protocol and cipher....."
214-
docker run --link ${INSTANCE}:${INSTANCE} --rm --entrypoint bash ngx -c "echo GET / | /usr/bin/openssl s_client -cipher 'RC4-MD5' -tls1_1 -connect ${INSTANCE}:10443" &> /dev/null;
215+
-e \"SSL_CIPHERS=DHE-RSA-AES256-SHA\" \
216+
-e \"SSL_PROTOCOLS=TLSv1.2\""
217+
echo "Test accepts defined protocol and cipher....."
218+
docker run --link ${INSTANCE}:${INSTANCE} --rm --entrypoint bash ngx -c "echo GET / | /usr/bin/openssl s_client -cipher 'DHE-RSA-AES256-SHA' -tls1_2 -connect ${INSTANCE}:10443" &> /dev/null;
215219

216220

217221

218222
start_test "Start we auto add a protocol " "${STD_CMD} \
219223
-e \"PROXY_SERVICE_HOST=www.w3.org\" \
220224
-e \"PROXY_SERVICE_PORT=80\""
221225

222-
echo "Test It works if we do not define the protocol.."
226+
echo "Test it works if we do not define the protocol.."
223227
wget -O /dev/null --quiet --no-check-certificate https://${DOCKER_HOST_NAME}:${PORT}/
224228

225229

@@ -253,7 +257,7 @@ cd ./client_certs/
253257
./sign_client_key_with_ca.sh
254258
cd ..
255259
start_test "Start with Client CA, and single proxy. Block unauth for /standards" \
256-
"${WORKDIR}/client_certs/ca.crt" "/etc/keys/client-ca" \
260+
"${WORKDIR}/client_certs/ca.crt" "client-ca" "/etc/keys/" \
257261
"${STD_CMD} \
258262
-e \"PROXY_SERVICE_HOST=http://www.w3.org\" \
259263
-e \"PROXY_SERVICE_PORT=80\" \
@@ -278,18 +282,20 @@ wget -O /dev/null --quiet --no-check-certificate https://${DOCKER_HOST_NAME}:${P
278282
echo "Test upstream client certs..."
279283
docker build -t mutual-tls:latest ${WORKDIR} -f docker-config/Dockerfile.mutual-tls
280284
${STD_CMD} -d \
285+
-e "HTTP_LISTEN_PORT=10081" \
286+
-e "HTTPS_LISTEN_PORT=10444" \
281287
-e "PROXY_SERVICE_HOST=http://www.w3.org" \
282288
-e "PROXY_SERVICE_PORT=80" \
283289
-e "CLIENT_CERT_REQUIRED=TRUE" \
284-
--name="${MUTUAL_TLS}" mutual-tls:latest
290+
-p 10444:10444 --name="${MUTUAL_TLS}" mutual-tls:latest
291+
docker run --link "${MUTUAL_TLS}:${MUTUAL_TLS}" --rm martin/wait -p 10444
285292

286-
docker run --link "${MUTUAL_TLS}:${MUTUAL_TLS}" --rm martin/wait
287293
start_test "Start with upstream client certs" \
288-
"${WORKDIR}/client_certs/client.crt" "/etc/keys/upstream-client-crt" \
289-
"${WORKDIR}/client_certs/client.key" "/etc/keys/upstream-client-key" \
294+
"${WORKDIR}/client_certs/client.crt" "upstream-client-crt" "/etc/keys/" \
295+
"${WORKDIR}/client_certs/client.key" "upstream-client-key" "/etc/keys/" \
290296
"${STD_CMD} \
291297
-e \"PROXY_SERVICE_HOST=https://${MUTUAL_TLS}\" \
292-
-e \"PROXY_SERVICE_PORT=10443\" \
298+
-e \"PROXY_SERVICE_PORT=10444\" \
293299
-e \"DNSMASK=TRUE\" \
294300
-e \"USE_UPSTREAM_CLIENT_CERT=TRUE\" \
295301
--link \"${MUTUAL_TLS}:${MUTUAL_TLS}\" "
@@ -301,15 +307,18 @@ tear_down_container "${MUTUAL_TLS}"
301307
echo "Test failure to verify upstream server cert..."
302308
docker build -t standard-tls:latest ${WORKDIR} -f docker-config/Dockerfile.standard-tls
303309
${STD_CMD} -d \
310+
-e "HTTP_LISTEN_PORT=10081" \
311+
-e "HTTPS_LISTEN_PORT=10444" \
304312
-e "PROXY_SERVICE_HOST=http://www.w3.org" \
305313
-e "PROXY_SERVICE_PORT=80" \
306-
--name="${STANDARD_TLS}" standard-tls:latest
307-
docker run --link "${STANDARD_TLS}:${STANDARD_TLS}" --rm martin/wait
314+
-p 10444:10444 --name="${STANDARD_TLS}" standard-tls:latest
315+
docker run --link "${STANDARD_TLS}:${STANDARD_TLS}" --rm martin/wait -p 10444
316+
308317
start_test "Start with failing upstream server verification" \
309-
"${WORKDIR}/client_certs/ca.crt" "/etc/keys/upstream-server-ca" \
318+
"${WORKDIR}/client_certs/ca.crt" "upstream-server-ca" "/etc/keys/" \
310319
"${STD_CMD} \
311320
-e \"PROXY_SERVICE_HOST=https://${STANDARD_TLS}\" \
312-
-e \"PROXY_SERVICE_PORT=10443\" \
321+
-e \"PROXY_SERVICE_PORT=10444\" \
313322
-e \"DNSMASK=TRUE\" \
314323
-e \"VERIFY_SERVER_CERT=TRUE\" \
315324
--link \"${STANDARD_TLS}:${STANDARD_TLS}\" "
@@ -328,17 +337,19 @@ cd ./client_certs/
328337
./sign_server_key_with_ca.sh
329338
cd ..
330339
${STD_CMD} -d \
340+
-e "HTTP_LISTEN_PORT=10081" \
341+
-e "HTTPS_LISTEN_PORT=10444" \
331342
-e "PROXY_SERVICE_HOST=http://www.w3.org" \
332343
-e "PROXY_SERVICE_PORT=80" \
333-
--name="${STANDARD_TLS}" ${TAG}
334-
344+
-p 10444:10444 --name="${STANDARD_TLS}" ${TAG}
335345
docker start ${STANDARD_TLS}
336-
docker run --link "${STANDARD_TLS}:${STANDARD_TLS}" --rm martin/wait
346+
docker run --link "${STANDARD_TLS}:${STANDARD_TLS}" --rm martin/wait -p 10444
347+
337348
start_test "Start with succeeding upstream server verification" \
338-
"${WORKDIR}/client_certs/ca.crt" "/etc/keys/upstream-server-ca" \
349+
"${WORKDIR}/client_certs/ca.crt" "upstream-server-ca" "/etc/keys/" \
339350
"${STD_CMD} \
340351
-e \"PROXY_SERVICE_HOST=https://${STANDARD_TLS}\" \
341-
-e \"PROXY_SERVICE_PORT=10443\" \
352+
-e \"PROXY_SERVICE_PORT=10444\" \
342353
-e \"DNSMASK=TRUE\" \
343354
-e \"VERIFY_SERVER_CERT=TRUE\" \
344355
--link \"${STANDARD_TLS}:${STANDARD_TLS}\" "

0 commit comments

Comments
 (0)