🧩 Tổng quan
Trong quá trình triển khai hệ thống giám sát Admin.Collector trên một server nội bộ sử dụng Ubuntu 16.04, mình gặp phải rất nhiều rào cản kỹ thuật, đặc biệt là khi:
- Ubuntu 16.04 chỉ hỗ trợ Python 3.5 mặc định
pip
không hoạt động do lỗi SSL- Mạng nội bộ yêu cầu sử dụng proxy bắt buộc
- Một số package hiện đại yêu cầu Python >= 3.7
Bài viết này chia sẻ lại toàn bộ quá trình mình xử lý các vấn đề trên, từ việc build Python 3.10 trên Ubuntu 16.04, cấu hình proxy, bypass SSL, cho đến việc sử dụng pip
thành công trong môi trường nội bộ.
📌 Tại sao không dùng Docker?
Mình cũng từng cân nhắc việc dùng container Ubuntu 22.04 với Python 3.10 sẵn có, nhưng gặp phải giới hạn:
- Python script cần truy cập tài nguyên hệ thống host như
zpool status
,sensors
,df
, … - Nếu dùng container, phải mount thêm nhiều thứ:
/sys
,/proc
,/dev
, … và cần chạy container ở chế độ--privileged
Vì vậy, mình quyết định chạy trực tiếp trên host để tránh rườm rà.
🧪 Các vấn đề thường gặp
Vấn đề | Triệu chứng | Nguyên nhân |
---|---|---|
pip lỗi SSL | [SSL: CERTIFICATE_VERIFY_FAILED] | Python thiếu _ssl |
pip không kết nối | [Errno -3] Temporary failure in name resolution | DNS không hoạt động |
Không tải được package | No matching distribution found | Do dùng HTTP thay vì HTTPS |
Mạng nội bộ có proxy | pip timeout hoặc không phản hồi | Không khai báo proxy hoặc proxy chèn CA |
🛠 Hướng dẫn chi tiết
✅ Cài OpenSSL 1.1.1w thủ công
Ubuntu 16.04 mặc định chỉ có libssl 1.0.2
, không đủ để build Python 3.10 với SSL.
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xvzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl --openssldir=/opt/openssl
make -j$(nproc)
make install
🐍 Build Python 3.10 với SSL đầy đủ
cd /usr/src
wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
tar xzf Python-3.10.14.tgz
cd Python-3.10.14
./configure --enable-optimizations --with-openssl=/opt/openssl \
LDFLAGS="-Wl,-rpath=/opt/openssl/lib"
make -j$(nproc)
make altinstall
🐍 Tạo venv với Python 3.10
/usr/local/bin/python3.10 -m venv /etc/admin.collector/venv
source /etc/admin.collector/venv/bin/activate
python -m ensurepip --upgrade
pip install --upgrade pip
🌐 Cấu hình proxy nội bộ
Tạo file ~/proxy
:
export http_proxy=http://10.10.14.200:3128
export https_proxy=http://10.10.14.200:3128
export no_proxy=localhost,10.10.14.0/24
Khi dùng:
source ~/proxy
⚠️ Bypass SSL nếu proxy chặn HTTPS
Chạy pip như sau:
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org \
--disable-pip-version-check --no-cache-dir \
--index-url http://pypi.org/simple \
--extra-index-url https://pypi.org/simple \
-r /etc/admin.collector/source/requirements.txt
📥 Ví dụ requirements.txt (module_req)
mysql-connector-python==8.0.23
protobuf==3.19.6
setuptools_rust
prometheus_client
jsonpath_ng
pyopenssl
requests
pyyaml
docker
wheel
pandas
unidecode
PySocks
Nếu package nào lỗi không tìm thấy (ví dụ mysql-connector-python==8.0.23
), có thể:
- Gỡ
==version
để pip tự chọn phiên bản phù hợp - Hoặc tải
.whl
offline từ máy khác
Script tự động sửa toàn bộ
Dưới đây là script hoàn chỉnh để:
- Cài OpenSSL 1.1.1w từ source
- Build Python 3.10.14 với SSL hỗ trợ đầy đủ
- Tạo lại virtualenv
🛠️ Script fix_python_ssl.sh
#!/bin/bash
set -e
echo "=== [Cài OpenSSL 1.1.1w] ==="
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xvzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl --openssldir=/opt/openssl
make -j$(nproc)
make install
echo "✅ OpenSSL 1.1.1w đã cài ở /opt/openssl"
echo "=== [Cài Python 3.10.14 với SSL] ==="
cd /usr/src
rm -rf Python-3.10.14
wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
tar xzf Python-3.10.14.tgz
cd Python-3.10.14
./configure --enable-optimizations --with-openssl=/opt/openssl LDFLAGS="-Wl,-rpath=/opt/openssl/lib"
make -j$(nproc)
make altinstall
echo "✅ Python 3.10.14 đã build lại với SSL"
echo "=== [Tạo lại venv collector] ==="
rm -rf /etc/admin.collector/venv
/usr/local/bin/python3.10 -m venv /etc/admin.collector/venv
source /etc/admin.collector/venv/bin/activate
python -m ensurepip --upgrade
pip install --upgrade pip
echo "✅ Virtualenv đã sẵn sàng với pip mới"
echo "Bạn có thể chạy: pip install -r /etc/admin.collector/source/requirements.txt"
▶️ Cách sử dụng
Tạo file và dán nội dung trên vào:
vi fix_python_ssl.sh
Chạy script:
chmod +x fix_python_ssl.sh
sudo ./fix_python_ssl.sh
Sau khi chạy xong:
source /etc/admin.collector/venv/bin/activate
pip install -r /etc/admin.collector/source/requirements.txt
⚖️ Ưu điểm vs Nhược điểm khi build Python thủ công
✅ Ưu điểm | ❌ Nhược điểm |
---|---|
Có thể dùng Python 3.10 ngay cả trên hệ thống cũ | Phải build thủ công, khá tốn thời gian |
Tùy biến được compile flags và OpenSSL | Dễ sai nếu thiếu thư viện |
Hoạt động tốt trong môi trường có proxy | Không phù hợp cho người mới |
💡 Sơ đồ triển khai
+------------------------------+
| Ubuntu 16.04 (Python 3.5) |
| ↓ build OpenSSL 1.1.1 |
| ↓ build Python 3.10 |
| ↓ create virtualenv |
| ↓ source proxy |
| ↓ pip install gói |
+------------------------------+
🧠 Lời khuyên
- ✅ Nếu có thể, nâng cấp lên Ubuntu 20.04 hoặc 22.04 để tiết kiệm thời gian.
- 🧪 Nếu buộc phải dùng Ubuntu 16.04, hãy đảm bảo bạn hiểu rõ proxy và SSL.
- 🧰 Bạn nên viết 1 script setup tự động các bước build để tái sử dụng dễ dàng.
- 🚫 Không nên để
--trusted-host
và--index-url
trong production script.
✅ Kết luận
Triển khai Python 3.10 trên Ubuntu 16.04 trong môi trường mạng nội bộ có proxy là hoàn toàn khả thi, nhưng cần kiên nhẫn và hiểu kỹ hệ thống. Sau khi vượt qua các rào cản như SSL, proxy và pip
, bạn sẽ có một môi trường Python hiện đại để chạy bất kỳ ứng dụng nào bạn cần, kể cả trong hệ thống giám sát như Admin.Collector.