Этот проект позволяет легко запустить прокси-сервер 3proxy версии 0.9.4 внутри Docker-контейнера, управляемого с помощью Docker Compose.
Используется многоступенчатая сборка Docker для создания легковесного финального образа. Конфигурационные файлы и логи подключаются как внешние тома (volumes/bind mounts) для удобного управления и сохранения данных.
- Установленный Docker
- Установленный Docker Compose (обычно идет вместе с Docker Desktop или может быть установлен отдельно)
Рекомендуется следующая структура папок: Use code with caution. Markdown 3proxy-docker/
├── config/
│ ├── 3proxy.cfg # Ваш файл конфигурации 3proxy
│ └── .proxyauth # Ваш файл аутентификации
├── logs/ # Папка для лог-файлов (создается Docker или вами)
├── Dockerfile # Файл для сборки образа 3proxy
├── docker-compose.yml # Файл для запуска сервиса
└── README.md # Этот файл
-
Клонируйте репозиторий или скачайте файлы:
- Скопируйте файлы
Dockerfile
иdocker-compose.yml
(предоставленные ранее) в корневую папку вашего проекта (например,my-3proxy-docker
).
- Скопируйте файлы
-
Создайте необходимые директории:
- Внутри корневой папки проекта выполните:
mkdir config logs
- Внутри корневой папки проекта выполните:
-
Поместите файлы конфигурации:
- Скопируйте ваши готовые файлы
3proxy.cfg
и.proxyauth
в созданную папкуconfig/
.
- Скопируйте ваши готовые файлы
-
Настройте
3proxy.cfg
:- Важно: Убедитесь, что пути внутри
config/3proxy.cfg
указаны относительно внутренней структуры контейнера:- Путь к файлу аутентификации должен быть
/etc/3proxy/.proxyauth
(например,users $/etc/3proxy/.proxyauth
). - Путь к лог-файлу должен быть
/var/log/3proxy/3proxy.log
(например,log /var/log/3proxy/3proxy.log D
).
- Путь к файлу аутентификации должен быть
- Убедитесь, что порты, указанные в
3proxy.cfg
(например,proxy -p3128
,socks -p1080
), соответствуют портам, открытым (EXPOSE
) вDockerfile
и проброшенным (ports
) вdocker-compose.yml
. - Настройте методы аутентификации (
auth
) и правила доступа (allow
/deny
) согласно вашим требованиям.
- Важно: Убедитесь, что пути внутри
-
Настройте
.proxyauth
:- Добавьте пользователей и пароли в файл
config/.proxyauth
в формате, соответствующем выбранному методуauth
в3proxy.cfg
(например,имя_пользователя:CL:пароль
для простого текста).
- Добавьте пользователей и пароли в файл
-
Настройте права для папки логов (если нужно):
- Контейнер запускает 3proxy от пользователя
proxyuser
. Чтобы он мог писать логи в папку./logs
, подключенную с хоста, владелец этой папки на хосте должен совпадать с UID/GID пользователяproxyuser
внутри контейнера, либо папка должна иметь права на запись для всех. - Решение:
- Временно запустите контейнер командой
sleep
: изменитеdocker-compose.yml
, добавивcommand: ["sleep", "infinity"]
в сервисproxy
, затем запуститеdocker-compose up -d
. - Узнайте UID/GID:
docker exec 3proxy-service id proxyuser
(например,uid=999 gid=999
). - Остановите контейнер:
docker-compose down
. - Уберите
command: ["sleep", "infinity"]
изdocker-compose.yml
. - Измените владельца папки
./logs
на хосте:sudo chown UID:GID ./logs
(например,sudo chown 999:999 ./logs
).
- Временно запустите контейнер командой
- Контейнер запускает 3proxy от пользователя
-
Перейдите в директорию проекта:
- Откройте терминал и перейдите в папку, где находятся
Dockerfile
иdocker-compose.yml
.
- Откройте терминал и перейдите в папку, где находятся
-
Соберите образ и запустите контейнер:
docker-compose up -d --build
--build
: Принудительно собрать образ при первом запуске или еслиDockerfile
изменился.-d
: Запустить контейнер в фоновом (detached) режиме.
После успешного запуска вы можете подключаться к прокси-серверу:
- HTTP Прокси:
IP_АДРЕС_ХОСТА:3128
(или другой порт, указанный в секцииports
файлаdocker-compose.yml
для порта 3128 контейнера). - SOCKS5 Прокси:
IP_АДРЕС_ХОСТА:1080
(или другой порт, указанный в секцииports
файлаdocker-compose.yml
для порта 1080 контейнера).
Используйте имя пользователя и пароль, указанные в вашем файле config/.proxyauth
.
Пример использования с curl
:
- HTTP:
curl -x http://ВАШ_ЛОГИН:ВАШ_ПАРОЛЬ@IP_АДРЕС_ХОСТА:3128 https://ifconfig.me
- SOCKS5:
curl -x socks5://ВАШ_ЛОГИН:ВАШ_ПАРОЛЬ@IP_АДРЕС_ХОСТА:1080 https://ifconfig.me
Используйте стандартные команды docker-compose
:
- Просмотр логов:
docker-compose logs -f
- Остановка сервиса:
docker-compose stop
- Запуск остановленного сервиса:
docker-compose start
- Перезапуск сервиса (полезно после изменения конфигурации):
docker-compose restart proxy
- Остановка и удаление контейнера/сети:
docker-compose down
Нужно дать права на запись в папку ./logs на вашем хосте тому UID/GID, под которым работает proxyuser в контейнере.
- Шаг 1: Узнайте UID/GID proxyuser в контейнере. Выполните команду (замените my-3proxy-compose_proxy_1 на реальное имя вашего контейнера, если оно другое - можно посмотреть через docker ps):
docker exec <имя_контейнера_3proxy> id proxyuser
docker exec 3proxy-service id proxyuser
если контейнер не запускается, можно временно изменить Dockerfile, добавив RUN id proxyuser >> /id.txt перед USER proxyuser, пересобрать образ (docker-compose build), запустить контейнер с CMD ["sleep", "infinity"], скопировать файл id.txt (docker cp :/id.txt .) и посмотреть его.
Вы увидите что-то вроде uid=101(proxyuser) gid=102(proxyuser) groups=102(proxyuser). Запомните UID и GID (например, 101 и 102).
Шаг 2: Измените владельца папки ./logs на хосте. Перейдите в папку, где лежит ваш docker-compose.yml, и выполните (замените UID:GID на реальные значения):
sudo chown UID:GID ./logs
sudo chown 101:102 ./logs
Выполните команду chown, чтобы изменить владельца папки ./logs на хосте на UID 999 и GID 999:
sudo chown 999:999 ./logs
- "Permission denied" в логах: См. Шаг 6 в разделе "Установка и настройка".
- "Connection refused" при подключении: Проверьте, что порт правильно проброшен в
docker-compose.yml
, 3proxy настроен слушать этот порт в3proxy.cfg
, и файрвол хоста не блокирует порт. - Ошибки аутентификации (407 / SOCKS5 error 5): Внимательно проверьте формат и содержимое файлов
config/.proxyauth
иconfig/3proxy.cfg
(особенно секцииauth
,users
,allow
,deny
). Смотрите логиdocker-compose logs -f
для деталей.