From fb24456662b9c58b4eb47ac76013155aba35e9a1 Mon Sep 17 00:00:00 2001 From: Paramtamtam <7326800+tarampampam@users.noreply.github.com> Date: Fri, 26 Aug 2022 17:05:50 +0400 Subject: [PATCH] Entrypoint script replaced with mustpl (#24) --- .editorconfig | 6 +++--- .github/workflows/documentation.yml | 19 +++++++++++++++++++ 3proxy.cfg.json | 22 ++++++++++++++++++++++ 3proxy.cfg => 3proxy.cfg.mustach | 24 +++++++++++++----------- CHANGELOG.md | 15 +++++++++++++++ Dockerfile | 25 ++++++++++++++----------- README.md | 23 +++++++++++++++-------- docker-entrypoint.sh | 24 ------------------------ 8 files changed, 101 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/documentation.yml create mode 100644 3proxy.cfg.json rename 3proxy.cfg => 3proxy.cfg.mustach (68%) delete mode 100755 docker-entrypoint.sh diff --git a/.editorconfig b/.editorconfig index 37a31ab..f90923a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,8 +5,8 @@ charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space -indent_size = 4 +indent_size = 2 trim_trailing_whitespace = true -[*.{yml, yaml, sh, conf, json}] -indent_size = 2 +[Dockerfile] +indent_size = 4 diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 0000000..781c52c --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,19 @@ +name: documentation + +on: + push: + branches: [master, main] + paths: ['README.md'] + +jobs: + docker-hub-description: + name: Docker Hub Description + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + + - uses: peter-evans/dockerhub-description@v3 # Action page: + with: + username: ${{ secrets.DOCKER_LOGIN }} + password: ${{ secrets.DOCKER_USER_PASSWORD }} + repository: tarampampam/3proxy diff --git a/3proxy.cfg.json b/3proxy.cfg.json new file mode 100644 index 0000000..db2212a --- /dev/null +++ b/3proxy.cfg.json @@ -0,0 +1,22 @@ +{ + "log": { + "output": "/dev/stdout" + }, + "name_servers": [ + "${PRIMARY_RESOLVER:-1.0.0.1}", + "${SECONDARY_RESOLVER:-8.8.4.4}", + "1.1.1.1", + "9.9.9.9", + "8.8.8.8" + ], + "name_servers_cache": 65536, + "max_connections": "${MAX_CONNECTIONS:-1024}", + "auth": { + "login": "${PROXY_LOGIN:-}", + "password": "${PROXY_PASSWORD:-}" + }, + "ports": { + "proxy": "${PROXY_PORT:-3128}", + "socks": "${SOCKS_PORT:-1080}" + } +} diff --git a/3proxy.cfg b/3proxy.cfg.mustach similarity index 68% rename from 3proxy.cfg rename to 3proxy.cfg.mustach index ab8f3d9..5ab95ed 100644 --- a/3proxy.cfg +++ b/3proxy.cfg.mustach @@ -5,27 +5,29 @@ config /etc/3proxy/3proxy.cfg system "echo `which 3proxy`': Starting 3proxy'" # We can configure nservers to avoid unsafe gethostbyname() usage (max 5 servers) -#NSERVER1 -#NSERVER2 -nserver 1.0.0.1 -nserver 1.1.1.1 -nserver 8.8.4.4 +{{#name_servers}} +nserver {{ . }} +{{/name_servers}} # nscache is good to save speed, traffic and bandwidth -nscache 65536 +nscache {{ name_servers_cache }} # Here we can change timeout values timeouts 1 5 30 60 180 1800 15 60 # Logging docs: -log /dev/stdout +log {{ log.output }} logformat "-\""+_G{""time_unix"":%t, ""proxy"":{""type:"":""%N"", ""port"":%p}, ""error"":{""code"":""%E""}, ""auth"":{""user"":""%U""}, ""client"":{""ip"":""%C"", ""port"":%c}, ""server"":{""ip"":""%R"", ""port"":%r}, ""bytes"":{""sent"":%O, ""received"":%I}, ""request"":{""hostname"":""%n""}, ""message"":""%T""}" -maxconn 1024 +maxconn {{ max_connections }} -#AUTH_SETTINGS +{{^auth.login=}}{{^auth.password=}} +users {{ auth.login }}:CL:{{ auth.password }} +auth strong +allow {{ auth.login }} +{{/auth.password=}}{{/auth.login=}} -proxy -a -p3128 -socks -a -p1080 +proxy -a -p{{ ports.proxy }} +socks -a -p{{ ports.socks }} flush diff --git a/CHANGELOG.md b/CHANGELOG.md index 46d2f85..f30f476 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,21 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog][keepachangelog] and this project adheres to [Semantic Versioning][semver]. +## v1.7.0 + +### Added + +- The following environment variables are supported now: `MAX_CONNECTIONS`, `PROXY_PORT`, `SOCKS_PORT` + +### Changed + +- Entrypoint script (`bash`) replaced with [`mustpl`](https://github.com/tarampampam/mustpl) +- The result docker image `busybox:1.34.1-glibc` replaced with `busybox:stable-glibc` + +### Removed + +- Dockerfile healthcheck + ## v1.6.0 ### Added diff --git a/Dockerfile b/Dockerfile index 03d0874..719896b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ RUN set -x \ && strip ./bin/SSLPlugin.ld.so # Prepare filesystem for 3proxy running -FROM busybox:1.34.1-glibc as buffer +FROM busybox:stable-glibc as buffer # create a directory for the future root filesystem WORKDIR /tmp/rootfs @@ -47,16 +47,17 @@ RUN set -x \ && wget -O ./bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64" \ && chmod +x ./bin/dumb-init -# Copy binaries COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.* ./lib/ COPY --from=builder /tmp/3proxy/bin/3proxy ./bin/3proxy COPY --from=builder /tmp/3proxy/bin/*.ld.so ./usr/local/3proxy/libexec/ -COPY 3proxy.cfg ./etc/3proxy/3proxy.cfg -COPY docker-entrypoint.sh ./docker-entrypoint.sh +COPY --from=ghcr.io/tarampampam/mustpl:0.1.0 /bin/mustpl ./bin/mustpl +COPY 3proxy.cfg.json ./etc/3proxy/3proxy.cfg.json +COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach RUN chown -R 10001:10001 ./etc/3proxy -FROM busybox:1.34.1-glibc +# Merge into a single layer +FROM busybox:stable-glibc LABEL \ org.opencontainers.image.title="3proxy" \ @@ -72,10 +73,12 @@ COPY --from=buffer /tmp/rootfs / # Use an unprivileged user USER 3proxy:3proxy -# Docs: -HEALTHCHECK --interval=5s --timeout=2s --retries=2 --start-period=2s CMD \ - netstat -ltn | grep 3128 && netstat -ltn | grep 1080 +ENTRYPOINT [ \ + "/bin/mustpl", \ + "-f", "/etc/3proxy/3proxy.cfg.json", \ + "-o", "/etc/3proxy/3proxy.cfg", \ + "/etc/3proxy/3proxy.cfg.mustach", \ + "--", "/bin/dumb-init" \ +] -ENTRYPOINT ["/bin/dumb-init", "--"] - -CMD ["/docker-entrypoint.sh", "/bin/3proxy", "/etc/3proxy/3proxy.cfg"] +CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"] diff --git a/README.md b/README.md index ef68785..acb2ac8 100644 --- a/README.md +++ b/README.md @@ -25,18 +25,24 @@ TCP ports: ## Supported tags -[![image stats](https://dockeri.co/image/tarampampam/3proxy)][link_docker_tags] +| Registry | Image | +|----------------------------------------|------------------------------| +| [GitHub Container Registry][link_ghcr] | `ghcr.io/tarampampam/3proxy` | +| [Docker Hub][link_docker_hub] | `tarampampam/3proxy` | All supported image tags [can be found here][link_docker_tags]. ## Supported environment variables -| Variable name | Description | Example | -|----------------------|-------------------------------------|------------------------| -| `PROXY_LOGIN` | Authorization login | `username` | -| `PROXY_PASSWORD` | Authorization password | `password` | -| `PRIMARY_RESOLVER` | Primary nameserver (dns resolver) | `8.8.8.8:5353/tcp` | -| `SECONDARY_RESOLVER` | Secondary nameserver (dns resolver) | `2001:4860:4860::8844` | +| Variable name | Description | Example | +|----------------------|-----------------------------------------------------------|------------------------| +| `PROXY_LOGIN` | Authorization login (empty by default) | `username` | +| `PROXY_PASSWORD` | Authorization password (empty by default) | `password` | +| `PRIMARY_RESOLVER` | Primary nameserver (dns resolver; `1.0.0.1` by default) | `8.8.8.8:5353/tcp` | +| `SECONDARY_RESOLVER` | Secondary nameserver (dns resolver; `8.8.4.4` by default) | `2001:4860:4860::8844` | +| `MAX_CONNECTIONS` | Maximal connections count (`1024` by default) | `2056` | +| `PROXY_PORT` | HTTP proxy port number (`3128` by default) | `8080` | +| `SOCKS_PORT` | SOCKS proxy port number (`1080` by default) | `8888` | ## How can I use this? @@ -81,7 +87,7 @@ Changes log can be [found here][link_changes_log]. [![Issues][badge_issues]][link_issues] [![Issues][badge_pulls]][link_pulls] -If you will find any package errors, please, [make an issue][link_create_issue] in current repository. +If you find any errors, please, [make an issue][link_create_issue] in current repository. ## License @@ -106,4 +112,5 @@ WTFPL. Use anywhere for your pleasure. [link_license]:https://github.com/tarampampam/3proxy-docker/blob/master/LICENSE [link_docker_tags]:https://hub.docker.com/r/tarampampam/3proxy/tags [link_docker_hub]:https://hub.docker.com/r/tarampampam/3proxy/ +[link_ghcr]:https://github.com/tarampampam/3proxy-docker/pkgs/container/3proxy [link_3proxy]:https://github.com/z3APA3A/3proxy diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh deleted file mode 100755 index 4fcc477..0000000 --- a/docker-entrypoint.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -set -e - -PROXY_LOGIN=${PROXY_LOGIN:-} # string -PROXY_PASSWORD=${PROXY_PASSWORD:-} # string -PRIMARY_RESOLVER=${PRIMARY_RESOLVER:-} # string -SECONDARY_RESOLVER=${SECONDARY_RESOLVER:-} # string - -if [ -n "$PROXY_LOGIN" ] && [ -n "$PROXY_PASSWORD" ]; then - echo "$0: setup '${PROXY_LOGIN}:${PROXY_PASSWORD}' as proxy user"; - sed -i "s~#AUTH_SETTINGS~users ${PROXY_LOGIN}:CL:${PROXY_PASSWORD}\nauth strong\nallow ${PROXY_LOGIN}~" /etc/3proxy/3proxy.cfg -fi; - -if [ -n "$PRIMARY_RESOLVER" ]; then - echo "$0: setup '${PRIMARY_RESOLVER}' as the first nameserver"; - sed -i "s~#NSERVER1~nserver ${PRIMARY_RESOLVER}~" /etc/3proxy/3proxy.cfg -fi; - -if [ -n "$SECONDARY_RESOLVER" ]; then - echo "$0: setup '${SECONDARY_RESOLVER}' as the second nameserver"; - sed -i "s~#NSERVER2~nserver ${SECONDARY_RESOLVER}~" /etc/3proxy/3proxy.cfg -fi; - -exec "$@"