commit e02f17166ab80578d453d5b9c4bb5ae533a92af9 Author: root Date: Fri Nov 3 19:40:15 2017 +0000 first commit diff --git a/.Dockerfile.swp b/.Dockerfile.swp new file mode 100644 index 0000000..8c2135d Binary files /dev/null and b/.Dockerfile.swp differ diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..cf74e8d --- /dev/null +++ b/.drone.yml @@ -0,0 +1,21 @@ +pipeline: + build: + image: xataz/docker-drone-plugin + repo: xataz/reverse-nginx + action: build + volumes: + - /var/run/docker.sock:/var/run/docker.sock + + push: + image: xataz/docker-drone-plugin + repo: xataz/reverse-nginx + action: push + environment: + - UID=1000 + - GID=991 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /home/xataz/.docker/config.json:/docker/.docker/config.json + when: + branch: master + event: [push, tag, deployment] \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a959a4f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,104 @@ +FROM xataz/alpine:3.6 + +LABEL Description="reverse with nginx based on alpine" \ + tags="latest mainline 1.13.5 1.13" \ + maintainer="xataz " \ + build_ver="2017090601" + +ARG NGINX_VER=1.13.5 +ARG NGINX_GPG="B0F4253373F8F6F510D42178520A9993A1C052F8" +ARG TOR_GPG="2133BC600AB133E1D826D173FE43009C4607B1FB" +ARG BUILD_CORES +ARG NGINX_CONF="--prefix=/nginx \ + --sbin-path=/usr/local/sbin/nginx \ + --http-log-path=/nginx/log/nginx_access.log \ + --error-log-path=/nginx/log/nginx_error.log \ + --pid-path=/nginx/run/nginx.pid \ + --lock-path=/nginx/run/nginx.lock \ + --user=reverse --group=reverse \ + --with-http_ssl_module \ + --with-http_v2_module \ + --with-http_gzip_static_module \ + --with-http_stub_status_module \ + --with-threads \ + --with-pcre-jit \ + --with-ipv6 \ + --without-http_ssi_module \ + --without-http_scgi_module \ + --without-http_uwsgi_module \ + --without-http_geo_module \ + --without-http_autoindex_module \ + --without-http_split_clients_module \ + --without-http_memcached_module \ + --without-http_empty_gif_module \ + --add-module=/tmp/headers-more-nginx-module \ + --without-http_browser_module" +ARG TOR_VER=0.3.1.7 + +ENV UID=991 \ + GID=991 \ + EMAIL=admin@mydomain.local + +RUN export BUILD_DEPS="build-base \ + libressl-dev \ + pcre-dev \ + zlib-dev \ + libc-dev \ + wget \ + gnupg \ + go \ + libevent-dev \ + git" \ + && NB_CORES=${BUILD_CORES-$(grep -c "processor" /proc/cpuinfo)} \ + && apk add -U ${BUILD_DEPS} \ + s6 \ + su-exec \ + ca-certificates \ + curl \ + jq \ + libressl \ + pcre \ + zlib \ + libevent \ + && cd /tmp \ + && git clone https://github.com/openresty/headers-more-nginx-module --depth=1 \ + && wget http://nginx.org/download/nginx-${NGINX_VER}.tar.gz \ + && wget http://nginx.org/download/nginx-${NGINX_VER}.tar.gz.asc \ + && gpg --keyserver pgp.mit.edu --recv-keys "$NGINX_GPG" || \ + gpg --keyserver keyserver.pgp.com --recv-keys "$NGINX_GPG" || \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$NGINX_GPG" \ + && gpg --batch --verify nginx-${NGINX_VER}.tar.gz.asc nginx-${NGINX_VER}.tar.gz \ + && tar xzf nginx-${NGINX_VER}.tar.gz \ + && cd /tmp/nginx-${NGINX_VER} \ + && ./configure ${NGINX_CONF} \ + && make -j ${NB_CORES} \ + && make install \ + && mkdir -p /tmp/go/bin \ + && export GOPATH=/tmp/go \ + && export GOBIN=$GOPATH/bin \ + && git config --global http.https://gopkg.in.followRedirects true \ + && go get github.com/xenolf/lego \ + && mv /tmp/go/bin/lego /usr/local/bin/lego \ + && cd /tmp \ + && wget https://www.torproject.org/dist/tor-${TOR_VER}.tar.gz \ + && wget https://www.torproject.org/dist/tor-${TOR_VER}.tar.gz.asc \ + && gpg --keyserver pgp.mit.edu --recv-keys "$TOR_GPG" || \ + gpg --keyserver keyserver.pgp.com --recv-keys "$TOR_GPG" || \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$TOR_GPG" \ + && gpg --batch --verify tor-${TOR_VER}.tar.gz.asc tor-${TOR_VER}.tar.gz \ + && tar xzf tor-${TOR_VER}.tar.gz \ + && cd tor-${TOR_VER} \ + && ./configure \ + && make -j ${NB_CORES} \ + && make install \ + && mv /usr/local/etc/tor/torrc.sample /usr/local/etc/tor/torrc \ + && apk del ${BUILD_DEPS} \ + && rm -rf /tmp/* /var/cache/apk/* + +COPY rootfs / +RUN chmod +x /usr/local/bin/startup /etc/s6.d/*/* + +EXPOSE 80 443 + +ENTRYPOINT ["/usr/local/bin/startup"] +CMD ["/bin/s6-svscan", "/etc/s6.d"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff78ca9 --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +![](http://nginx.org/nginx.png) + +# BETA VERSION ACTUALY !!!!! +[![Build Status](https://drone.xataz.net/api/badges/xataz/docker-reverse-nginx/status.svg)](https://drone.xataz.net/xataz/docker-reverse-nginx) +[![](https://images.microbadger.com/badges/image/xataz/reverse-nginx.svg)](https://microbadger.com/images/xataz/reverse-nginx "Get your own image badge on microbadger.com") +[![](https://images.microbadger.com/badges/version/xataz/reverse-nginx.svg)](https://microbadger.com/images/xataz/reverse-nginx "Get your own version badge on microbadger.com") + +> This image is build and push with [drone.io](https://github.com/drone/drone), a circle-ci like self-hosted. +> If you don't trust, you can build yourself. + +## Tag available +* latest, mainline, 1.13.5, 1.13 [(Dockerfile)](https://github.com/xataz/dockerfiles/blob/master/reverse-nginx/Dockerfile) + +## Features +* No ROOT process +* Automatic configuration generation +* Automatic certificate generation and renew with letsencrypt and without downtime (use lego) +* Latest nginx version +* ARG for custom build + +## Description +What is [Nginx](http://nginx.org)? + +nginx (engine x) is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 24.29% busiest sites in December 2015. Here are some of the success stories: Netflix, Wordpress.com, FastMail.FM. + +Reverse-nginx generate for you the configuration of reverse proxy. Like traefik, it is based on the labels of containers, but it isn't dynamicly. + +## Build Image +### Build arguments +* NGINX_CONF : Nginx make configure options +* NGINX_VER : Nginx version +* ARG NGINX_GPG : GPG fingerprint (default : "B0F4253373F8F6F510D42178520A9993A1C052F8") +* ARG BUILD_CORES : Number of core use for make nginx (default : All cores) + +### Simply build +```shell +docker build -t xataz/reverse-nginx github.com/xataz/dockerfiles.git#master:reverse-nginx +``` +### Build other version +```shell +docker build -t xataz/reverse-nginx --build-arg NGINX_VER=1.9.5 github.com/xataz/dockerfiles.git#master:reverse-nginx +``` + +## Configuration +### Environments +* UID : Choose uid for launch nginx (default : 991) +* GID : Choose gid for launch nginx (default : 991) + +### Volumes +* /nginx/ssl : For certificate persistance +* /nginx/custom_sites : For create your own sites +* /tor/ : For tor address + +### Ports +* 8080 +* 8443 + +## Usage +### Environments +| Variable | Description | default | value | +| -------- | ----------- | ------- | ----- | +| UID | UID for launch nginx | 991 | Valid UID number | +| GID | GID for launch nginx | 991 | Valid GID number | +| EMAIL | email use for generate letsencrypt certificates | admin@mydomain.local | Valid address mail | + +### Labels +| Label Name | Description | default | value | +| ---------- | ----------- | ------- | ----- | +| reverse.frontend.domain | Domain Name for this service | mydomain.local | valid domain name | +| reverse.frontend.path | Domain path (warning, no rewrite url) | / | valid path, with / | +| reverse.frontend.auth | For auth basic | none | user:encryptpassword | +| reverse.frontend.ssltype | Choose ssl type | ec384 | rsa2048, rsa4096, rsa8192, ec256 or ec384 | +| reverse.frontend.domain\_max\_body\_size | Choose max size upload | 200M | Numeric value with unit (K,M,G,T) | +| reverse.frontend.ssl | Generate letsencrypt certificate | false | true or false | +| reverse.frontend.tor | If container is an hidden service | false | boolean (true / false) | +| reverse.backend.port | Port use by container | 8080 | Valid port number | + + +More labels soon !!! + +### Launch +#### First launch another container +For exemple, I launch lutim container : +```shell +$ docker run -d \ + --name lutim \ + --label reverse.frontend.domain=sub.domain.com \ + --label reverse.frontend.path=lutim \ + --label reverse.frontend.auth=USER:$(openssl passwd -crypt PASSWORD) \ + --label reverse.frontend.ssltype=ec256 \ + --label reverse.frontend.ssl = true \ + --label reverse.backend.port=8181 \ + -v /docker/config/lutim/data:/data \ + -v /docker/data/lutim:/lutim/files \ + -e UID=1001 \ + -e GID=1001 \ + -e WEBROOT=/lutim \ + -e SECRET=$(date +%s | md5sum | head -c 32) \ + -e CONTACT=contact@domain.com \ + -e MAX_FILE_SIZE=250000000 \ + xataz/lutim +``` + + +#### Launch reverse-nginx +```shell +docker run -d \ + -p 80:8080 \ + -p 443:8443 \ + --name reverse \ + -e EMAIL=me@mydomain.com \ + -v /var/run/docker.sock:/var/run/docker.sock \ + xataz/reverse-nginx +``` + +URI Access : https://sub.domain.com/lutim + + + diff --git a/auto_upgrade.sh b/auto_upgrade.sh new file mode 100755 index 0000000..200243e --- /dev/null +++ b/auto_upgrade.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +NGINX_MAINLINE_VERSION=$(grep "NGINX_VER=" Dockerfile | cut -d"=" -f2) +NEW_NGINX_MAINLINE_VERSION=$(curl http://nginx.org/en/download.html 2> /dev/null | sed 's|>|>\n|g' | grep '^