1 марта 2023 года я поднял прокси-сервер Squid в Docker на VPS с Ubuntu. Понадобился он, когда некоторые плагины и темы перестали обновляться с российского хостинга: их серверы не отвечают на запросы из России. Тогда исходящие запросы WordPress можно пустить через прокси на зарубежном сервере. Как я на это наткнулся, описано в заметке про Blocksy Companion.
Шаг 1. Ставим Docker
В стандартных репозиториях Ubuntu Docker старый, поэтому ставим его из официального репозитория:
sudo apt update sudo apt install ca-certificates curl -y sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Проверяем, что служба запущена и Compose на месте:
sudo systemctl status docker docker compose version
Шаг 2. Готовим конфигурацию
Создаём папку и файл docker-compose.yaml:
mkdir squid && cd squid nano docker-compose.yaml
services:
proxy:
image: ubuntu/squid
ports:
- "8080:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- ./passwords:/etc/squid/passwords
restart: always
Снаружи прокси будет доступен на порту 8080, внутри контейнера Squid слушает 3128. Теперь файл squid.conf:
acl SSL_ports port 443 acl Safe_ports port 80 acl Safe_ports port 443 acl CONNECT method CONNECT auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords auth_param basic realm my-proxy acl authenticated proxy_auth REQUIRED http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow authenticated http_access deny all http_port 3128 cache deny all access_log none cache_log /dev/null
Пускать будем только по логину и паролю, иначе прокси быстро найдут и начнут гонять через него чужой трафик.
Шаг 3. Пользователи
Утилита htpasswd лежит в пакете apache2-utils. Первого пользователя создаём с ключом -c, следующих без него:
sudo apt install apache2-utils -y htpasswd -c passwords имя_пользователя htpasswd passwords второй_пользователь
Шаг 4. Запуск
docker compose up -d docker ps
Контейнер должен быть в состоянии Up. На всякий случай закройте порт 8080 в файрволе для всех, кроме адреса вашего сайта. Как это сделать, описано в заметке про UFW.
Шаг 5. Подключаем WordPress
В wp-config.php сайта добавляем адрес VPS, порт 8080 и данные пользователя. WordPress сам пустит через прокси исходящие запросы, включая обновления:
define( 'WP_PROXY_HOST', 'IP-вашего-VPS' ); define( 'WP_PROXY_PORT', '8080' ); define( 'WP_PROXY_USERNAME', 'имя_пользователя' ); define( 'WP_PROXY_PASSWORD', 'пароль' ); define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, *.wordpress.org' );
Если не хочется править конфиг, есть плагин, о нём заметка про Proxy Server Helper.
Squid в Docker поднимается за десять минут, и с ним плагины и темы снова обновляются, даже если их серверы не отвечают российскому хостингу.