Compare commits
40 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4a3948a995 | ||
|
a6a3a667ac | ||
|
006e4b0fb8 | ||
|
5d1c1ff91b | ||
|
62aa4d4d4e | ||
|
df2468d8de | ||
|
53e8111ec3 | ||
|
821281d71f | ||
|
e646bd801e | ||
|
9791f4a007 | ||
|
29d2351597 | ||
|
46cfd03a37 | ||
|
873c511f96 | ||
|
38425621b6 | ||
|
4d191d65b6 | ||
|
d4459e5346 | ||
|
1f42c9285b | ||
|
2a4024db68 | ||
|
8cdaa01188 | ||
|
e4e42b94a3 | ||
|
a4ae4feb1f | ||
|
276efbfeae | ||
|
eabbb17fa5 | ||
|
37066552b8 | ||
|
fb681a846e | ||
|
dcf291de25 | ||
|
4f60889624 | ||
|
298e65c0b0 | ||
|
f3596b86ea | ||
|
513a467b11 | ||
|
7b2e6ac6da | ||
|
a44fde46e6 | ||
|
283a52abe6 | ||
|
63731eca8c | ||
|
7dd058d8aa | ||
|
7490d4dce8 | ||
|
6d215e502c | ||
|
d8f9aa2024 | ||
|
98a8747a3c | ||
|
1febd8abe7 |
@ -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
|
||||||
|
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@ -1,16 +1,17 @@
|
|||||||
# Docs: <https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/customizing-dependency-updates>
|
# yaml-language-server: $schema=https://json.schemastore.org/dependabot-2.0.json
|
||||||
|
# docs: https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/customizing-dependency-updates
|
||||||
|
|
||||||
version: 2
|
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: ['*']
|
11
.github/workflows/documentation.yml
vendored
11
.github/workflows/documentation.yml
vendored
@ -1,4 +1,7 @@
|
|||||||
name: documentation
|
# 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: 📚 Documentation
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -8,11 +11,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
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_LOGIN }}
|
username: ${{ secrets.DOCKER_LOGIN }}
|
||||||
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||||
|
90
.github/workflows/release.yml
vendored
90
.github/workflows/release.yml
vendored
@ -1,40 +1,86 @@
|
|||||||
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: {types: [published]}
|
||||||
types: [published]
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker-image:
|
build-docker-image:
|
||||||
name: Build docker image
|
name: Build the docker image
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
- uses: docker/login-action@v3
|
||||||
- {uses: gacts/github-slug@v1, id: slug}
|
|
||||||
|
|
||||||
- uses: docker/setup-qemu-action@v2
|
|
||||||
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- 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
|
||||||
- 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: gacts/github-slug@v1, id: slug}
|
||||||
- uses: docker/build-push-action@v4 # Action page: <https://github.com/docker/build-push-action>
|
- uses: docker/setup-qemu-action@v3
|
||||||
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
- uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
tags: |
|
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
|
ghcr.io/${{ github.actor }}/3proxy:latest
|
||||||
|
ghcr.io/${{ github.actor }}/3proxy:${{ steps.slug.outputs.version }}
|
||||||
|
ghcr.io/${{ github.actor }}/3proxy:${{ steps.slug.outputs.version-major }}.${{ steps.slug.outputs.version-minor }}
|
||||||
|
ghcr.io/${{ github.actor }}/3proxy:${{ steps.slug.outputs.version-major }}
|
||||||
|
docker.io/tarampampam/3proxy:latest
|
||||||
|
docker.io/tarampampam/3proxy:${{ steps.slug.outputs.version }}
|
||||||
|
docker.io/tarampampam/3proxy:${{ steps.slug.outputs.version-major }}.${{ steps.slug.outputs.version-minor }}
|
||||||
|
docker.io/tarampampam/3proxy:${{ steps.slug.outputs.version-major }}
|
||||||
|
|
||||||
|
helm-pack:
|
||||||
|
name: Pack the Helm chart
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [build-docker-image]
|
||||||
|
defaults: {run: {working-directory: ./deployments/helm}}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: azure/setup-helm@v4
|
||||||
|
- {uses: gacts/github-slug@v1, id: slug}
|
||||||
|
- run: |
|
||||||
|
helm package \
|
||||||
|
--app-version "${{ steps.slug.outputs.version }}" \
|
||||||
|
--version "${{ steps.slug.outputs.version }}" .
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: helm-chart
|
||||||
|
path: ./deployments/helm/*.tgz
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
helm-publish:
|
||||||
|
name: Put the Helm chart to the GitHub pages branch
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [helm-pack]
|
||||||
|
steps:
|
||||||
|
- {uses: actions/checkout@v4, with: {ref: gh-pages}}
|
||||||
|
- uses: azure/setup-helm@v4
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with: {name: helm-chart, path: ./helm-charts}
|
||||||
|
- name: Update the index.yaml
|
||||||
|
run: |
|
||||||
|
helm repo index \
|
||||||
|
--url https://${{ github.actor }}.github.io/${{ github.event.repository.name }}/helm-charts/ \
|
||||||
|
--merge \
|
||||||
|
./helm-charts/index.yaml \
|
||||||
|
./helm-charts
|
||||||
|
- {uses: gacts/directory-listing@v1, with: {overwrite: true}}
|
||||||
|
- name: Commit and push the changes
|
||||||
|
run: |
|
||||||
|
git config user.name "${{ github.actor }}"
|
||||||
|
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||||
|
git add .
|
||||||
|
git commit -m "Helm chart release"
|
||||||
|
git push origin gh-pages
|
||||||
|
81
.github/workflows/tests.yml
vendored
81
.github/workflows/tests.yml
vendored
@ -1,74 +1,73 @@
|
|||||||
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:
|
||||||
|
workflow_dispatch: {}
|
||||||
push:
|
push:
|
||||||
branches: [master, main]
|
branches: [master, main]
|
||||||
|
paths-ignore: ['**.md']
|
||||||
tags-ignore: ['**']
|
tags-ignore: ['**']
|
||||||
pull_request: {}
|
pull_request:
|
||||||
|
paths-ignore: ['**.md']
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.ref }}
|
group: ${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs: # Docs: <https://git.io/JvxXE>
|
jobs:
|
||||||
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
|
- uses: gacts/gitleaks@v1
|
||||||
|
|
||||||
build-image:
|
lint-charts:
|
||||||
name: Build docker image
|
name: Lint the chart
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
|
defaults: {run: {working-directory: ./deployments/helm}}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
- uses: azure/setup-helm@v4
|
||||||
|
- run: helm dependency update .
|
||||||
|
- run: helm template . > /dev/null
|
||||||
|
- run: helm lint --strict .
|
||||||
|
|
||||||
- name: Build docker image
|
build-image:
|
||||||
run: docker build -f ./Dockerfile --tag 3proxy:local .
|
name: Build the docker image
|
||||||
|
runs-on: ubuntu-latest
|
||||||
- name: Save docker image
|
steps:
|
||||||
run: docker save 3proxy:local > ./docker-image.tar
|
- uses: actions/checkout@v4
|
||||||
|
- run: docker build -f ./Dockerfile --tag 3proxy:local .
|
||||||
- name: Upload artifact
|
- run: docker save 3proxy:local > ./docker-image.tar
|
||||||
uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: docker-image
|
name: docker-image
|
||||||
path: ./docker-image.tar
|
path: ./docker-image.tar
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
try-to-use:
|
try-to-use:
|
||||||
name: Build and use docker image (auth ${{ matrix.auth }})
|
name: Try to 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 built 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
|
|
||||||
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: 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: 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: |
|
||||||
@ -77,7 +76,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: |
|
||||||
@ -86,7 +84,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: |
|
||||||
@ -96,7 +93,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, extra user)
|
- name: Try to use HTTP proxy (with auth, extra user)
|
||||||
if: matrix.auth == 'yes'
|
if: matrix.auth == 'yes'
|
||||||
run: |
|
run: |
|
||||||
@ -106,7 +102,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 (with auth)
|
- name: Try to use SOCKS proxy (with auth)
|
||||||
if: matrix.auth == 'yes'
|
if: matrix.auth == 'yes'
|
||||||
run: |
|
run: |
|
||||||
@ -116,6 +111,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}",
|
||||||
@ -19,5 +19,6 @@
|
|||||||
"ports": {
|
"ports": {
|
||||||
"proxy": "${PROXY_PORT:-3128}",
|
"proxy": "${PROXY_PORT:-3128}",
|
||||||
"socks": "${SOCKS_PORT:-1080}"
|
"socks": "${SOCKS_PORT:-1080}"
|
||||||
}
|
},
|
||||||
|
"extra_config": "${EXTRA_CONFIG}"
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,44 @@
|
|||||||
#!/bin/3proxy
|
#!/bin/3proxy
|
||||||
config /etc/3proxy/3proxy.cfg
|
config /etc/3proxy/3proxy.cfg
|
||||||
|
|
||||||
# you may use system to execute some external command if proxy starts
|
|
||||||
system "echo `which 3proxy`': Starting 3proxy'"
|
system "echo `which 3proxy`': Starting 3proxy'"
|
||||||
|
|
||||||
# We can configure nservers to avoid unsafe gethostbyname() usage (max 5 servers)
|
|
||||||
{{#name_servers}}
|
{{#name_servers}}
|
||||||
nserver {{ . }}
|
nserver {{ . }}
|
||||||
{{/name_servers}}
|
{{/name_servers}}
|
||||||
|
|
||||||
# nscache is good to save speed, traffic and bandwidth
|
|
||||||
nscache {{ name_servers_cache }}
|
nscache {{ name_servers_cache }}
|
||||||
|
|
||||||
# Here we can change timeout values
|
|
||||||
timeouts 1 5 30 60 180 1800 15 60
|
timeouts 1 5 30 60 180 1800 15 60
|
||||||
|
|
||||||
# Logging docs: <https://3proxy.org/doc/howtor.html#LOGFORMAT>
|
|
||||||
log {{ log.output }}
|
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""}"
|
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 {{ max_connections }}
|
maxconn {{ max_connections }}
|
||||||
|
|
||||||
{{^auth.login=}}{{^auth.password=}}
|
{{#auth.login}}
|
||||||
users {{ auth.login }}:CL:{{ auth.password }}{{#auth.extra_accounts.*}} {{ * }}:CL:{{ . }}{{/auth.extra_accounts.*}}
|
{{#auth.password}}
|
||||||
|
users {{ auth.login }}:CL:{{ auth.password }}
|
||||||
auth strong
|
auth strong
|
||||||
allow {{ auth.login }}{{#auth.extra_accounts.*}},{{ * }}{{/auth.extra_accounts.*}}
|
allow {{ auth.login }}
|
||||||
{{/auth.password=}}{{/auth.login=}}
|
{{/auth.password}}
|
||||||
|
{{/auth.login}}
|
||||||
|
|
||||||
|
# Listen on both IPv4 and IPv6 for incoming and outgoing traffic
|
||||||
|
external 0.0.0.0
|
||||||
|
external ::
|
||||||
|
internal 0.0.0.0
|
||||||
|
internal ::
|
||||||
|
|
||||||
|
{{#extra_config}}
|
||||||
|
# Additional configuration
|
||||||
|
{{extra_config}}
|
||||||
|
{{/extra_config}}
|
||||||
|
|
||||||
|
# IPv4 & IPv6 Support for SOCKS5 & HTTP
|
||||||
proxy -a -p{{ ports.proxy }}
|
proxy -a -p{{ ports.proxy }}
|
||||||
socks -a -p{{ ports.socks }}
|
socks -a -p{{ ports.socks }}
|
||||||
|
|
||||||
flush
|
proxy -6 -a -p{{ ports.proxy }}
|
||||||
|
socks -6 -a -p{{ ports.socks }}
|
||||||
|
|
||||||
|
flush
|
117
CHANGELOG.md
117
CHANGELOG.md
@ -1,117 +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.8.3
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Missing port definitions when `EXTRA_ACCOUNTS` is set
|
|
||||||
|
|
||||||
## v1.8.2
|
|
||||||
|
|
||||||
### Removed
|
|
||||||
|
|
||||||
- `ppc64le` architecture support
|
|
||||||
|
|
||||||
## v1.8.1
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Multi-arch image support (plus `arm64` and `ppc64le`) [#31]
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Error page colors now depend on the theme, and the text is centered [#31]
|
|
||||||
|
|
||||||
[#31]:https://github.com/tarampampam/3proxy-docker/pull/31
|
|
||||||
|
|
||||||
## v1.8.0
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- `EXTRA_ACCOUNTS` environment variable is supported now [#28]
|
|
||||||
|
|
||||||
[#28]:https://github.com/tarampampam/3proxy-docker/issues/28
|
|
||||||
|
|
||||||
## 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
|
|
22
Dockerfile
22
Dockerfile
@ -1,19 +1,20 @@
|
|||||||
# Image page: <https://hub.docker.com/_/gcc>
|
# syntax=docker/dockerfile:1
|
||||||
FROM gcc:12.2.0 as builder
|
|
||||||
|
|
||||||
# renovate: source=github-tags name=z3APA3A/3proxy
|
FROM docker.io/library/gcc:15.1.0 AS builder
|
||||||
ARG Z3PROXY_VERSION=0.9.4
|
|
||||||
|
# renovate: source=github-tags name=3proxy/3proxy
|
||||||
|
ARG Z3PROXY_VERSION=0.9.5
|
||||||
|
|
||||||
# Fetch 3proxy sources
|
# Fetch 3proxy sources
|
||||||
RUN set -x \
|
RUN set -x \
|
||||||
&& git -c advice.detachedHead=false clone --depth 1 --branch "${Z3PROXY_VERSION}" https://github.com/z3APA3A/3proxy.git /tmp/3proxy
|
&& git -c advice.detachedHead=false clone --depth 1 --branch "${Z3PROXY_VERSION}" https://github.com/3proxy/3proxy.git /tmp/3proxy
|
||||||
|
|
||||||
WORKDIR /tmp/3proxy
|
WORKDIR /tmp/3proxy
|
||||||
|
|
||||||
# Patch sources
|
# Patch sources
|
||||||
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/3proxy/3proxy/blob/0.9.3/src/proxy.c>
|
||||||
&& sed -i 's~\(<\/head>\)~<style>:root{--color-bg-primary:#fff;--color-text-primary:#131313;--color-text-secondary:#232323}\
|
&& 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}}\
|
@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;\
|
html,body{height:100%;font-family:sans-serif;background-color:var(--color-bg-primary);color:var(--color-text-primary);margin:0;\
|
||||||
@ -33,10 +34,11 @@ RUN set -x \
|
|||||||
&& strip ./bin/TrafficPlugin.ld.so \
|
&& strip ./bin/TrafficPlugin.ld.so \
|
||||||
&& strip ./bin/PCREPlugin.ld.so \
|
&& strip ./bin/PCREPlugin.ld.so \
|
||||||
&& strip ./bin/TransparentPlugin.ld.so \
|
&& strip ./bin/TransparentPlugin.ld.so \
|
||||||
&& strip ./bin/SSLPlugin.ld.so
|
&& strip ./bin/SSLPlugin.ld.so \
|
||||||
|
&& cp /lib/$(gcc -dumpmachine)/libdl.so.* /tmp/3proxy/
|
||||||
|
|
||||||
# Prepare filesystem for 3proxy running
|
# Prepare filesystem for 3proxy running
|
||||||
FROM alpine:latest as buffer
|
FROM docker.io/library/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
|
||||||
@ -52,7 +54,7 @@ RUN set -x \
|
|||||||
&& chmod +x ./bin/dumb-init \
|
&& chmod +x ./bin/dumb-init \
|
||||||
&& apk del .build-deps
|
&& apk del .build-deps
|
||||||
|
|
||||||
COPY --from=builder /lib/*-linux-gnu/libdl.so.* ./lib/
|
COPY --from=builder /tmp/3proxy/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.1 /bin/mustpl ./bin/mustpl
|
COPY --from=ghcr.io/tarampampam/mustpl:0.1.1 /bin/mustpl ./bin/mustpl
|
||||||
@ -62,7 +64,7 @@ COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach
|
|||||||
RUN chown -R 10001:10001 ./etc/3proxy
|
RUN chown -R 10001:10001 ./etc/3proxy
|
||||||
|
|
||||||
# Merge into a single layer
|
# Merge into a single layer
|
||||||
FROM busybox:stable-glibc
|
FROM docker.io/library/busybox:stable-glibc
|
||||||
|
|
||||||
LABEL \
|
LABEL \
|
||||||
org.opencontainers.image.title="3proxy" \
|
org.opencontainers.image.title="3proxy" \
|
||||||
|
140
README.md
140
README.md
@ -1,18 +1,12 @@
|
|||||||
<p align="center">
|
# This is a fork of
|
||||||
<img src="https://hsto.org/webt/kp/e1/ud/kpe1udvcjss_-wtmrws-w9radke.png" width="96" alt="" />
|
https://github.com/tarampampam/3proxy-docker
|
||||||
</p>
|
|
||||||
|
|
||||||
# Docker image with [3proxy][link_3proxy]
|
# Docker image with [3proxy][link_3proxy]
|
||||||
|
|
||||||
[![Build Status][badge_build_status]][link_build_status]
|
3proxy is a powerful and lightweight proxy server. This image includes the stable version and can be easily
|
||||||
[![Release Status][badge_release_status]][link_build_status]
|
configured using environment variables. By default, it operates with anonymous proxy settings to hide client
|
||||||
[![Image size][badge_size_latest]][link_docker_hub]
|
information and logs activity in JSON format.
|
||||||
[![Docker Pulls][badge_docker_pulls]][link_docker_hub]
|
|
||||||
[![License][badge_license]][link_license]
|
|
||||||
|
|
||||||
## Why 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.
|
|
||||||
|
|
||||||
> Page on `hub.docker.com` can be [found here][link_docker_hub].
|
> Page on `hub.docker.com` can be [found here][link_docker_hub].
|
||||||
|
|
||||||
@ -28,14 +22,19 @@ TCP ports:
|
|||||||
| Registry | Image |
|
| Registry | Image |
|
||||||
|----------------------------------------|------------------------------|
|
|----------------------------------------|------------------------------|
|
||||||
| [GitHub Container Registry][link_ghcr] | `ghcr.io/tarampampam/3proxy` |
|
| [GitHub Container Registry][link_ghcr] | `ghcr.io/tarampampam/3proxy` |
|
||||||
| [Docker Hub][link_docker_hub] | `tarampampam/3proxy` |
|
| [Docker Hub][link_docker_hub] (mirror) | `tarampampam/3proxy` |
|
||||||
|
|
||||||
All supported image tags [can be found here][link_docker_tags].
|
> [!NOTE]
|
||||||
|
> It’s recommended to avoid using the `latest` tag, as **major** upgrades may include breaking changes.
|
||||||
|
> Instead, use specific tags in `X.Y.Z` format for version consistency.
|
||||||
|
|
||||||
Since v1.8.2 architecture `arm64` (and `amd64` of course) is supported:
|
All supported image tags can be [found here][link_docker_tags].
|
||||||
|
|
||||||
|
> Starting with version 1.8.2, the `arm64` architecture is supported (in addition to `amd64`):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ docker run --rm mplatform/mquery ghcr.io/tarampampam/3proxy:1.8.2
|
docker run --rm mplatform/mquery ghcr.io/tarampampam/3proxy:1.8.2
|
||||||
|
|
||||||
Image: 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)
|
* Manifest List: Yes (Image type: application/vnd.docker.distribution.manifest.list.v2+json)
|
||||||
* Supported platforms:
|
* Supported platforms:
|
||||||
@ -43,86 +42,97 @@ Image: ghcr.io/tarampampam/3proxy:1.8.2
|
|||||||
- linux/arm64
|
- 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` |
|
||||||
| `EXTRA_ACCOUNTS` | Additional proxy users | `{"evil":"live", "guest":"pass"}` |
|
| `EXTRA_ACCOUNTS` | Additional proxy users (JSON object format) | `{"evil":"live", "guest":"pass"}` |
|
||||||
| `PRIMARY_RESOLVER` | Primary nameserver (dns resolver; `1.0.0.1` by default) | `8.8.8.8:5353/tcp` |
|
| `PRIMARY_RESOLVER` | Primary 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` |
|
| `SECONDARY_RESOLVER` | Secondary DNS resolver (`8.8.4.4` by default) | `2001:4860:4860::8844` |
|
||||||
| `MAX_CONNECTIONS` | Maximal connections count (`1024` by default) | `2056` |
|
| `MAX_CONNECTIONS` | Maximum number of connections (`1024` by default) | `2056` |
|
||||||
| `PROXY_PORT` | HTTP proxy port number (`3128` by default) | `8080` |
|
| `PROXY_PORT` | HTTP proxy port (`3128` by default) | `8080` |
|
||||||
| `SOCKS_PORT` | SOCKS proxy port number (`1080` by default) | `8888` |
|
| `SOCKS_PORT` | SOCKS proxy port (`1080` by default) | `8888` |
|
||||||
|
| `EXTRA_CONFIG` | Additional 3proxy configuration (appended to the **end** of the config file, but before `proxy` and `flush`) | `# line 1\n# line 2` |
|
||||||
|
| `LOG_OUTPUT` | Path for log output (`/dev/stdout` by default; set to `/dev/null` to disable logging) | `/tmp/3proxy.log` |
|
||||||
|
|
||||||
## How can I use this?
|
## Helm Chart
|
||||||
|
|
||||||
For example:
|
To install it on Kubernetes (K8s), please use the Helm chart from [ArtifactHUB][artifact-hub].
|
||||||
|
|
||||||
|
[artifact-hub]:https://artifacthub.io/packages/helm/proxy-3proxy/proxy-3proxy
|
||||||
|
|
||||||
|
## How to Use This Image
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker run --rm -d \
|
docker run --rm -d \
|
||||||
-p "3128:3128/tcp" \
|
-p "3128:3128/tcp" \
|
||||||
-p "1080:1080/tcp" \
|
-p "1080:1080/tcp" \
|
||||||
ghcr.io/tarampampam/3proxy:latest
|
ghcr.io/tarampampam/3proxy:1
|
||||||
```
|
```
|
||||||
|
|
||||||
Or with auth & resolver settings:
|
With authentication and custom resolver settings:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker run --rm -d \
|
docker run --rm -d \
|
||||||
-p "3128:3128/tcp" \
|
-p "3128:3128/tcp" \
|
||||||
-p "1080:1080/tcp" \
|
-p "1080:1080/tcp" \
|
||||||
-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" \
|
||||||
ghcr.io/tarampampam/3proxy:latest
|
ghcr.io/tarampampam/3proxy:1
|
||||||
|
```
|
||||||
|
|
||||||
|
Docker compose example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
3proxy:
|
||||||
|
image: ghcr.io/tarampampam/3proxy:1
|
||||||
|
environment:
|
||||||
|
PROXY_LOGIN: evil
|
||||||
|
PROXY_PASSWORD: live
|
||||||
|
MAX_CONNECTIONS: 10000
|
||||||
|
PROXY_PORT: 8000
|
||||||
|
SOCKS_PORT: 8001
|
||||||
|
PRIMARY_RESOLVER: 77.88.8.8
|
||||||
|
SECONDARY_RESOLVER: 8.8.8.8
|
||||||
|
ports:
|
||||||
|
- '8000:8000/tcp'
|
||||||
|
- '8001:8001/tcp'
|
||||||
```
|
```
|
||||||
|
|
||||||
## 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 a new version is straightforward:
|
||||||
|
|
||||||
Docker images will be build and published automatically.
|
1. Make the necessary changes in this repository.
|
||||||
|
2. "Publish" a new release on the repository's releases page.
|
||||||
|
|
||||||
> New release will overwrite the `latest` docker image tag in both registers.
|
Docker images will be automatically built and published.
|
||||||
|
|
||||||
## Changes log
|
> Note: The `latest` tag will be overwritten in both registries when a new release is published.
|
||||||
|
|
||||||
[![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 encounter any issues, please [open an issue][link_create_issue] in this repository.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
WTFPL. Use anywhere for your pleasure.
|
This project is licensed under the WTFPL. Use it freely and enjoy!
|
||||||
|
|
||||||
[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
|
[badge_issues]:https://img.shields.io/github/issues/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
||||||
[badge_pulls]:https://img.shields.io/github/issues-pr/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
[badge_pulls]:https://img.shields.io/github/issues-pr/tarampampam/3proxy-docker.svg?style=flat-square&maxAge=180
|
||||||
[badge_license]:https://img.shields.io/github/license/tarampampam/3proxy-docker.svg?longCache=true
|
|
||||||
[badge_size_latest]:https://img.shields.io/docker/image-size/tarampampam/3proxy/latest?maxAge=30
|
|
||||||
[badge_docker_pulls]:https://img.shields.io/docker/pulls/tarampampam/3proxy.svg
|
|
||||||
[link_releases]:https://github.com/tarampampam/3proxy-docker/releases
|
|
||||||
[link_commits]:https://github.com/tarampampam/3proxy-docker/commits
|
|
||||||
[link_changes_log]:https://github.com/tarampampam/3proxy-docker/blob/master/CHANGELOG.md
|
|
||||||
[link_issues]:https://github.com/tarampampam/3proxy-docker/issues
|
[link_issues]:https://github.com/tarampampam/3proxy-docker/issues
|
||||||
[link_pulls]:https://github.com/tarampampam/3proxy-docker/pulls
|
[link_pulls]:https://github.com/tarampampam/3proxy-docker/pulls
|
||||||
[link_build_status]:https://github.com/tarampampam/3proxy-docker/actions
|
|
||||||
[link_create_issue]:https://github.com/tarampampam/3proxy-docker/issues/new
|
[link_create_issue]:https://github.com/tarampampam/3proxy-docker/issues/new
|
||||||
[link_license]:https://github.com/tarampampam/3proxy-docker/blob/master/LICENSE
|
|
||||||
[link_docker_tags]:https://hub.docker.com/r/tarampampam/3proxy/tags
|
[link_docker_tags]:https://hub.docker.com/r/tarampampam/3proxy/tags
|
||||||
[link_docker_hub]:https://hub.docker.com/r/tarampampam/3proxy/
|
[link_docker_hub]:https://hub.docker.com/r/tarampampam/3proxy/
|
||||||
[link_ghcr]:https://github.com/tarampampam/3proxy-docker/pkgs/container/3proxy
|
[link_ghcr]:https://github.com/tarampampam/3proxy-docker/pkgs/container/3proxy
|
||||||
[link_3proxy]:https://github.com/z3APA3A/3proxy
|
[link_3proxy]:https://github.com/3proxy/3proxy
|
||||||
|
13
deployments/helm/Chart.yaml
Normal file
13
deployments/helm/Chart.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# yaml-language-server: $schema=https://json.schemastore.org/chart.json
|
||||||
|
|
||||||
|
apiVersion: v2
|
||||||
|
name: proxy-3proxy
|
||||||
|
description: Powerful and lightweight proxy server, written in pure C
|
||||||
|
|
||||||
|
type: application
|
||||||
|
version: 0.0.0 # will be replaced by the release workflow
|
||||||
|
appVersion: 0.0.0 # will be replaced by the release workflow
|
||||||
|
icon: https://github.com/user-attachments/assets/023186cf-b153-459c-8417-038fd87a2065
|
||||||
|
home: https://github.com/3proxy/3proxy
|
||||||
|
sources: [https://github.com/tarampampam/3proxy-docker]
|
||||||
|
keywords: [proxy, 3proxy, http, socks]
|
35
deployments/helm/README.md
Normal file
35
deployments/helm/README.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# 3proxy
|
||||||
|
|
||||||
|
Important note: Since the chart is released together with the app under the same version (i.e., the chart version
|
||||||
|
matches the app version), its versioning is not compatible with semantic versioning (SemVer). I will do my best to
|
||||||
|
avoid non-backward-compatible changes in the chart, but due to Murphy's Law, I cannot guarantee that they will
|
||||||
|
never occur.
|
||||||
|
|
||||||
|
Also, this chart does not include Ingress configuration. If you need it, please, create it manually.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```shell
|
||||||
|
helm repo add proxy-3proxy https://tarampampam.github.io/3proxy-docker/helm-charts
|
||||||
|
helm repo update
|
||||||
|
|
||||||
|
helm install my-3proxy proxy-3proxy/proxy-3proxy --version <version_here>
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, add the following lines to your `Chart.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
dependencies:
|
||||||
|
- name: proxy-3proxy
|
||||||
|
version: <version_here>
|
||||||
|
repository: https://tarampampam.github.io/3proxy-docker/helm-charts
|
||||||
|
```
|
||||||
|
|
||||||
|
And override the default values in your `values.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
proxy-3proxy:
|
||||||
|
# ...
|
||||||
|
service: {ports: {http: 3128}}
|
||||||
|
# ...
|
||||||
|
```
|
52
deployments/helm/templates/_helpers.tpl
Normal file
52
deployments/helm/templates/_helpers.tpl
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{{/* Define namespace of chart, useful for multi-namespace deployments */}}
|
||||||
|
{{- define "proxy-3proxy.namespace" -}}
|
||||||
|
{{- if .Values.namespaceOverride }}
|
||||||
|
{{- .Values.namespaceOverride }}
|
||||||
|
{{- else }}
|
||||||
|
{{- .Release.Namespace }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Expand the name of the chart */}}
|
||||||
|
{{- define "proxy-3proxy.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "proxy-3proxy.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Create chart name and version as used by the chart label */}}
|
||||||
|
{{- define "proxy-3proxy.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Common labels */}}
|
||||||
|
{{- define "proxy-3proxy.commonLabels" -}}
|
||||||
|
helm.sh/chart: {{ include "proxy-3proxy.chart" . }}
|
||||||
|
{{ include "proxy-3proxy.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Selector labels */}}
|
||||||
|
{{- define "proxy-3proxy.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "proxy-3proxy.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
194
deployments/helm/templates/deployment.yaml
Normal file
194
deployments/helm/templates/deployment.yaml
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
{{- if .Values.deployment.enabled }}
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: {{ .Values.deployment.kind | default "Deployment" }}
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
name: {{ include "proxy-3proxy.fullname" . }}
|
||||||
|
namespace: {{ template "proxy-3proxy.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "proxy-3proxy.commonLabels" . | nindent 4 }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
{{- with .Values.deployment }}
|
||||||
|
replicas: {{ .replicas | default 1 }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "proxy-3proxy.selectorLabels" $ | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with .podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "proxy-3proxy.commonLabels" $ | nindent 8 }}
|
||||||
|
{{- with .labels }}
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
{{- with .imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ include "proxy-3proxy.fullname" $ }}
|
||||||
|
|
||||||
|
{{- with .securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with $.Values.image }}
|
||||||
|
image: "{{ .repository }}:{{ .tag | default $.Chart.AppVersion }}"
|
||||||
|
imagePullPolicy: {{ .pullPolicy | default "IfNotPresent" }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 3128
|
||||||
|
protocol: TCP
|
||||||
|
- name: socks
|
||||||
|
containerPort: 1080
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- {name: PROXY_PORT, value: "3128"}
|
||||||
|
- {name: SOCKS_PORT, value: "1080"}
|
||||||
|
{{- with $.Values.config }}
|
||||||
|
{{- with .log }}
|
||||||
|
{{- $logOutputEnvName := "LOG_OUTPUT" }}
|
||||||
|
{{- if eq .enabled false }}
|
||||||
|
- {name: {{ $logOutputEnvName }}, value: "/dev/null"}
|
||||||
|
{{- else if .output }}
|
||||||
|
- {name: {{ $logOutputEnvName }}, value: "{{ .output }}"}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .auth.login }}
|
||||||
|
{{- $authLoginEnvName := "PROXY_LOGIN" }}
|
||||||
|
{{- if .plain }}
|
||||||
|
- {name: {{ $authLoginEnvName }}, value: "{{ .plain }}"}
|
||||||
|
{{- else if .fromSecret.enabled }}
|
||||||
|
- name: {{ $authLoginEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ tpl .fromSecret.secretName $ | quote }}
|
||||||
|
key: {{ tpl .fromSecret.secretKey $ | quote }}
|
||||||
|
{{- else if .fromConfigMap.enabled }}
|
||||||
|
- name: {{ $authLoginEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: {{ tpl .fromConfigMap.configMapName $ | quote }}
|
||||||
|
key: {{ tpl .fromConfigMap.configMapKey $ | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .auth.password }}
|
||||||
|
{{- $authPasswordEnvName := "PROXY_PASSWORD" }}
|
||||||
|
{{- if .plain }}
|
||||||
|
- {name: {{ $authPasswordEnvName }}, value: "{{ .plain }}"}
|
||||||
|
{{- else if .fromSecret.enabled }}
|
||||||
|
- name: {{ $authPasswordEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ tpl .fromSecret.secretName $ | quote }}
|
||||||
|
key: {{ tpl .fromSecret.secretKey $ | quote }}
|
||||||
|
{{- else if .fromConfigMap.enabled }}
|
||||||
|
- name: {{ $authPasswordEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: {{ tpl .fromConfigMap.configMapName $ | quote }}
|
||||||
|
key: {{ tpl .fromConfigMap.configMapKey $ | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .auth.extraAccounts }}
|
||||||
|
{{- $extraAuthAccountsEnvName := "EXTRA_ACCOUNTS" }}
|
||||||
|
{{- if .plain }}
|
||||||
|
- name: {{ $extraAuthAccountsEnvName }}
|
||||||
|
value: >-
|
||||||
|
{{ .plain | toJson }}
|
||||||
|
{{- else if .fromSecret.enabled }}
|
||||||
|
- name: {{ $extraAuthAccountsEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ tpl .fromSecret.secretName $ | quote }}
|
||||||
|
key: {{ tpl .fromSecret.secretKey $ | quote }}
|
||||||
|
{{- else if .fromConfigMap.enabled }}
|
||||||
|
- name: {{ $extraAuthAccountsEnvName }}
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: {{ tpl .fromConfigMap.configMapName $ | quote }}
|
||||||
|
key: {{ tpl .fromConfigMap.configMapKey $ | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .dns.primaryResolver }}
|
||||||
|
- {name: PRIMARY_RESOLVER, value: "{{ .dns.primaryResolver }}"}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .dns.secondaryResolver }}
|
||||||
|
- {name: SECONDARY_RESOLVER, value: "{{ .dns.secondaryResolver }}"}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if ne .limits.maxConnections nil }}
|
||||||
|
- {name: MAX_CONNECTIONS, value: "{{ .limits.maxConnections }}"}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .extraConfig }}
|
||||||
|
- name: EXTRA_CONFIG
|
||||||
|
value: >-
|
||||||
|
{{ .extraConfig }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $.Values.deployment.env }}
|
||||||
|
{{- tpl (toYaml .) $ | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .args }}
|
||||||
|
args:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .probe }}
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket: {port: "{{ .port }}"}
|
||||||
|
periodSeconds: {{ .interval }}
|
||||||
|
initialDelaySeconds: {{ .initialDelay }}
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket: {port: "{{ .port }}"}
|
||||||
|
periodSeconds: {{ .interval }}
|
||||||
|
initialDelaySeconds: {{ .initialDelay }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .volumeMounts }}
|
||||||
|
volumeMounts:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .volumes }}
|
||||||
|
volumes:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
29
deployments/helm/templates/service.yaml
Normal file
29
deployments/helm/templates/service.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{{- if .Values.service.enabled }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
name: {{ include "proxy-3proxy.fullname" . }}
|
||||||
|
namespace: {{ template "proxy-3proxy.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "proxy-3proxy.commonLabels" . | nindent 4 }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
{{- with .Values.service }}
|
||||||
|
type: {{ .type }}
|
||||||
|
{{- with .externalName }}
|
||||||
|
externalName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: {{ .ports.http }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
- name: socks
|
||||||
|
port: {{ .ports.socks }}
|
||||||
|
targetPort: socks
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
{{- include "proxy-3proxy.selectorLabels" $ | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
367
deployments/helm/values.schema.json
Normal file
367
deployments/helm/values.schema.json
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"nameOverride": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fullnameOverride": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"namespaceOverride": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"repository": {"type": "string", "minLength": 1},
|
||||||
|
"tag": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"pullPolicy": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "enum": ["Always", "IfNotPresent", "Never"]},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deployment": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"kind": {"type": "string"},
|
||||||
|
"replicas": {"type": "integer"},
|
||||||
|
"podAnnotations": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {"type": "string", "minLength": 1}
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {"type": "string", "minLength": 1}
|
||||||
|
},
|
||||||
|
"imagePullSecrets": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string"}
|
||||||
|
},
|
||||||
|
"minProperties": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"securityContext": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"runAsNonRoot": {"type": "boolean"},
|
||||||
|
"runAsUser": {"type": "integer"},
|
||||||
|
"runAsGroup": {"type": "integer"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"probe": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"port": {"type": "string", "enum": ["http", "socks"]},
|
||||||
|
"interval": {"type": "integer"},
|
||||||
|
"initialDelay": {"type": "integer"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"requests": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cpu": {"type": "string"},
|
||||||
|
"memory": {"type": "string"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"limits": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cpu": {"type": "string"},
|
||||||
|
"memory": {"type": "string"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volumes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string"},
|
||||||
|
"configMap": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"secret": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"secretName": {"type": "string"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"persistentVolumeClaim": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"claimName": {"type": "string"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volumeMounts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string"},
|
||||||
|
"mountPath": {"type": "string"},
|
||||||
|
"subPath": {"type": "string"},
|
||||||
|
"readOnly": {"type": "boolean"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nodeSelector": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {"type": "string", "minLength": 1}
|
||||||
|
},
|
||||||
|
"affinity": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"nodeAffinity": {"type": "object"},
|
||||||
|
"podAffinity": {"type": "object"},
|
||||||
|
"podAntiAffinity": {"type": "object"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tolerations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"key": {"type": "string"},
|
||||||
|
"operator": {"type": "string"},
|
||||||
|
"value": {"type": "string"},
|
||||||
|
"effect": {"type": "string"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string"},
|
||||||
|
"value": {"type": "string"},
|
||||||
|
"valueFrom": {"type": "object"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["ClusterIP", "NodePort", "LoadBalancer", "ExternalName"]
|
||||||
|
},
|
||||||
|
"externalName": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ports": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"http": {"type": "integer", "minimum": 1, "maximum": 65535},
|
||||||
|
"socks": {"type": "integer", "minimum": 1, "maximum": 65535}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ingress": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"className": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {"type": "string", "minLength": 1}
|
||||||
|
},
|
||||||
|
"hosts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"host": {"type": "string", "minLength": 1},
|
||||||
|
"paths": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {"type": "string", "minLength": 1},
|
||||||
|
"pathType": {"type": "string", "minLength": 1}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"hosts": {"type": "array"},
|
||||||
|
"secretName": {"type": "string"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"log": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"output": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 2, "examples": ["/dev/stdout"]},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"login": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"plain": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fromSecret": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"secretName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"secretKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fromConfigMap": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"configMapName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"configMapKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"plain": {
|
||||||
|
"oneOf": [
|
||||||
|
{"type": "string", "minLength": 1},
|
||||||
|
{"type": "null"}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fromSecret": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"secretName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"secretKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fromConfigMap": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"configMapName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"configMapKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extraAccounts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"plain": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {"type": "string", "minLength": 1}
|
||||||
|
},
|
||||||
|
"fromSecret": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"secretName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"secretKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fromConfigMap": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {"type": "boolean"},
|
||||||
|
"configMapName": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"configMapKey": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dns": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"primaryResolver": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]},
|
||||||
|
"secondaryResolver": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"limits": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"maxConnections": {"oneOf": [{"type": "integer", "minimum": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extraConfig": {"oneOf": [{"type": "string", "minLength": 1}, {"type": "null"}]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
149
deployments/helm/values.yaml
Normal file
149
deployments/helm/values.yaml
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
# -- The name of the Helm release
|
||||||
|
fullnameOverride: null
|
||||||
|
# -- This is to override the chart name
|
||||||
|
nameOverride: null
|
||||||
|
# -- Override the default Release Namespace for Helm
|
||||||
|
namespaceOverride: null
|
||||||
|
|
||||||
|
image:
|
||||||
|
# -- The image repository to pull from
|
||||||
|
repository: ghcr.io/tarampampam/3proxy
|
||||||
|
# -- Defines the image pull policy
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# -- Overrides the image tag whose default is the chart appVersion
|
||||||
|
tag: null
|
||||||
|
|
||||||
|
deployment:
|
||||||
|
# -- Enable deployment
|
||||||
|
enabled: true
|
||||||
|
# -- The deployment kind
|
||||||
|
kind: Deployment
|
||||||
|
# -- How many replicas to run
|
||||||
|
replicas: 1
|
||||||
|
# -- Additional pod annotations (e.g. for mesh injection or prometheus scraping)
|
||||||
|
# It supports templating. One can set it with values like some/name: '{{ template "some.name" . }}'
|
||||||
|
# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
|
||||||
|
podAnnotations: {} # supports templating
|
||||||
|
# -- Additional deployment labels (e.g. for filtering deployment by custom labels)
|
||||||
|
labels: {} # supports templating
|
||||||
|
# -- This is for the secretes for pulling an image from a private repository more information can be found
|
||||||
|
# here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
|
||||||
|
imagePullSecrets: [] # supports templating
|
||||||
|
# -- Security context for the pod, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context-1
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 10001 # as defined in the Dockerfile
|
||||||
|
runAsGroup: 10001 # as defined in the Dockerfile
|
||||||
|
probe:
|
||||||
|
# -- The port to probe (containerPort, "http" or "socks")
|
||||||
|
port: http
|
||||||
|
# -- How often (in seconds) to perform the probe
|
||||||
|
interval: 10
|
||||||
|
# -- Number of seconds after the container has started before liveness probes are initiated
|
||||||
|
initialDelay: 2
|
||||||
|
# -- Resource limits and requests, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
|
||||||
|
resources:
|
||||||
|
requests: {memory: 16Mi}
|
||||||
|
limits: {memory: 128Mi}
|
||||||
|
# -- Additional volumes to add to the pod, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/storage/volumes/
|
||||||
|
volumes: [] # supports templating
|
||||||
|
# -- Additional volumeMounts to add to the container (for instance when using fs storage driver)
|
||||||
|
volumeMounts: [] # supports templating
|
||||||
|
# -- Node selector for pod assignment, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
|
||||||
|
nodeSelector: {} # supports templating
|
||||||
|
# -- Affinity for pod assignment, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
|
||||||
|
affinity: {} # supports templating
|
||||||
|
# -- Tolerations for pod assignment, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
|
||||||
|
tolerations: [] # supports templating
|
||||||
|
# -- The list of additional environment variables to set in the container
|
||||||
|
env: [] # supports templating
|
||||||
|
# -- The list of additional arguments to pass to the container
|
||||||
|
args: [] # supports templating
|
||||||
|
|
||||||
|
service:
|
||||||
|
# -- Enable service
|
||||||
|
enabled: true
|
||||||
|
# -- Sets the service type more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
|
||||||
|
type: ClusterIP
|
||||||
|
# -- External name for the service (for type=ExternalName)
|
||||||
|
externalName: null
|
||||||
|
# -- Sets the port, more information can be found here:
|
||||||
|
# https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
|
||||||
|
ports:
|
||||||
|
# -- The port number for the proxy to listen on
|
||||||
|
http: 3128
|
||||||
|
# -- The same, but for socks proxy
|
||||||
|
socks: 1080
|
||||||
|
|
||||||
|
config:
|
||||||
|
log:
|
||||||
|
# -- Enable logging (set to false to disable)
|
||||||
|
enabled: true
|
||||||
|
# -- The output log file
|
||||||
|
# @default /dev/stdout
|
||||||
|
output: null
|
||||||
|
|
||||||
|
auth:
|
||||||
|
login:
|
||||||
|
# -- Username (login) for proxy authentication, provided as a plain value
|
||||||
|
plain: null
|
||||||
|
fromSecret:
|
||||||
|
# -- Enable getting the username from a secret
|
||||||
|
enabled: false
|
||||||
|
secretName: null # supports templating
|
||||||
|
secretKey: null # supports templating
|
||||||
|
fromConfigMap:
|
||||||
|
# -- Enable getting the username from a config map
|
||||||
|
enabled: false
|
||||||
|
configMapName: null # supports templating
|
||||||
|
configMapKey: null # supports templating
|
||||||
|
password:
|
||||||
|
# -- Password for proxy authentication, provided as a plain value
|
||||||
|
plain: null
|
||||||
|
fromSecret:
|
||||||
|
# -- Enable getting the password from a secret
|
||||||
|
enabled: false
|
||||||
|
secretName: null # supports templating
|
||||||
|
secretKey: null # supports templating
|
||||||
|
fromConfigMap:
|
||||||
|
# -- Enable getting the password from a config map
|
||||||
|
enabled: false
|
||||||
|
configMapName: null # supports templating
|
||||||
|
configMapKey: null # supports templating
|
||||||
|
extraAccounts:
|
||||||
|
# -- The list of additional accounts to add to the configuration (a hashmap of username:password)
|
||||||
|
plain: {}
|
||||||
|
fromSecret:
|
||||||
|
# -- Enable getting the extra accounts from a secret (the value should be a JSON object)
|
||||||
|
enabled: false
|
||||||
|
secretName: null # supports templating
|
||||||
|
secretKey: null # supports templating
|
||||||
|
fromConfigMap:
|
||||||
|
# -- Enable getting the extra accounts from a config map (the value should be a JSON object)
|
||||||
|
enabled: false
|
||||||
|
configMapName: null # supports templating
|
||||||
|
configMapKey: null # supports templating
|
||||||
|
|
||||||
|
dns:
|
||||||
|
# -- Primary DNS server
|
||||||
|
# @default 1.0.0.1 (Cloudflare)
|
||||||
|
primaryResolver: null
|
||||||
|
# -- Secondary DNS server
|
||||||
|
# @default 8.8.4.4 (Google)
|
||||||
|
secondaryResolver: null
|
||||||
|
|
||||||
|
limits:
|
||||||
|
# -- The maximum number of connections
|
||||||
|
# @default 1024
|
||||||
|
maxConnections: null
|
||||||
|
|
||||||
|
# -- Additional 3proxy configuration (appended to the end of the config file, but before `proxy` and `flush`),
|
||||||
|
# new lines should be separated by `\n`, i.e.: "# line 1\n# line 2"
|
||||||
|
extraConfig: null
|
21
docker-compose.yaml
Normal file
21
docker-compose.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
3proxy-docker:
|
||||||
|
container_name: 3proxy-server
|
||||||
|
hostname: 3proxy-server
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
network_mode: host
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
PROXY_LOGIN: username
|
||||||
|
PROXY_PASSWORD: "Password"
|
||||||
|
PRIMARY_RESOLVER: 1.1.1.1
|
||||||
|
SECONDARY_RESOLVER: 152.53.118.246
|
||||||
|
MAX_CONNECTIONS: 1024
|
||||||
|
PROXY_PORT: 3128
|
||||||
|
SOCKS_PORT: 1080
|
||||||
|
labels:
|
||||||
|
com.centurylinklabs.watchtower.enable: "false"
|
Loading…
x
Reference in New Issue
Block a user