Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4a3948a995 | ||
|
a6a3a667ac | ||
|
006e4b0fb8 | ||
|
5d1c1ff91b | ||
|
62aa4d4d4e | ||
|
df2468d8de | ||
|
53e8111ec3 | ||
|
821281d71f | ||
|
e646bd801e | ||
|
9791f4a007 | ||
|
29d2351597 | ||
|
46cfd03a37 | ||
|
873c511f96 | ||
|
38425621b6 | ||
|
4d191d65b6 | ||
|
d4459e5346 |
3
.github/dependabot.yml
vendored
3
.github/dependabot.yml
vendored
@ -1,4 +1,5 @@
|
||||
# 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
|
||||
|
||||
|
7
.github/workflows/documentation.yml
vendored
7
.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:
|
||||
push:
|
||||
@ -12,7 +15,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: peter-evans/dockerhub-description@v4 # Action page: <https://github.com/peter-evans/dockerhub-description>
|
||||
- uses: peter-evans/dockerhub-description@v4
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_LOGIN }}
|
||||
password: ${{ secrets.DOCKER_USER_PASSWORD }}
|
||||
|
75
.github/workflows/release.yml
vendored
75
.github/workflows/release.yml
vendored
@ -4,34 +4,83 @@
|
||||
name: 🚀 Release
|
||||
|
||||
on:
|
||||
release: # Docs: <https://git.io/JeBz1#release-event-release>
|
||||
types: [published]
|
||||
release: {types: [published]}
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
docker-image:
|
||||
name: Build docker image
|
||||
build-docker-image:
|
||||
name: Build the docker image
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- {uses: gacts/github-slug@v1, id: slug}
|
||||
- uses: docker/setup-qemu-action@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_LOGIN }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
- uses: docker/login-action@v3 # Action page: <https://github.com/docker/login-action>
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: docker/build-push-action@v6 # Action page: <https://github.com/docker/build-push-action>
|
||||
- {uses: gacts/github-slug@v1, id: slug}
|
||||
- uses: docker/setup-qemu-action@v3
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: |
|
||||
tarampampam/3proxy:${{ steps.slug.outputs.version-semantic }}
|
||||
tarampampam/3proxy:latest
|
||||
ghcr.io/${{ github.actor }}/3proxy:${{ steps.slug.outputs.version-semantic }}
|
||||
ghcr.io/${{ github.actor }}/3proxy:latest
|
||||
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
|
||||
|
20
.github/workflows/tests.yml
vendored
20
.github/workflows/tests.yml
vendored
@ -4,16 +4,19 @@
|
||||
name: 🧪 Tests
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
push:
|
||||
branches: [master, main]
|
||||
paths-ignore: ['**.md']
|
||||
tags-ignore: ['**']
|
||||
pull_request: {}
|
||||
pull_request:
|
||||
paths-ignore: ['**.md']
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs: # Docs: <https://git.io/JvxXE>
|
||||
jobs:
|
||||
gitleaks:
|
||||
name: Check for GitLeaks
|
||||
runs-on: ubuntu-latest
|
||||
@ -21,6 +24,17 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
- {uses: actions/checkout@v4, with: {fetch-depth: 0}}
|
||||
- uses: gacts/gitleaks@v1
|
||||
|
||||
lint-charts:
|
||||
name: Lint the chart
|
||||
runs-on: ubuntu-latest
|
||||
defaults: {run: {working-directory: ./deployments/helm}}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: azure/setup-helm@v4
|
||||
- run: helm dependency update .
|
||||
- run: helm template . > /dev/null
|
||||
- run: helm lint --strict .
|
||||
|
||||
build-image:
|
||||
name: Build the docker image
|
||||
runs-on: ubuntu-latest
|
||||
@ -35,7 +49,7 @@ jobs: # Docs: <https://git.io/JvxXE>
|
||||
retention-days: 1
|
||||
|
||||
try-to-use:
|
||||
name: Build and use the docker image (auth ${{ matrix.auth }})
|
||||
name: Try to use the docker image (auth ${{ matrix.auth }})
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
@ -1,39 +1,44 @@
|
||||
#!/bin/3proxy
|
||||
config /etc/3proxy/3proxy.cfg
|
||||
|
||||
# you may use system to execute some external command if proxy starts
|
||||
system "echo `which 3proxy`': Starting 3proxy'"
|
||||
|
||||
# We can configure nservers to avoid unsafe gethostbyname() usage (max 5 servers)
|
||||
{{#name_servers}}
|
||||
nserver {{ . }}
|
||||
{{/name_servers}}
|
||||
|
||||
# nscache is good to save speed, traffic and bandwidth
|
||||
nscache {{ name_servers_cache }}
|
||||
|
||||
# Here we can change timeout values
|
||||
timeouts 1 5 30 60 180 1800 15 60
|
||||
|
||||
# Logging docs: <https://3proxy.org/doc/howtor.html#LOGFORMAT>
|
||||
log {{ log.output }}
|
||||
logformat "-\""+_G{""time_unix"":%t, ""proxy"":{""type:"":""%N"", ""port"":%p}, ""error"":{""code"":""%E""}, ""auth"":{""user"":""%U""}, ""client"":{""ip"":""%C"", ""port"":%c}, ""server"":{""ip"":""%R"", ""port"":%r}, ""bytes"":{""sent"":%O, ""received"":%I}, ""request"":{""hostname"":""%n""}, ""message"":""%T""}"
|
||||
|
||||
maxconn {{ max_connections }}
|
||||
|
||||
{{^auth.login=}}{{^auth.password=}}
|
||||
users {{ auth.login }}:CL:{{ auth.password }}{{#auth.extra_accounts.*}} {{ * }}:CL:{{ . }}{{/auth.extra_accounts.*}}
|
||||
{{#auth.login}}
|
||||
{{#auth.password}}
|
||||
users {{ auth.login }}:CL:{{ auth.password }}
|
||||
auth strong
|
||||
allow {{ auth.login }}{{#auth.extra_accounts.*}},{{ * }}{{/auth.extra_accounts.*}}
|
||||
{{/auth.password=}}{{/auth.login=}}
|
||||
allow {{ auth.login }}
|
||||
{{/auth.password}}
|
||||
{{/auth.login}}
|
||||
|
||||
{{^extra_config=}}
|
||||
# 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=}}
|
||||
{{/extra_config}}
|
||||
|
||||
# IPv4 & IPv6 Support for SOCKS5 & HTTP
|
||||
proxy -a -p{{ ports.proxy }}
|
||||
socks -a -p{{ ports.socks }}
|
||||
|
||||
proxy -6 -a -p{{ ports.proxy }}
|
||||
socks -6 -a -p{{ ports.socks }}
|
||||
|
||||
flush
|
19
Dockerfile
19
Dockerfile
@ -1,20 +1,20 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM gcc:13.2.0 AS builder
|
||||
FROM docker.io/library/gcc:15.1.0 AS builder
|
||||
|
||||
# renovate: source=github-tags name=z3APA3A/3proxy
|
||||
ARG Z3PROXY_VERSION=0.9.4
|
||||
# renovate: source=github-tags name=3proxy/3proxy
|
||||
ARG Z3PROXY_VERSION=0.9.5
|
||||
|
||||
# Fetch 3proxy sources
|
||||
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
|
||||
|
||||
# Patch sources
|
||||
RUN set -x \
|
||||
&& echo '#define ANONYMOUS 1' >> ./src/3proxy.h \
|
||||
# proxy.c source: <https://github.com/z3APA3A/3proxy/blob/0.9.3/src/proxy.c>
|
||||
# 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}\
|
||||
@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;\
|
||||
@ -34,10 +34,11 @@ RUN set -x \
|
||||
&& strip ./bin/TrafficPlugin.ld.so \
|
||||
&& strip ./bin/PCREPlugin.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
|
||||
FROM alpine:latest AS buffer
|
||||
FROM docker.io/library/alpine:latest AS buffer
|
||||
|
||||
# create a directory for the future root filesystem
|
||||
WORKDIR /tmp/rootfs
|
||||
@ -53,7 +54,7 @@ RUN set -x \
|
||||
&& chmod +x ./bin/dumb-init \
|
||||
&& 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/*.ld.so ./usr/local/3proxy/libexec/
|
||||
COPY --from=ghcr.io/tarampampam/mustpl:0.1.1 /bin/mustpl ./bin/mustpl
|
||||
@ -63,7 +64,7 @@ COPY 3proxy.cfg.mustach ./etc/3proxy/3proxy.cfg.mustach
|
||||
RUN chown -R 10001:10001 ./etc/3proxy
|
||||
|
||||
# Merge into a single layer
|
||||
FROM busybox:stable-glibc
|
||||
FROM docker.io/library/busybox:stable-glibc
|
||||
|
||||
LABEL \
|
||||
org.opencontainers.image.title="3proxy" \
|
||||
|
117
README.md
117
README.md
@ -1,18 +1,12 @@
|
||||
<p align="center">
|
||||
<img src="https://hsto.org/webt/kp/e1/ud/kpe1udvcjss_-wtmrws-w9radke.png" width="96" alt="" />
|
||||
</p>
|
||||
# This is a fork of
|
||||
https://github.com/tarampampam/3proxy-docker
|
||||
|
||||
|
||||
# Docker image with [3proxy][link_3proxy]
|
||||
|
||||
[![Build Status][badge_build_status]][link_build_status]
|
||||
[![Release Status][badge_release_status]][link_build_status]
|
||||
[![Image size][badge_size_latest]][link_docker_hub]
|
||||
[![Docker Pulls][badge_docker_pulls]][link_docker_hub]
|
||||
[![License][badge_license]][link_license]
|
||||
|
||||
## Why was this image created?
|
||||
|
||||
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.
|
||||
3proxy is a powerful and lightweight proxy server. This image includes the stable version and can be easily
|
||||
configured using environment variables. By default, it operates with anonymous proxy settings to hide client
|
||||
information and logs activity in JSON format.
|
||||
|
||||
> Page on `hub.docker.com` can be [found here][link_docker_hub].
|
||||
|
||||
@ -28,14 +22,19 @@ TCP ports:
|
||||
| Registry | Image |
|
||||
|----------------------------------------|------------------------------|
|
||||
| [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
|
||||
$ 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
|
||||
* Manifest List: Yes (Image type: application/vnd.docker.distribution.manifest.list.v2+json)
|
||||
* Supported platforms:
|
||||
@ -43,81 +42,97 @@ Image: ghcr.io/tarampampam/3proxy:1.8.2
|
||||
- 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_PASSWORD` | Authorization password (empty by default) | `password` |
|
||||
| `EXTRA_ACCOUNTS` | Additional proxy users | `{"evil":"live", "guest":"pass"}` |
|
||||
| `PRIMARY_RESOLVER` | Primary nameserver (dns resolver; `1.0.0.1` by default) | `8.8.8.8:5353/tcp` |
|
||||
| `SECONDARY_RESOLVER` | Secondary nameserver (dns resolver; `8.8.4.4` by default) | `2001:4860:4860::8844` |
|
||||
| `MAX_CONNECTIONS` | Maximal connections count (`1024` by default) | `2056` |
|
||||
| `PROXY_PORT` | HTTP proxy port number (`3128` by default) | `8080` |
|
||||
| `SOCKS_PORT` | SOCKS proxy port number (`1080` by default) | `8888` |
|
||||
| `EXTRA_CONFIG` | Additional 3proxy configuration (will be added to the **end** of the config file, but before the `proxy` and `flush`) | `# line 1\n# line 2` |
|
||||
| `LOG_OUTPUT` | Log output file path (`/dev/stdout` by default, set `/dev/null` to disable logging) | `/tmp/3proxy.log` |
|
||||
| `EXTRA_ACCOUNTS` | Additional proxy users (JSON object format) | `{"evil":"live", "guest":"pass"}` |
|
||||
| `PRIMARY_RESOLVER` | Primary DNS resolver (`1.0.0.1` by default) | `8.8.8.8:5353/tcp` |
|
||||
| `SECONDARY_RESOLVER` | Secondary DNS resolver (`8.8.4.4` by default) | `2001:4860:4860::8844` |
|
||||
| `MAX_CONNECTIONS` | Maximum number of connections (`1024` by default) | `2056` |
|
||||
| `PROXY_PORT` | HTTP proxy port (`3128` by default) | `8080` |
|
||||
| `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
|
||||
$ docker run --rm -d \
|
||||
docker run --rm -d \
|
||||
-p "3128:3128/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
|
||||
$ docker run --rm -d \
|
||||
docker run --rm -d \
|
||||
-p "3128:3128/tcp" \
|
||||
-p "1080:1080/tcp" \
|
||||
-e "PROXY_LOGIN=evil" \
|
||||
-e "PROXY_PASSWORD=live" \
|
||||
-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
|
||||
|
||||
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.
|
||||
Publishing a new version is straightforward:
|
||||
|
||||
Docker images will be built and published automatically.
|
||||
1. Make the necessary changes in this repository.
|
||||
2. "Publish" a new release on the repository's releases page.
|
||||
|
||||
> The new release will overwrite the `latest` docker image tag in both registries.
|
||||
Docker images will be automatically built and published.
|
||||
|
||||
> Note: The `latest` tag will be overwritten in both registries when a new release is published.
|
||||
|
||||
## Support
|
||||
|
||||
[![Issues][badge_issues]][link_issues]
|
||||
[![Issues][badge_pulls]][link_pulls]
|
||||
|
||||
If you find any errors, please, [make an issue][link_create_issue] in the current repository.
|
||||
If you encounter any issues, please [open an issue][link_create_issue] in this repository.
|
||||
|
||||
## 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_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_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_license]:https://github.com/tarampampam/3proxy-docker/blob/master/LICENSE
|
||||
[link_docker_tags]:https://hub.docker.com/r/tarampampam/3proxy/tags
|
||||
[link_docker_hub]:https://hub.docker.com/r/tarampampam/3proxy/
|
||||
[link_ghcr]:https://github.com/tarampampam/3proxy-docker/pkgs/container/3proxy
|
||||
[link_3proxy]:https://github.com/z3APA3A/3proxy
|
||||
[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