Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f42c9285b | ||
|
|
2a4024db68 | ||
|
|
8cdaa01188 | ||
|
|
e4e42b94a3 | ||
|
|
a4ae4feb1f | ||
|
|
276efbfeae | ||
|
|
eabbb17fa5 | ||
|
|
37066552b8 | ||
|
|
fb681a846e | ||
|
|
dcf291de25 | ||
|
|
4f60889624 | ||
|
|
298e65c0b0 | ||
|
|
f3596b86ea | ||
|
|
513a467b11 | ||
|
|
7b2e6ac6da | ||
|
|
a44fde46e6 | ||
|
|
283a52abe6 | ||
|
|
63731eca8c | ||
|
|
7dd058d8aa | ||
|
|
7490d4dce8 | ||
|
|
6d215e502c | ||
|
|
d8f9aa2024 | ||
|
|
98a8747a3c | ||
|
|
1febd8abe7 | ||
|
|
e5e9f108eb | ||
|
|
7b6870751c | ||
|
|
a1a23544ac | ||
|
|
713f37e79c | ||
|
|
597d6e28ec | ||
|
|
40678de18c | ||
|
|
770665806e | ||
|
|
7be7f47fe4 | ||
|
|
fb24456662 | ||
|
|
2e9ef61cf8 | ||
|
|
d332716996 | ||
|
|
7200ecad96 | ||
|
|
93902a6aef | ||
|
|
5f29bf16d7 | ||
|
|
1619760057 | ||
|
|
ab12170222 | ||
|
|
f28aed423b | ||
|
|
1506af7c6c | ||
|
|
68bef38402 | ||
|
|
e17a4f6856 | ||
|
|
1ae0ac52cf | ||
|
|
f82ce4fac2 | ||
|
|
30724ceee3 | ||
|
|
a057e3fb1f | ||
|
|
fa2bd9ac44 | ||
|
|
66c11e684a | ||
|
|
541fac5147 | ||
|
|
978cd98ff3 | ||
|
|
5591967c35 | ||
|
|
f426c0f7e9 | ||
|
|
c374a6f597 | ||
|
|
7650a0e75b | ||
|
|
9fd0a90c69 | ||
|
|
752502d85a | ||
|
|
d72e72e7fc | ||
|
|
b345e9859a | ||
|
|
6e5b989498 | ||
|
|
f62172c9dc | ||
|
|
078a3d9b79 | ||
|
|
659fd3d395 | ||
|
|
bf160a071e | ||
|
|
93339d5159 | ||
|
|
1ef63988a7 | ||
|
|
921fc47ade |
@@ -1,8 +1,6 @@
|
||||
.editorconfig
|
||||
.git
|
||||
.github
|
||||
.idea
|
||||
.vscode
|
||||
temp
|
||||
tmp
|
||||
LICENSE
|
||||
## Ignore everything
|
||||
*
|
||||
|
||||
## Except the following files (and directories)
|
||||
!/3proxy.cfg.json
|
||||
!/3proxy.cfg.mustach
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# EditorConfig docs: <https://editorconfig.org/>
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
@@ -5,8 +7,9 @@ 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}]
|
||||
indent_size = 2
|
||||
[{*.yml,*.yaml}]
|
||||
ij_any_spaces_within_braces = false
|
||||
ij_any_spaces_within_brackets = false
|
||||
|
||||
29
.github/dependabot.yml
vendored
29
.github/dependabot.yml
vendored
@@ -1,21 +1,16 @@
|
||||
# Docs: <https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/customizing-dependency-updates>
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
reviewers:
|
||||
- "tarampampam"
|
||||
assignees:
|
||||
- "tarampampam"
|
||||
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
reviewers:
|
||||
- "tarampampam"
|
||||
assignees:
|
||||
- "tarampampam"
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
groups: {github-actions: {patterns: ['*']}}
|
||||
schedule: {interval: monthly}
|
||||
assignees: [tarampampam]
|
||||
|
||||
- package-ecosystem: docker
|
||||
directory: /
|
||||
groups: {docker: {patterns: ['*']}}
|
||||
schedule: {interval: monthly}
|
||||
assignees: [tarampampam]
|
||||
|
||||
21
.github/labeler.yml
vendored
21
.github/labeler.yml
vendored
@@ -1,21 +0,0 @@
|
||||
docs:
|
||||
- '**/*.md'
|
||||
- '**/*.MD'
|
||||
|
||||
.github:
|
||||
- '.github/**/*'
|
||||
|
||||
CI:
|
||||
- '.github/workflows/**/*'
|
||||
- '.github/actions/**/*'
|
||||
|
||||
docker:
|
||||
- 'Dockerfile'
|
||||
- 'docker/**/*'
|
||||
- '.dockerignore'
|
||||
- 'docker-entrypoint.sh'
|
||||
- '3proxy.cfg'
|
||||
|
||||
dev:
|
||||
- '.gitignore'
|
||||
- '.editorconfig'
|
||||
13
.github/release.yml
vendored
Normal file
13
.github/release.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-release-config.json
|
||||
# docs: https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
|
||||
|
||||
changelog:
|
||||
categories:
|
||||
- title: 🛠 Fixes
|
||||
labels: [type:fix, type:bug]
|
||||
- title: 🚀 Features
|
||||
labels: [type:feature, type:feature_request]
|
||||
- title: 📦 Dependency updates
|
||||
labels: [dependencies]
|
||||
- title: Other Changes
|
||||
labels: ['*']
|
||||
7
.github/renovate.json
vendored
Normal file
7
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"github>tarampampam/.github//renovate/default",
|
||||
":rebaseStalePrs"
|
||||
]
|
||||
}
|
||||
19
.github/workflows/documentation.yml
vendored
Normal file
19
.github/workflows/documentation.yml
vendored
Normal file
@@ -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-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: peter-evans/dockerhub-description@v4 # Action page: <https://github.com/peter-evans/dockerhub-description>
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_LOGIN }}
|
||||
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||
repository: tarampampam/3proxy
|
||||
12
.github/workflows/labeler.yml
vendored
12
.github/workflows/labeler.yml
vendored
@@ -1,12 +0,0 @@
|
||||
name: labeler
|
||||
|
||||
on: [pull_request_target]
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/labeler@v3 # Action page: <https://github.com/actions/labeler>
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
sync-labels: true
|
||||
57
.github/workflows/release.yml
vendored
57
.github/workflows/release.yml
vendored
@@ -1,4 +1,7 @@
|
||||
name: release
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
# docs: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
|
||||
name: 🚀 Release
|
||||
|
||||
on:
|
||||
release: # Docs: <https://git.io/JeBz1#release-event-release>
|
||||
@@ -7,32 +10,28 @@ on:
|
||||
jobs:
|
||||
docker-image:
|
||||
name: Build docker image
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Docker login in default registry
|
||||
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_LOGIN }}" --password-stdin &> /dev/null
|
||||
|
||||
- name: Docker login in ghcr.io # Auth docs: <https://git.io/JLDaw>
|
||||
run: echo "${{ secrets.GHCR_PASSWORD }}" | docker login ghcr.io -u tarampampam --password-stdin
|
||||
|
||||
- name: Generate image tag value
|
||||
id: tag
|
||||
run: echo "::set-output name=value::`echo ${GITHUB_REF##*/} | sed -e 's/^[vV ]*//'`" # `/refs/tags/v1.2.3` -> `1.2.3`
|
||||
|
||||
- name: Build image
|
||||
run: |
|
||||
docker build \
|
||||
--tag "tarampampam/3proxy:${{ steps.tag.outputs.value }}" \
|
||||
--tag "tarampampam/3proxy:latest" \
|
||||
--tag "ghcr.io/tarampampam/3proxy:${{ steps.tag.outputs.value }}" \
|
||||
--tag "ghcr.io/tarampampam/3proxy:latest" \
|
||||
-f ./Dockerfile .
|
||||
|
||||
- name: Push into default registry
|
||||
run: docker push "tarampampam/3proxy:${{ steps.tag.outputs.value }}" && docker push "tarampampam/3proxy:latest"
|
||||
|
||||
- name: Push into ghcr.io
|
||||
run: docker push "ghcr.io/tarampampam/3proxy:${{ steps.tag.outputs.value }}" && docker push "ghcr.io/tarampampam/3proxy:latest"
|
||||
- uses: actions/checkout@v4
|
||||
- {uses: gacts/github-slug@v1, id: slug}
|
||||
- uses: docker/setup-qemu-action@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_LOGIN }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: docker/build-push-action@v6 # Action page: <https://github.com/docker/build-push-action>
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: |
|
||||
tarampampam/3proxy:${{ steps.slug.outputs.version-semantic }}
|
||||
tarampampam/3proxy:latest
|
||||
ghcr.io/${{ github.actor }}/3proxy:${{ steps.slug.outputs.version-semantic }}
|
||||
ghcr.io/${{ github.actor }}/3proxy:latest
|
||||
|
||||
93
.github/workflows/tests.yml
vendored
93
.github/workflows/tests.yml
vendored
@@ -1,70 +1,59 @@
|
||||
name: tests
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
# docs: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||
|
||||
name: 🧪 Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags-ignore:
|
||||
- '**'
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
tags-ignore: ['**']
|
||||
pull_request: {}
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs: # Docs: <https://git.io/JvxXE>
|
||||
build-image:
|
||||
name: Build docker image
|
||||
runs-on: ubuntu-20.04
|
||||
gitleaks:
|
||||
name: Check for GitLeaks
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v2
|
||||
- {uses: actions/checkout@v4, with: {fetch-depth: 0}}
|
||||
- uses: gacts/gitleaks@v1
|
||||
|
||||
- name: Build docker image
|
||||
run: docker build -f ./Dockerfile --tag 3proxy:local .
|
||||
|
||||
- name: Scan image
|
||||
uses: anchore/scan-action@v2 # action page: <https://github.com/anchore/scan-action>
|
||||
with:
|
||||
image: 3proxy:local
|
||||
fail-build: true
|
||||
severity-cutoff: low # negligible, low, medium, high or critical
|
||||
|
||||
- name: Save docker image
|
||||
run: docker save 3proxy:local > ./docker-image.tar
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
build-image:
|
||||
name: Build the docker image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: docker build -f ./Dockerfile --tag 3proxy:local .
|
||||
- run: docker save 3proxy:local > ./docker-image.tar
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docker-image
|
||||
path: ./docker-image.tar
|
||||
retention-days: 1
|
||||
|
||||
try-to-use:
|
||||
name: Build and use docker image (auth ${{ matrix.auth }})
|
||||
runs-on: ubuntu-20.04
|
||||
name: Build and use the docker image (auth ${{ matrix.auth }})
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
auth: [yes, no]
|
||||
needs: [build-image]
|
||||
steps:
|
||||
- name: Download builded docker image
|
||||
uses: actions/download-artifact@v2
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: docker-image
|
||||
path: .artifact
|
||||
|
||||
- name: Prepare image to run
|
||||
working-directory: .artifact
|
||||
- working-directory: .artifact
|
||||
run: docker load < docker-image.tar
|
||||
|
||||
- name: Start server without auth setup
|
||||
if: matrix.auth != 'yes'
|
||||
- if: matrix.auth != 'yes'
|
||||
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" 3proxy:local
|
||||
|
||||
- name: Start server with auth setup
|
||||
if: matrix.auth == 'yes'
|
||||
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" -e "PROXY_LOGIN=evil" -e "PROXY_PASSWORD=live" 3proxy:local
|
||||
|
||||
- name: Pause
|
||||
run: sleep 3
|
||||
|
||||
- if: matrix.auth == 'yes'
|
||||
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" -e "PROXY_LOGIN=evil" -e "PROXY_PASSWORD=live" -e 'EXTRA_ACCOUNTS={"foo":"bar"}' 3proxy:local
|
||||
- run: sleep 3
|
||||
- name: Try to use HTTP proxy
|
||||
if: matrix.auth != 'yes'
|
||||
run: |
|
||||
@@ -73,7 +62,6 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
--connect-timeout 3 \
|
||||
--max-time 3 \
|
||||
https://www.cloudflare.com/robots.txt
|
||||
|
||||
- name: Try to use SOCKS proxy
|
||||
if: matrix.auth != 'yes'
|
||||
run: |
|
||||
@@ -82,7 +70,6 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
--connect-timeout 3 \
|
||||
--max-time 3 \
|
||||
https://www.cloudflare.com/robots.txt
|
||||
|
||||
- name: Try to use HTTP proxy (with auth)
|
||||
if: matrix.auth == 'yes'
|
||||
run: |
|
||||
@@ -92,7 +79,15 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
--connect-timeout 3 \
|
||||
--max-time 3 \
|
||||
https://www.cloudflare.com/robots.txt
|
||||
|
||||
- name: Try to use HTTP proxy (with auth, extra user)
|
||||
if: matrix.auth == 'yes'
|
||||
run: |
|
||||
curl -v --fail \
|
||||
--proxy http://127.0.0.1:3128 \
|
||||
--proxy-user foo:bar \
|
||||
--connect-timeout 3 \
|
||||
--max-time 3 \
|
||||
https://www.cloudflare.com/robots.txt
|
||||
- name: Try to use SOCKS proxy (with auth)
|
||||
if: matrix.auth == 'yes'
|
||||
run: |
|
||||
@@ -102,6 +97,4 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
--connect-timeout 3 \
|
||||
--max-time 3 \
|
||||
https://www.cloudflare.com/robots.txt
|
||||
|
||||
- name: Stop container
|
||||
run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
|
||||
- run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
|
||||
|
||||
24
3proxy.cfg.json
Normal file
24
3proxy.cfg.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"log": {
|
||||
"output": "${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:-}",
|
||||
"extra_accounts": ${EXTRA_ACCOUNTS:-{}}
|
||||
},
|
||||
"ports": {
|
||||
"proxy": "${PROXY_PORT:-3128}",
|
||||
"socks": "${SOCKS_PORT:-1080}"
|
||||
},
|
||||
"extra_config": "${EXTRA_CONFIG}"
|
||||
}
|
||||
@@ -4,27 +4,36 @@ config /etc/3proxy/3proxy.cfg
|
||||
# you may use system to execute some external command if proxy starts
|
||||
system "echo `which 3proxy`': Starting 3proxy'"
|
||||
|
||||
# We can configure nservers to avoid unsafe gethostbyname() usage
|
||||
nserver 1.0.0.1
|
||||
nserver 1.1.1.1
|
||||
nserver 8.8.4.4
|
||||
nserver 8.8.8.8
|
||||
# We can configure nservers to avoid unsafe gethostbyname() usage (max 5 servers)
|
||||
{{#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: <https://3proxy.org/doc/howtor.html#LOGFORMAT>
|
||||
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.extra_accounts.*}} {{ * }}:CL:{{ . }}{{/auth.extra_accounts.*}}
|
||||
auth strong
|
||||
allow {{ auth.login }}{{#auth.extra_accounts.*}},{{ * }}{{/auth.extra_accounts.*}}
|
||||
{{/auth.password=}}{{/auth.login=}}
|
||||
|
||||
proxy -a -p3128
|
||||
socks -a -p1080
|
||||
{{^extra_config=}}
|
||||
|
||||
# Additional configuration
|
||||
{{extra_config}}
|
||||
{{/extra_config=}}
|
||||
|
||||
proxy -a -p{{ ports.proxy }}
|
||||
socks -a -p{{ ports.socks }}
|
||||
|
||||
flush
|
||||
48
CHANGELOG.md
48
CHANGELOG.md
@@ -1,48 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
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.3.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Logging in JSON format
|
||||
|
||||
## v1.2.0
|
||||
|
||||
### Changed
|
||||
|
||||
- 3proxy updated from `0.8.13` up to `0.9.3`
|
||||
|
||||
## v1.1.0
|
||||
|
||||
### Removed
|
||||
|
||||
- Environment variable `AUTH_REQUIRED` support
|
||||
|
||||
### Changed
|
||||
|
||||
- Proxy error pages a little bit styled
|
||||
|
||||
## v1.0.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- Dockerfile and docker entry-point script cleanup
|
||||
|
||||
## v0.1.1
|
||||
|
||||
### Fixed
|
||||
|
||||
- Docker entry-point script clean
|
||||
|
||||
## v0.1.0
|
||||
|
||||
### Changed
|
||||
|
||||
- First project release
|
||||
|
||||
[keepachangelog]:https://keepachangelog.com/en/1.0.0/
|
||||
[semver]:https://semver.org/spec/v2.0.0.html
|
||||
79
Dockerfile
79
Dockerfile
@@ -1,12 +1,13 @@
|
||||
# Image page: <https://hub.docker.com/_/gcc>
|
||||
FROM gcc:11.1.0 as builder
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
# e.g.: `docker build --build-arg "VERSION=0.9.3" .`
|
||||
ARG VERSION="0.9.3"
|
||||
FROM gcc:13.2.0 AS builder
|
||||
|
||||
# renovate: source=github-tags name=z3APA3A/3proxy
|
||||
ARG Z3PROXY_VERSION=0.9.4
|
||||
|
||||
# Fetch 3proxy sources
|
||||
RUN set -x \
|
||||
&& git clone --branch "${VERSION}" https://github.com/z3APA3A/3proxy.git /tmp/3proxy
|
||||
&& git -c advice.detachedHead=false clone --depth 1 --branch "${Z3PROXY_VERSION}" https://github.com/z3APA3A/3proxy.git /tmp/3proxy
|
||||
|
||||
WORKDIR /tmp/3proxy
|
||||
|
||||
@@ -14,10 +15,12 @@ WORKDIR /tmp/3proxy
|
||||
RUN set -x \
|
||||
&& echo '#define ANONYMOUS 1' >> ./src/3proxy.h \
|
||||
# proxy.c source: <https://github.com/z3APA3A/3proxy/blob/0.9.3/src/proxy.c>
|
||||
&& sed -i 's~\(<\/head>\)~<style>html,body{background-color:#222526;color:#fff;font-family:sans-serif;\
|
||||
text-align:center;display:flex;flex-direction:column;justify-content:center}h1,h2{margin-bottom:0;font-size:2.5em}\
|
||||
h2::before{content:'"'"'Proxy error'"'"';display:block;font-size:0.4em;color:#bbb;font-weight:100}\
|
||||
h3,p{color:#bbb}</style>\1~' ./src/proxy.c \
|
||||
&& sed -i 's~\(<\/head>\)~<style>:root{--color-bg-primary:#fff;--color-text-primary:#131313;--color-text-secondary:#232323}\
|
||||
@media (prefers-color-scheme: dark){:root{--color-bg-primary:#212121;--color-text-primary:#fafafa;--color-text-secondary:#bbb}}\
|
||||
html,body{height:100%;font-family:sans-serif;background-color:var(--color-bg-primary);color:var(--color-text-primary);margin:0;\
|
||||
padding:0;text-align:center}body{align-items:center;display:flex;justify-content:center;flex-direction:column;height:100vh}\
|
||||
h1,h2{margin-bottom:0;font-size:2.5em}h2::before{content:'"'"'Proxy error'"'"';display:block;font-size:.4em;\
|
||||
color:var(--color-text-secondary);font-weight:100}h3,p{color:var(--color-text-secondary)}</style>\1~' ./src/proxy.c \
|
||||
&& cat ./src/proxy.c | grep '</head>'
|
||||
|
||||
# And compile
|
||||
@@ -34,39 +37,33 @@ RUN set -x \
|
||||
&& strip ./bin/SSLPlugin.ld.so
|
||||
|
||||
# Prepare filesystem for 3proxy running
|
||||
FROM busybox:1.32-glibc as buffer
|
||||
FROM alpine:latest AS buffer
|
||||
|
||||
# Copy binaries
|
||||
COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.* /lib/
|
||||
COPY --from=builder /tmp/3proxy/bin/3proxy /bin/
|
||||
COPY --from=builder /tmp/3proxy/bin/*.ld.so /usr/local/3proxy/libexec/
|
||||
# create a directory for the future root filesystem
|
||||
WORKDIR /tmp/rootfs
|
||||
|
||||
# Create unprivileged user
|
||||
# prepare the root filesystem
|
||||
RUN set -x \
|
||||
&& adduser \
|
||||
--disabled-password \
|
||||
--gecos "" \
|
||||
--home /nonexistent \
|
||||
--shell /sbin/nologin \
|
||||
--no-create-home \
|
||||
--uid 10001 \
|
||||
3proxy
|
||||
&& mkdir -p ./etc ./bin ./usr/local/3proxy/libexec ./etc/3proxy \
|
||||
&& echo '3proxy:x:10001:10001::/nonexistent:/sbin/nologin' > ./etc/passwd \
|
||||
&& echo '3proxy:x:10001:' > ./etc/group \
|
||||
&& apk add --no-cache --virtual .build-deps curl ca-certificates \
|
||||
&& update-ca-certificates \
|
||||
&& curl -SsL -o ./bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_$(arch)" \
|
||||
&& chmod +x ./bin/dumb-init \
|
||||
&& apk del .build-deps
|
||||
|
||||
# Prepare files and directories
|
||||
RUN set -x \
|
||||
&& chown -R 10001:10001 /usr/local/3proxy \
|
||||
&& chmod -R 550 /usr/local/3proxy \
|
||||
&& chmod -R 555 /usr/local/3proxy/libexec \
|
||||
&& chown -R root /usr/local/3proxy/libexec \
|
||||
&& mkdir /etc/3proxy \
|
||||
&& chown -R 10001:10001 /etc/3proxy
|
||||
COPY --from=builder /lib/*-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 --from=ghcr.io/tarampampam/mustpl:0.1.1 /bin/mustpl ./bin/mustpl
|
||||
COPY 3proxy.cfg.json ./etc/3proxy/3proxy.cfg.json
|
||||
COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach
|
||||
|
||||
# Copy our config and entrypoint script
|
||||
COPY 3proxy.cfg /etc/3proxy/3proxy.cfg
|
||||
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
||||
RUN chown -R 10001:10001 ./etc/3proxy
|
||||
|
||||
# Split all buffered layers into one
|
||||
FROM scratch
|
||||
# Merge into a single layer
|
||||
FROM busybox:stable-glibc
|
||||
|
||||
LABEL \
|
||||
org.opencontainers.image.title="3proxy" \
|
||||
@@ -77,11 +74,17 @@ LABEL \
|
||||
org.opencontainers.image.licenses="WTFPL"
|
||||
|
||||
# Import from builder
|
||||
COPY --from=buffer / /
|
||||
COPY --from=buffer /tmp/rootfs /
|
||||
|
||||
# Use an unprivileged user
|
||||
USER 3proxy:3proxy
|
||||
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
ENTRYPOINT [ \
|
||||
"/bin/mustpl", \
|
||||
"-f", "/etc/3proxy/3proxy.cfg.json", \
|
||||
"-o", "/etc/3proxy/3proxy.cfg", \
|
||||
"/etc/3proxy/3proxy.cfg.mustach", \
|
||||
"--", "/bin/dumb-init" \
|
||||
]
|
||||
|
||||
CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"]
|
||||
|
||||
71
README.md
71
README.md
@@ -10,31 +10,53 @@
|
||||
[![Docker Pulls][badge_docker_pulls]][link_docker_hub]
|
||||
[![License][badge_license]][link_license]
|
||||
|
||||
## Why this image created?
|
||||
## Why was this image created?
|
||||
|
||||
3proxy is awesome and lightweight proxy-server. This image contains stable version with it and can be configured using environment variables. By default, it uses anonymous (information about client hiding) proxy settings. Logging in JSON format.
|
||||
3proxy is an awesome and lightweight proxy server. This image contains the stable version and can be configured using environment variables. By default, it uses anonymous proxy settings to hide client information and logs in JSON format.
|
||||
|
||||
> Page on `hub.docker.com` can be [found here][link_docker_hub].
|
||||
|
||||
TCP ports:
|
||||
|
||||
Port number | Description
|
||||
----------- | -----------
|
||||
`3128` | [HTTP proxy](https://3proxy.org/doc/man8/proxy.8.html)
|
||||
`1080` | [SOCKS proxy](https://3proxy.org/doc/man8/socks.8.html)
|
||||
| Port number | Description |
|
||||
|-------------|---------------------------------------------------------|
|
||||
| `3128` | [HTTP proxy](https://3proxy.org/doc/man8/proxy.8.html) |
|
||||
| `1080` | [SOCKS proxy](https://3proxy.org/doc/man8/socks.8.html) |
|
||||
|
||||
## Supported tags
|
||||
|
||||
[][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].
|
||||
|
||||
Since v1.8.2 architecture `arm64` (and `amd64` of course) is supported:
|
||||
|
||||
```shell
|
||||
$ docker run --rm mplatform/mquery ghcr.io/tarampampam/3proxy:1.8.2
|
||||
Image: ghcr.io/tarampampam/3proxy:1.8.2
|
||||
* Manifest List: Yes (Image type: application/vnd.docker.distribution.manifest.list.v2+json)
|
||||
* Supported platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
```
|
||||
|
||||
## Supported environment variables
|
||||
|
||||
Variable name | Description | Example
|
||||
---------------- | ----------------------------------------- | ---------------
|
||||
`PROXY_LOGIN` | Authorization login | `username`
|
||||
`PROXY_PASSWORD` | Authorization password | `password`
|
||||
| Variable name | Description | Example |
|
||||
|----------------------|-----------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
||||
| `PROXY_LOGIN` | Authorization login (empty by default) | `username` |
|
||||
| `PROXY_PASSWORD` | Authorization password (empty by default) | `password` |
|
||||
| `EXTRA_ACCOUNTS` | Additional proxy users | `{"evil":"live", "guest":"pass"}` |
|
||||
| `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` |
|
||||
| `EXTRA_CONFIG` | Additional 3proxy configuration (will be added to the **end** of the config file, but before the `proxy` and `flush`) | `# line 1\n# line 2` |
|
||||
| `LOG_OUTPUT` | Log output file path (`/dev/stdout` by default, set `/dev/null` to disable logging) | `/tmp/3proxy.log` |
|
||||
|
||||
## How can I use this?
|
||||
|
||||
@@ -44,10 +66,10 @@ For example:
|
||||
$ docker run --rm -d \
|
||||
-p "3128:3128/tcp" \
|
||||
-p "1080:1080/tcp" \
|
||||
tarampampam/3proxy:latest
|
||||
ghcr.io/tarampampam/3proxy:latest
|
||||
```
|
||||
|
||||
Or with auth settings:
|
||||
Or with auth & resolver settings:
|
||||
|
||||
```bash
|
||||
$ docker run --rm -d \
|
||||
@@ -55,37 +77,31 @@ $ docker run --rm -d \
|
||||
-p "1080:1080/tcp" \
|
||||
-e "PROXY_LOGIN=evil" \
|
||||
-e "PROXY_PASSWORD=live" \
|
||||
tarampampam/3proxy:latest
|
||||
-e "PRIMARY_RESOLVER=2001:4860:4860::8888" \
|
||||
ghcr.io/tarampampam/3proxy:latest
|
||||
```
|
||||
|
||||
## Releasing
|
||||
|
||||
New versions publishing is very simple - just make required changes in this repository, update [changelog file](CHANGELOG.md) and "publish" new release using repo releases page.
|
||||
Publishing new versions is very simple: just make the required changes in this repository, update the [changelog file](CHANGELOG.md), and "publish" a new release using the repository's releases page.
|
||||
|
||||
Docker images will be build and published automatically.
|
||||
Docker images will be built and published automatically.
|
||||
|
||||
> New release will overwrite the `latest` docker image tag in both registers.
|
||||
|
||||
## Changes log
|
||||
|
||||
[![Release date][badge_release_date]][link_releases]
|
||||
[![Commits since latest release][badge_commits_since_release]][link_commits]
|
||||
|
||||
Changes log can be [found here][link_changes_log].
|
||||
> The new release will overwrite the `latest` docker image tag in both registries.
|
||||
|
||||
## Support
|
||||
|
||||
[![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 the current repository.
|
||||
|
||||
## License
|
||||
|
||||
WTFPL. Use anywhere for your pleasure.
|
||||
|
||||
[badge_build_status]:https://img.shields.io/github/workflow/status/tarampampam/3proxy-docker/tests/master?logo=github&label=build
|
||||
[badge_release_status]:https://img.shields.io/github/workflow/status/tarampampam/3proxy-docker/release?logo=github&label=release
|
||||
[badge_build_status]:https://img.shields.io/github/actions/workflow/status/tarampampam/3proxy-docker/tests.yml?branch=master&logo=github&label=build
|
||||
[badge_release_status]:https://img.shields.io/github/actions/workflow/status/tarampampam/3proxy-docker/release.yml?logo=github&label=release
|
||||
[badge_release_date]:https://img.shields.io/github/release-date/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
||||
[badge_commits_since_release]:https://img.shields.io/github/commits-since/tarampampam/3proxy-docker/latest.svg?style=flat-square&maxAge=180
|
||||
[badge_issues]:https://img.shields.io/github/issues/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
||||
@@ -103,4 +119,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
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
PROXY_LOGIN=${PROXY_LOGIN:-} # string
|
||||
PROXY_PASSWORD=${PROXY_PASSWORD:-} # 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;
|
||||
|
||||
exec "$@"
|
||||
Reference in New Issue
Block a user