FROM nginx:1.23.2

ENV NGINX_VERSION 1.23.2
ENV DEBIAN_FRONTEND=noninteractive


ENV ASAN_OPTIONS=detect_leaks=0


RUN apt update && \
    apt install -y \
    build-essential \
    curl \
    git \
    libpcre++-dev \
    libc-ares-dev \
    zlib1g-dev \
    libgrpc-dev \
    libprotobuf-dev \
    protobuf-compiler \
    libbrotli-dev \
    cmake \
    gcc \
    libpcre3-dev \
    libssl-dev \
    libgeoip-dev \
    linux-headers-generic \
    make \
    unzip \
    libre2-dev \
    pkg-config \
    libgd-dev \
    libxml2-dev \
    libgcc-10-dev

RUN curl http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -o /tmp/nginx-${NGINX_VERSION}.tar.gz && \
    cd /tmp && \
    tar xvzf nginx-${NGINX_VERSION}.tar.gz

RUN mkdir -p /build/abseil-cpp && cd /build/abseil-cpp && \
    curl -sSL https://github.com/abseil/abseil-cpp/archive/refs/tags/20230125.3.tar.gz | tar -xzf - --strip=1 && \
    mkdir build && cd build && \
    cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_TESTING=OFF \
    -DBUILD_SHARED_LIBS=yes && \
    make -j64 install && \
    ldconfig

RUN mkdir -p /build/protobuf && cd /build/protobuf && \
    curl -sSL https://github.com/google/protobuf/archive/v3.17.3.tar.gz | tar -xzf - --strip=1 && \
    mkdir build && cd build && \
    cmake ../cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=yes \
    -Dprotobuf_BUILD_TESTS=OFF && \
    make -j64 install && \
    ldconfig

RUN mkdir -p /build/grpc && cd /build/grpc && \
    curl -sSL https://github.com/grpc/grpc/archive/refs/tags/v1.47.0.tar.gz| tar -xzf - --strip=1 && \
    mkdir build && cd build && \
    mkdir install && \
    mkdir ldconfig && \
    cmake .. \
    -DCMAKE_BUILD_TYPE=Release \
    -DgRPC_INSTALL=ON \
    -DgRPC_BUILD_TESTS=OFF \
    -DgRPC_ABSL_PROVIDER=package \
    -DgRPC_CARES_PROVIDER=package \
    -DgRPC_PROTOBUF_PROVIDER=package \
    -DgRPC_RE2_PROVIDER=package \
    -DgRPC_SSL_PROVIDER=package \
    -DgRPC_ZLIB_PROVIDER=package && \
    make -j64 install && \
    ldconfig

# Here was some inner library build

ARG GRPC_CLI_MODULE_CONFIG_DEPS="\
    --add-dynamic-module=/tmp/some-module"

RUN CONFARGS=$(nginx -V 2>&1 | sed -n -e 's/^.*arguments: //p') \
    cd /tmp/nginx-${NGINX_VERSION} && \
    ./configure --with-cc-opt='-fsanitize=address -DNGX_DEBUG_PALLOC=1' --with-ld-opt=-fsanitize=address --with-compat $CONFARGS $GRPC_CLI_MODULE_CONFIG_DEPS && \
    make && make install

RUN cp /usr/local/nginx/modules/ngx_some_module.so /etc/nginx/modules/ngx_some_module.so
RUN rm /etc/nginx/conf.d/default.conf

RUN export LD_LIBRARY_PATH="/lib:/usr/lib:/usr/local/lib" 
RUN ldconfig

RUN ulimit -c unlimited
RUN mkdir /coredump
RUN chown nginx:nginx /coredump
RUN chmod 1777 /coredump

COPY conf/index.html /etc/nginx/html/index.html
COPY ./conf/nginx.conf /etc/nginx/nginx.conf

EXPOSE 80
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]