Разбор установки прокси Squid в Docker на VPS с Ubuntu. Типичный сценарий — обойти блокировки при обновлениях WordPress и доступе к внешним API с хостинга, где часть адресов режется. Схема: Docker + Compose, basic-auth, проброс порта, константы в wp-config.php.
Шаг 1. Установка Docker на Ubuntu
В штатном репозитории Ubuntu Docker часто не самый свежий. Для Docker CE удобнее официальный репозиторий.
Зависимости для HTTPS-репозиториев:
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
GPG-ключ Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Репозиторий (в примере — Ubuntu Focal / 20.04, amd64). Для другой версии подставьте свой codename вместо focal:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Проверка, что APT видит пакеты:
apt-cache policy docker-ce
Установка и проверка службы:
sudo apt install docker-ce -y sudo systemctl status docker docker --version
Ожидаемый статус: Active: active (running).
Шаг 2. Docker Compose
Compose удобен, чтобы описать сервис, тома и restart-политику в одном файле:
sudo apt install docker-compose -y docker-compose --version
Шаг 3. Конфиг Squid и Compose
Каталог проекта:
mkdir squid cd squid
Файл docker-compose.yaml:
version: "3"
services:
proxy:
image: ubuntu/squid
ports:
- "8080:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- ./passwords:/etc/squid/passwords
restart: always
Снаружи контейнера порт 8080, внутри Squid слушает 3128. Образ ubuntu/squid — официальный вариант от Ubuntu на Docker Hub.
Файл squid.conf с basic-auth и без кэша (прокси «на проход»):
acl localnet src 10.0.0.0/8 acl localnet src 172.16.0.0/12 acl localnet src 192.168.0.0/16 acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 443 acl Safe_ports port 21 acl CONNECT method CONNECT auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords auth_param basic realm my-proxy-name acl authenticated proxy_auth REQUIRED http_access allow authenticated http_port 3128 cache deny all access_log none cache_log /dev/null
Доступ только для пользователей из файла passwords. Логи и кэш отключены, чтобы не раздувать диск на VPS; при отладке access_log можно вернуть.
Пустой файл паролей (наполним через htpasswd):
nano passwords # или: touch passwords
Шаг 4. Запуск контейнера
docker-compose up -d docker ps
В списке контейнеров Squid должен быть в состоянии Up. Если падает сразу — смотрите docker-compose logs: чаще всего битый путь к passwords или синтаксис squid.conf.
Шаг 5. Пользователи (htpasswd)
Первый пользователь (ключ -c создаёт файл заново, не затрите существующих):
sudo htpasswd -c passwords username
Следующие пользователи — без -c:
sudo htpasswd passwords username2
Пакет с утилитой: apache2-utils (sudo apt install apache2-utils), если htpasswd не найден.
Шаг 6. WordPress через прокси
В wp-config.php (до строки «That’s all, stop editing!»):
define('WP_PROXY_HOST', 'IP_или_хост_VPS_с_прокси');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_USERNAME', 'username');
define('WP_PROXY_PASSWORD', 'password');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com');
Важно: с хоста снаружи контейнера открыт порт 8080 (маппинг 8080:3128). Если WordPress на той же машине — укажите 127.0.0.1 и порт 8080. Если сайт на другом сервере — публичный IP/DNS VPS с прокси и тот же порт, плюс firewall только для доверенных IP.
После правок проверьте обновления ядра/плагинов и исходящие HTTP-запросы из админки. Учётки и пароль прокси не коммитьте в git.
Безопасность (кратко)
- не оставляйте 8080/3128 открытыми в интернет без ACL и сильных паролей;
- ограничьте доступ firewall (ufw/iptables/security group) по IP клиентов;
- сложные пароли basic-auth, отдельный пользователь только под WP;
- обновляйте образ
ubuntu/squidи хост.
Итог
Получается лёгкий HTTP-прокси с авторизацией в Docker: конфиг и пароли на томах, автозапуск через restart: always. Схема подходит и для WordPress, и для других клиентов, которым нужен исходящий HTTP(S) через контролируемый узел.