Compare commits
32 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 |
@@ -1,8 +1,6 @@
|
|||||||
.editorconfig
|
## Ignore everything
|
||||||
.git
|
*
|
||||||
.github
|
|
||||||
.idea
|
## Except the following files (and directories)
|
||||||
.vscode
|
!/3proxy.cfg.json
|
||||||
temp
|
!/3proxy.cfg.mustach
|
||||||
tmp
|
|
||||||
LICENSE
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# EditorConfig docs: <https://editorconfig.org/>
|
||||||
|
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
@@ -8,5 +10,6 @@ indent_style = space
|
|||||||
indent_size = 2
|
indent_size = 2
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
[Dockerfile]
|
[{*.yml,*.yaml}]
|
||||||
indent_size = 4
|
ij_any_spaces_within_braces = false
|
||||||
|
ij_any_spaces_within_brackets = false
|
||||||
|
|||||||
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -5,12 +5,12 @@ version: 2
|
|||||||
updates:
|
updates:
|
||||||
- package-ecosystem: github-actions
|
- package-ecosystem: github-actions
|
||||||
directory: /
|
directory: /
|
||||||
|
groups: {github-actions: {patterns: ['*']}}
|
||||||
schedule: {interval: monthly}
|
schedule: {interval: monthly}
|
||||||
reviewers: [tarampampam]
|
|
||||||
assignees: [tarampampam]
|
assignees: [tarampampam]
|
||||||
|
|
||||||
- package-ecosystem: docker
|
- package-ecosystem: docker
|
||||||
directory: /
|
directory: /
|
||||||
|
groups: {docker: {patterns: ['*']}}
|
||||||
schedule: {interval: monthly}
|
schedule: {interval: monthly}
|
||||||
reviewers: [tarampampam]
|
|
||||||
assignees: [tarampampam]
|
assignees: [tarampampam]
|
||||||
|
|||||||
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: ['*']
|
||||||
6
.github/workflows/documentation.yml
vendored
6
.github/workflows/documentation.yml
vendored
@@ -8,11 +8,11 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
docker-hub-description:
|
docker-hub-description:
|
||||||
name: Docker Hub Description
|
name: Docker Hub Description
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: peter-evans/dockerhub-description@v3 # Action page: <https://github.com/peter-evans/dockerhub-description>
|
- uses: peter-evans/dockerhub-description@v4 # Action page: <https://github.com/peter-evans/dockerhub-description>
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_LOGIN }}
|
username: ${{ secrets.DOCKER_LOGIN }}
|
||||||
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||||
|
|||||||
31
.github/workflows/release.yml
vendored
31
.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:
|
on:
|
||||||
release: # Docs: <https://git.io/JeBz1#release-event-release>
|
release: # Docs: <https://git.io/JeBz1#release-event-release>
|
||||||
@@ -7,34 +10,26 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
docker-image:
|
docker-image:
|
||||||
name: Build docker image
|
name: Build docker image
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v3
|
- {uses: gacts/github-slug@v1, id: slug}
|
||||||
|
- uses: docker/setup-qemu-action@v3
|
||||||
- uses: gacts/github-slug@v1
|
- uses: docker/setup-buildx-action@v3
|
||||||
id: slug
|
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||||
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- name: Login to default Container Registry
|
|
||||||
uses: docker/login-action@v2 # Action page: <https://github.com/docker/login-action>
|
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_LOGIN }}
|
username: ${{ secrets.DOCKER_LOGIN }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||||
- name: Login to GitHub Container Registry
|
|
||||||
uses: docker/login-action@v2 # Action page: <https://github.com/docker/login-action>
|
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- uses: docker/build-push-action@v6 # Action page: <https://github.com/docker/build-push-action>
|
||||||
- uses: docker/build-push-action@v3 # Action page: <https://github.com/docker/build-push-action>
|
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: Dockerfile
|
|
||||||
push: true
|
push: true
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
tags: |
|
tags: |
|
||||||
tarampampam/3proxy:${{ steps.slug.outputs.version-semantic }}
|
tarampampam/3proxy:${{ steps.slug.outputs.version-semantic }}
|
||||||
tarampampam/3proxy:latest
|
tarampampam/3proxy:latest
|
||||||
|
|||||||
106
.github/workflows/tests.yml
vendored
106
.github/workflows/tests.yml
vendored
@@ -1,4 +1,7 @@
|
|||||||
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:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -12,94 +15,45 @@ concurrency:
|
|||||||
|
|
||||||
jobs: # Docs: <https://git.io/JvxXE>
|
jobs: # Docs: <https://git.io/JvxXE>
|
||||||
gitleaks:
|
gitleaks:
|
||||||
name: Gitleaks
|
name: Check for GitLeaks
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- {uses: actions/checkout@v4, with: {fetch-depth: 0}}
|
||||||
with: {fetch-depth: 0}
|
- uses: gacts/gitleaks@v1
|
||||||
|
|
||||||
- name: Check for GitLeaks
|
|
||||||
uses: gacts/gitleaks@v1 # Action page: <https://github.com/gacts/gitleaks>
|
|
||||||
|
|
||||||
build-image:
|
build-image:
|
||||||
name: Build docker image
|
name: Build the docker image
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v3
|
- run: docker build -f ./Dockerfile --tag 3proxy:local .
|
||||||
|
- run: docker save 3proxy:local > ./docker-image.tar
|
||||||
- name: Build docker image
|
- uses: actions/upload-artifact@v4
|
||||||
run: docker build -f ./Dockerfile --tag 3proxy:local .
|
|
||||||
|
|
||||||
- name: Scan image
|
|
||||||
uses: anchore/scan-action@v3 # 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@v3
|
|
||||||
with:
|
with:
|
||||||
name: docker-image
|
name: docker-image
|
||||||
path: ./docker-image.tar
|
path: ./docker-image.tar
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
scan-image:
|
|
||||||
name: Scan docker image
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
needs: [build-image]
|
|
||||||
steps:
|
|
||||||
- name: Download built docker image
|
|
||||||
uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: docker-image
|
|
||||||
path: .artifact
|
|
||||||
|
|
||||||
- name: Prepare image to run
|
|
||||||
working-directory: .artifact
|
|
||||||
run: docker load < docker-image.tar
|
|
||||||
|
|
||||||
- name: Scan image
|
|
||||||
uses: anchore/scan-action@v3 # action page: <https://github.com/anchore/scan-action>
|
|
||||||
with:
|
|
||||||
image: 3proxy:local
|
|
||||||
fail-build: true
|
|
||||||
severity-cutoff: low # negligible, low, medium, high or critical
|
|
||||||
|
|
||||||
try-to-use:
|
try-to-use:
|
||||||
name: Build and use docker image (auth ${{ matrix.auth }})
|
name: Build and use the docker image (auth ${{ matrix.auth }})
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
auth: [yes, no]
|
auth: [yes, no]
|
||||||
needs: [build-image]
|
needs: [build-image]
|
||||||
steps:
|
steps:
|
||||||
- name: Download builded docker image
|
- uses: actions/download-artifact@v4
|
||||||
uses: actions/download-artifact@v3
|
|
||||||
with:
|
with:
|
||||||
name: docker-image
|
name: docker-image
|
||||||
path: .artifact
|
path: .artifact
|
||||||
|
- working-directory: .artifact
|
||||||
- name: Prepare image to run
|
|
||||||
working-directory: .artifact
|
|
||||||
run: docker load < docker-image.tar
|
run: docker load < docker-image.tar
|
||||||
|
- if: matrix.auth != 'yes'
|
||||||
- name: Start server without auth setup
|
|
||||||
if: matrix.auth != 'yes'
|
|
||||||
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" 3proxy:local
|
run: docker run --rm -d -p "3128:3128/tcp" -p "1080:1080/tcp" 3proxy:local
|
||||||
|
- if: matrix.auth == 'yes'
|
||||||
- name: Start server with auth setup
|
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
|
||||||
if: matrix.auth == 'yes'
|
- run: sleep 3
|
||||||
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
|
|
||||||
|
|
||||||
- name: Try to use HTTP proxy
|
- name: Try to use HTTP proxy
|
||||||
if: matrix.auth != 'yes'
|
if: matrix.auth != 'yes'
|
||||||
run: |
|
run: |
|
||||||
@@ -108,7 +62,6 @@ jobs: # Docs: <https://git.io/JvxXE>
|
|||||||
--connect-timeout 3 \
|
--connect-timeout 3 \
|
||||||
--max-time 3 \
|
--max-time 3 \
|
||||||
https://www.cloudflare.com/robots.txt
|
https://www.cloudflare.com/robots.txt
|
||||||
|
|
||||||
- name: Try to use SOCKS proxy
|
- name: Try to use SOCKS proxy
|
||||||
if: matrix.auth != 'yes'
|
if: matrix.auth != 'yes'
|
||||||
run: |
|
run: |
|
||||||
@@ -117,7 +70,6 @@ jobs: # Docs: <https://git.io/JvxXE>
|
|||||||
--connect-timeout 3 \
|
--connect-timeout 3 \
|
||||||
--max-time 3 \
|
--max-time 3 \
|
||||||
https://www.cloudflare.com/robots.txt
|
https://www.cloudflare.com/robots.txt
|
||||||
|
|
||||||
- name: Try to use HTTP proxy (with auth)
|
- name: Try to use HTTP proxy (with auth)
|
||||||
if: matrix.auth == 'yes'
|
if: matrix.auth == 'yes'
|
||||||
run: |
|
run: |
|
||||||
@@ -127,7 +79,15 @@ jobs: # Docs: <https://git.io/JvxXE>
|
|||||||
--connect-timeout 3 \
|
--connect-timeout 3 \
|
||||||
--max-time 3 \
|
--max-time 3 \
|
||||||
https://www.cloudflare.com/robots.txt
|
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)
|
- name: Try to use SOCKS proxy (with auth)
|
||||||
if: matrix.auth == 'yes'
|
if: matrix.auth == 'yes'
|
||||||
run: |
|
run: |
|
||||||
@@ -137,6 +97,4 @@ jobs: # Docs: <https://git.io/JvxXE>
|
|||||||
--connect-timeout 3 \
|
--connect-timeout 3 \
|
||||||
--max-time 3 \
|
--max-time 3 \
|
||||||
https://www.cloudflare.com/robots.txt
|
https://www.cloudflare.com/robots.txt
|
||||||
|
- run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
|
||||||
- name: Stop container
|
|
||||||
run: docker stop $(docker ps -a --filter ancestor=3proxy:local -q)
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"log": {
|
"log": {
|
||||||
"output": "/dev/stdout"
|
"output": "${LOG_OUTPUT:-/dev/stdout}"
|
||||||
},
|
},
|
||||||
"name_servers": [
|
"name_servers": [
|
||||||
"${PRIMARY_RESOLVER:-1.0.0.1}",
|
"${PRIMARY_RESOLVER:-1.0.0.1}",
|
||||||
@@ -13,10 +13,12 @@
|
|||||||
"max_connections": "${MAX_CONNECTIONS:-1024}",
|
"max_connections": "${MAX_CONNECTIONS:-1024}",
|
||||||
"auth": {
|
"auth": {
|
||||||
"login": "${PROXY_LOGIN:-}",
|
"login": "${PROXY_LOGIN:-}",
|
||||||
"password": "${PROXY_PASSWORD:-}"
|
"password": "${PROXY_PASSWORD:-}",
|
||||||
|
"extra_accounts": ${EXTRA_ACCOUNTS:-{}}
|
||||||
},
|
},
|
||||||
"ports": {
|
"ports": {
|
||||||
"proxy": "${PROXY_PORT:-3128}",
|
"proxy": "${PROXY_PORT:-3128}",
|
||||||
"socks": "${SOCKS_PORT:-1080}"
|
"socks": "${SOCKS_PORT:-1080}"
|
||||||
}
|
},
|
||||||
|
"extra_config": "${EXTRA_CONFIG}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,11 +22,17 @@ logformat "-\""+_G{""time_unix"":%t, ""proxy"":{""type:"":""%N"", ""port"":%p},
|
|||||||
maxconn {{ max_connections }}
|
maxconn {{ max_connections }}
|
||||||
|
|
||||||
{{^auth.login=}}{{^auth.password=}}
|
{{^auth.login=}}{{^auth.password=}}
|
||||||
users {{ auth.login }}:CL:{{ auth.password }}
|
users {{ auth.login }}:CL:{{ auth.password }}{{#auth.extra_accounts.*}} {{ * }}:CL:{{ . }}{{/auth.extra_accounts.*}}
|
||||||
auth strong
|
auth strong
|
||||||
allow {{ auth.login }}
|
allow {{ auth.login }}{{#auth.extra_accounts.*}},{{ * }}{{/auth.extra_accounts.*}}
|
||||||
{{/auth.password=}}{{/auth.login=}}
|
{{/auth.password=}}{{/auth.login=}}
|
||||||
|
|
||||||
|
{{^extra_config=}}
|
||||||
|
|
||||||
|
# Additional configuration
|
||||||
|
{{extra_config}}
|
||||||
|
{{/extra_config=}}
|
||||||
|
|
||||||
proxy -a -p{{ ports.proxy }}
|
proxy -a -p{{ ports.proxy }}
|
||||||
socks -a -p{{ ports.socks }}
|
socks -a -p{{ ports.socks }}
|
||||||
|
|
||||||
|
|||||||
85
CHANGELOG.md
85
CHANGELOG.md
@@ -1,85 +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.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
|
|
||||||
|
|
||||||
- Possibility of changing DNS resolvers using environment variables `PRIMARY_RESOLVER` (primary) and `SECONDARY_RESOLVER` (secondary)
|
|
||||||
|
|
||||||
## v1.5.0
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Docker image building optimized
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Healthcheck in the dockerfile
|
|
||||||
|
|
||||||
## v1.4.0
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- 3proxy updated from `0.9.3` up to `0.9.4`
|
|
||||||
|
|
||||||
## 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
|
|
||||||
28
Dockerfile
28
Dockerfile
@@ -1,5 +1,6 @@
|
|||||||
# Image page: <https://hub.docker.com/_/gcc>
|
# syntax=docker/dockerfile:1
|
||||||
FROM gcc:12.1.0 as builder
|
|
||||||
|
FROM gcc:13.2.0 AS builder
|
||||||
|
|
||||||
# renovate: source=github-tags name=z3APA3A/3proxy
|
# renovate: source=github-tags name=z3APA3A/3proxy
|
||||||
ARG Z3PROXY_VERSION=0.9.4
|
ARG Z3PROXY_VERSION=0.9.4
|
||||||
@@ -14,10 +15,12 @@ WORKDIR /tmp/3proxy
|
|||||||
RUN set -x \
|
RUN set -x \
|
||||||
&& echo '#define ANONYMOUS 1' >> ./src/3proxy.h \
|
&& echo '#define ANONYMOUS 1' >> ./src/3proxy.h \
|
||||||
# proxy.c source: <https://github.com/z3APA3A/3proxy/blob/0.9.3/src/proxy.c>
|
# 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;\
|
&& sed -i 's~\(<\/head>\)~<style>:root{--color-bg-primary:#fff;--color-text-primary:#131313;--color-text-secondary:#232323}\
|
||||||
text-align:center;display:flex;flex-direction:column;justify-content:center}h1,h2{margin-bottom:0;font-size:2.5em}\
|
@media (prefers-color-scheme: dark){:root{--color-bg-primary:#212121;--color-text-primary:#fafafa;--color-text-secondary:#bbb}}\
|
||||||
h2::before{content:'"'"'Proxy error'"'"';display:block;font-size:0.4em;color:#bbb;font-weight:100}\
|
html,body{height:100%;font-family:sans-serif;background-color:var(--color-bg-primary);color:var(--color-text-primary);margin:0;\
|
||||||
h3,p{color:#bbb}</style>\1~' ./src/proxy.c \
|
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>'
|
&& cat ./src/proxy.c | grep '</head>'
|
||||||
|
|
||||||
# And compile
|
# And compile
|
||||||
@@ -34,7 +37,7 @@ RUN set -x \
|
|||||||
&& strip ./bin/SSLPlugin.ld.so
|
&& strip ./bin/SSLPlugin.ld.so
|
||||||
|
|
||||||
# Prepare filesystem for 3proxy running
|
# Prepare filesystem for 3proxy running
|
||||||
FROM busybox:stable-glibc as buffer
|
FROM alpine:latest AS buffer
|
||||||
|
|
||||||
# create a directory for the future root filesystem
|
# create a directory for the future root filesystem
|
||||||
WORKDIR /tmp/rootfs
|
WORKDIR /tmp/rootfs
|
||||||
@@ -44,13 +47,16 @@ RUN set -x \
|
|||||||
&& mkdir -p ./etc ./bin ./usr/local/3proxy/libexec ./etc/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:10001::/nonexistent:/sbin/nologin' > ./etc/passwd \
|
||||||
&& echo '3proxy:x:10001:' > ./etc/group \
|
&& echo '3proxy:x:10001:' > ./etc/group \
|
||||||
&& wget -O ./bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64" \
|
&& apk add --no-cache --virtual .build-deps curl ca-certificates \
|
||||||
&& chmod +x ./bin/dumb-init
|
&& 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
|
||||||
|
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.* ./lib/
|
COPY --from=builder /lib/*-linux-gnu/libdl.so.* ./lib/
|
||||||
COPY --from=builder /tmp/3proxy/bin/3proxy ./bin/3proxy
|
COPY --from=builder /tmp/3proxy/bin/3proxy ./bin/3proxy
|
||||||
COPY --from=builder /tmp/3proxy/bin/*.ld.so ./usr/local/3proxy/libexec/
|
COPY --from=builder /tmp/3proxy/bin/*.ld.so ./usr/local/3proxy/libexec/
|
||||||
COPY --from=ghcr.io/tarampampam/mustpl:0.1.0 /bin/mustpl ./bin/mustpl
|
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.json ./etc/3proxy/3proxy.cfg.json
|
||||||
COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach
|
COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach
|
||||||
|
|
||||||
|
|||||||
59
README.md
59
README.md
@@ -10,9 +10,9 @@
|
|||||||
[![Docker Pulls][badge_docker_pulls]][link_docker_hub]
|
[![Docker Pulls][badge_docker_pulls]][link_docker_hub]
|
||||||
[![License][badge_license]][link_license]
|
[![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].
|
> Page on `hub.docker.com` can be [found here][link_docker_hub].
|
||||||
|
|
||||||
@@ -32,17 +32,31 @@ TCP ports:
|
|||||||
|
|
||||||
All supported image tags [can be found here][link_docker_tags].
|
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
|
## Supported environment variables
|
||||||
|
|
||||||
| Variable name | Description | Example |
|
| Variable name | Description | Example |
|
||||||
|----------------------|-----------------------------------------------------------|------------------------|
|
|----------------------|-----------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
||||||
| `PROXY_LOGIN` | Authorization login (empty by default) | `username` |
|
| `PROXY_LOGIN` | Authorization login (empty by default) | `username` |
|
||||||
| `PROXY_PASSWORD` | Authorization password (empty by default) | `password` |
|
| `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` |
|
| `EXTRA_ACCOUNTS` | Additional proxy users | `{"evil":"live", "guest":"pass"}` |
|
||||||
| `SECONDARY_RESOLVER` | Secondary nameserver (dns resolver; `8.8.4.4` by default) | `2001:4860:4860::8844` |
|
| `PRIMARY_RESOLVER` | Primary nameserver (dns resolver; `1.0.0.1` by default) | `8.8.8.8:5353/tcp` |
|
||||||
| `MAX_CONNECTIONS` | Maximal connections count (`1024` by default) | `2056` |
|
| `SECONDARY_RESOLVER` | Secondary nameserver (dns resolver; `8.8.4.4` by default) | `2001:4860:4860::8844` |
|
||||||
| `PROXY_PORT` | HTTP proxy port number (`3128` by default) | `8080` |
|
| `MAX_CONNECTIONS` | Maximal connections count (`1024` by default) | `2056` |
|
||||||
| `SOCKS_PORT` | SOCKS proxy port number (`1080` by default) | `8888` |
|
| `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?
|
## How can I use this?
|
||||||
|
|
||||||
@@ -52,7 +66,7 @@ For example:
|
|||||||
$ docker run --rm -d \
|
$ docker run --rm -d \
|
||||||
-p "3128:3128/tcp" \
|
-p "3128:3128/tcp" \
|
||||||
-p "1080:1080/tcp" \
|
-p "1080:1080/tcp" \
|
||||||
tarampampam/3proxy:latest
|
ghcr.io/tarampampam/3proxy:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
Or with auth & resolver settings:
|
Or with auth & resolver settings:
|
||||||
@@ -64,37 +78,30 @@ $ docker run --rm -d \
|
|||||||
-e "PROXY_LOGIN=evil" \
|
-e "PROXY_LOGIN=evil" \
|
||||||
-e "PROXY_PASSWORD=live" \
|
-e "PROXY_PASSWORD=live" \
|
||||||
-e "PRIMARY_RESOLVER=2001:4860:4860::8888" \
|
-e "PRIMARY_RESOLVER=2001:4860:4860::8888" \
|
||||||
tarampampam/3proxy:latest
|
ghcr.io/tarampampam/3proxy:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Releasing
|
## 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.
|
> The new release will overwrite the `latest` docker image tag in both registries.
|
||||||
|
|
||||||
## 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].
|
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
[![Issues][badge_issues]][link_issues]
|
[![Issues][badge_issues]][link_issues]
|
||||||
[![Issues][badge_pulls]][link_pulls]
|
[![Issues][badge_pulls]][link_pulls]
|
||||||
|
|
||||||
If you find any 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
|
## License
|
||||||
|
|
||||||
WTFPL. Use anywhere for your pleasure.
|
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_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/workflow/status/tarampampam/3proxy-docker/release?logo=github&label=release
|
[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_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_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
|
[badge_issues]:https://img.shields.io/github/issues/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
||||||
|
|||||||
Reference in New Issue
Block a user