-
Notifications
You must be signed in to change notification settings - Fork 3
/
Dockerfile
126 lines (102 loc) · 4.16 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
##############################################################################
# IMAGES
##############################################################################
# Start with the latest Ubuntu image
FROM ubuntu
##############################################################################
# VARIABLES
##############################################################################
# Set environment variables
ENV TMP_PATH /tmp
ENV NGINX_SOURCE_PATH $TMP_PATH/nginx-1.11.2
ENV NGINX_INSTALL_PATH /usr/local/nginx
ENV SSL_INSTALL_PATH /usr/local/ssl
ENV HTTP_REDIS_PATH $TMP_PATH/ngx_http_redis-0.3.8
ENV ZLIB_PATH $TMP_PATH/zlib-1.2.8
ENV PCRE_PATH $TMP_PATH/pcre-8.39
ENV OPENSSL_PATH $TMP_PATH/openssl-1.0.2h
ENV OPENSSL_FIPS 1
ENV PID_PATH /var/run/nginx.pid
ENV LOG_PATH /var/log/nginx
ENV ERROR_LOG_PATH $LOG_PATH/error.log
ENV ACCESS_LOG_PATH $LOG_PATH/access.log
# Set build arguments
ARG OPENSSL_FIPS_PATH=openssl-fips-2.0.12
ARG SRC_TMP_PATH=tmp
ARG SRC_PATH=src
ARG LIB_PATH=lib
##############################################################################
# COPY SOURCE CODE
##############################################################################
# Copy Nginx, OpenSSL, OpenSSL FIPS, HTTP Redis, ZLib, and PCRE source code
COPY $SRC_PATH $TMP_PATH/
# Copy any temporary pre-build files, including source code
COPY $SRC_TMP_PATH $TMP_PATH/
# Copy initial Nginx conf(s) and SSL certificate(s)/key(s)
COPY $LIB_PATH $TMP_PATH/
##############################################################################
# INSTALL DEPENDENCIES
##############################################################################
# Install dependencies for compiling OpenSSL & Nginx
RUN apt-get update && \
apt-get install \
--no-install-recommends \
--no-install-suggests -y \
file \
g++ \
make
##############################################################################
# CONFIGURE AND INSTALL OPENSSL
##############################################################################
# Configure and install OpenSSL FIPS
WORKDIR $TMP_PATH/$OPENSSL_FIPS_PATH
RUN ./config
RUN make
RUN make install
# Configure OpenSSL (with FIPS)
WORKDIR $OPENSSL_PATH
RUN ./config fips
RUN make
RUN make install
##############################################################################
# CONFIGURE AND INSTALL NGINX
##############################################################################
# Configure and install Nginx (with OpenSSL & FIPS module)
WORKDIR $NGINX_SOURCE_PATH
RUN ./configure \
--add-module=$HTTP_REDIS_PATH \
--with-zlib=$ZLIB_PATH \
--with-pcre=$PCRE_PATH \
--with-openssl=$OPENSSL_PATH \
--with-http_ssl_module \
--pid-path=$PID_PATH \
--error-log-path=$ERROR_LOG_PATH \
--http-log-path=$ACCESS_LOG_PATH \
--with-ipv6
RUN make
RUN make install
##############################################################################
# COPY NGINX- AND SSL-RELATED FILES
##############################################################################
# Copy initial Nginx conf
COPY $LIB_PATH/conf $NGINX_INSTALL_PATH/conf
# Copy SSL certificate(s)/key(s)
COPY $SRC_TMP_PATH/certs/*.crt $SSL_INSTALL_PATH/certs/
COPY $SRC_TMP_PATH/private/*.key $SSL_INSTALL_PATH/private/
##############################################################################
# LINKS
##############################################################################
# Link binaries
RUN ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx && \
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
# Forward request and error logs to Docker log collector
RUN ln -sf /dev/stdout $ACCESS_LOG_PATH& \
ln -sf /dev/stderr $ERROR_LOG_PATH
##############################################################################
# EXPOSE PORTS AND RUN NGINX
##############################################################################
# Expose ports
EXPOSE 80
EXPOSE 443
# Run Nginx
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]