1. 安装 Conda 环境
1.1 准备工作
# 创建安装目录
mkdir -p ~/secretflow-install
cd ~/secretflow-install
# 创建 conda 目录
mkdir conda
cd conda
1.2 下载并安装 Miniconda
# 下载 Miniconda 安装脚本(国内用户可使用镜像源)
# 官方源
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 或使用清华镜像(国内更快)
# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 给予执行权限
chmod +x Miniconda3-latest-Linux-x86_64.sh
# 执行安装(交互式安装)
bash Miniconda3-latest-Linux-x86_64.sh
# 或静默安装(自动同意所有选项)
# bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
# 安装完成后,激活 conda
source ~/.bashrc # 或 source ~/.zshrc
# 验证安装
conda --version
1.3 配置 Conda 镜像源(国内用户)
# 配置清华镜像源,加速下载
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --set show_channel_urls yes
# 可选:配置阿里云镜像源
# conda config --add channels https://mirrors.aliyun.com/anaconda/pkgs/main
# conda config --add channels https://mirrors.aliyun.com/anaconda/pkgs/free
# conda config --add channels https://mirrors.aliyun.com/anaconda/cloud/conda-forge
# 更新 conda
conda update conda -y
2. 从源码编译安装 SecretFlow
2.1 创建 Conda 环境
# 创建名为 sf 的 Python 3.9 环境
conda create -n sf python=3.9 -y
# 激活环境
conda activate sf
# 验证环境
python --version # 应该显示 Python 3.8.x
which python # 应该显示在 conda 环境中
2.2 安装编译依赖
# 安装系统依赖(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y g++ gcc make cmake git curl wget
# CentOS/RHEL
# sudo yum install -y gcc-c++ make cmake git curl wget
# 安装 Python 构建工具
pip install --upgrade pip
pip install wheel setuptools build
2.3 克隆 SecretFlow 仓库
# 返回安装目录
cd ~/secretflow-install
# 克隆 SecretFlow 源码
git clone https://github.com/secretflow/secretflow.git
# 或使用国内镜像(如果 GitHub 访问慢)
# git clone https://gitee.com/secretflow/secretflow.git
cd secretflow
# 查看最新版本(可选)
git tag | sort -V | tail -5
# 如果需要特定版本,可以切换
# git checkout v1.3.0
2.4 编译和构建
# 方式1:使用现代 Python 构建工具(推荐)
pip install -e .
# 或方式2:构建 wheel 包
python -m build --wheel
# 或方式3:传统构建方式(如果上面失败)
python setup.py bdist_wheel
# 构建成功后,会在 dist/ 目录生成 wheel 文件
ls dist/
# 输出类似:secretflow-1.3.0-py3-none-any.whl
2.5 安装 SecretFlow
# 安装构建好的 wheel 包
pip install dist/*.whl
# 或直接安装(如果上面步骤成功)
# pip install .
# 验证安装
python -c "import secretflow as sf; print(f'SecretFlow version: {sf.__version__}')"
2.6 安装依赖库
# 如果安装过程中有依赖问题,可以手动安装
pip install -r requirements.txt
# 安装常用依赖
pip install numpy pandas scikit-learn matplotlib jupyter
pip install ray[default] grpcio protobuf
# 安装 JAX(如果需要 GPU 支持)
# CPU 版本
pip install "jax[cpu]"
# GPU 版本(需要 CUDA)
# pip install "jax[cuda11_cudnn82]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
3. 验证 SecretFlow 安装
3.1 基本验证
# 创建测试脚本
cat > test_secretflow.py << 'EOF'
import secretflow as sf
import numpy as np
print("=" * 50)
print("SecretFlow 安装验证")
print("=" * 50)
# 初始化
sf.init(parties=['alice', 'bob'], address='local')
print("✅ SecretFlow 初始化成功")
# 创建设备
alice = sf.PYU('alice')
bob = sf.PYU('bob')
print(f"✅ 设备创建成功: alice={alice}, bob={bob}")
# 测试计算
x = alice(lambda: np.array([1, 2, 3]))()
y = bob(lambda: np.array([4, 5, 6]))()
z = x + y
result = sf.reveal(z)
print(f"✅ 安全计算测试: {result}")
print(f"✅ 预期结果: [5 7 9]")
if np.array_equal(result, np.array([5, 7, 9])):
print("🎉 SecretFlow 安装验证成功!")
else:
print("❌ 计算结果不符合预期")
print("=" * 50)
EOF
# 运行测试
python test_secretflow.py
3.2 运行示例
# 查看示例
ls examples/
# 运行简单示例
python examples/tutorial/1_hello_world.py
4. 安装 SecretNote
4.1 准备工作
# 返回安装目录
cd ~/secretflow-install
# 创建 SecretNote 目录
mkdir secretnote
cd secretnote
4.2 创建 docker-compose.yml
version: '2.4' # 如果docker-compose版本较低可以换成2.4
networks:
test_network:
external: true
services:
alice:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/secretflow/secretnote:1.11.0b1
environment:
- SELF_PARTY=alice
- ALL_PARTIES=alice,bob
- JUPYTER_TOKEN=alice123
- JUPYTER_PASSWORD=RsdyxjH@2026
ports:
- "8090:8888"
volumes:
- ./workspace/alice:/home/secretnote/workspace
command: >
bash -c "
echo '当前节点: alice' &&
echo '等待网络就绪...' &&
sleep 2 &&
exec jupyter server \
--ip=0.0.0.0 \
--port=8888 \
--no-browser \
--ServerApp.token='alice123' \
--ServerApp.base_url='/alice' \
--ServerApp.root_dir='/home/secretnote/workspace'
"
networks:
- test_network
bob:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/secretflow/secretnote:1.11.0b1
environment:
- SELF_PARTY=bob
- ALL_PARTIES=alice,bob
- JUPYTER_TOKEN=bob456
- JUPYTER_PASSWORD=RsdyxjH@2026
ports:
- "8092:8888"
volumes:
- ./workspace/bob:/home/secretnote/workspace
command: >
bash -c "
echo '当前节点: bob' &&
echo '等待网络就绪...' &&
sleep 2 &&
exec jupyter server \
--ip=0.0.0.0 \
--port=8888 \
--no-browser \
--ServerApp.token='bob456' \
--ServerApp.base_url='/bob' \
--ServerApp.root_dir='/home/secretnote/workspace'
"
networks:
- test_network
4.3 创建目录结构和启动脚本
#!/bin/bash
echo "启动节点: ${SELF_PARTY}"
# 直接启动 Jupyter,不使用复杂配置
jupyter lab \
--ip=0.0.0.0 \
--port=8888 \
--no-browser \
--allow-root \
--NotebookApp.token="${JUPYTER_TOKEN:-''}" \
--NotebookApp.password='' \
--NotebookApp.notebook_dir='/workspace'
4.4 启动 SecretNote 集群
# 拉取镜像(如果需要)
docker-compose pull
# 启动服务
docker-compose up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f alice
# 测试访问
curl -s "http://localhost:8090/secretnote/api?token=alice123"
# 使用命令查看启动情况
docker-compose logs -f bob
启动成功后如下图:

4.6 访问信息
# 创建访问信息脚本
cat > access_info.sh << 'EOF'
#!/bin/bash
echo "========================================"
echo "SecretNote 集群访问信息"
echo "========================================"
echo -e "\n🔧 服务状态:"
docker-compose ps
echo -e "\n🌐 Alice 节点:"
echo " 地址: http://localhost:8090/secretnote/"
echo " Token: alice123"
echo " 完整URL: http://localhost:8090/secretnote/?token=alice123"
echo -e "\n🌐 Bob 节点:"
echo " 地址: http://localhost:8092/secretnote/"
echo " Token: bob456"
echo " 完整URL: http://localhost:8092/secretnote/?token=bob456"
echo -e "\n📁 工作空间:"
echo " Alice: $(pwd)/workspace/alice"
echo " Bob: $(pwd)/workspace/bob"
echo -e "\n🔍 测试连接:"
echo -n "Alice: "
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8090/secretnote/api?token=alice123" && echo " 正常" || echo " 异常"
echo -n "Bob: "
curl -s -o /dev/null -w "%{http_code}" "http://localhost:8092/secretnote/api?token=bob456" && echo " 正常" || echo " 异常"
echo -e "\n========================================"
EOF
chmod +x access_info.sh
./access_info.sh
5. 管理脚本
5.1 创建管理脚本
bash
cat > manage.sh << 'EOF'
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
case "$1" in
"start")
echo "启动 SecretNote 集群..."
cd "$SCRIPT_DIR/secretnote" && docker-compose up -d
;;
"stop")
echo "停止 SecretNote 集群..."
cd "$SCRIPT_DIR/secretnote" && docker-compose stop
;;
"restart")
echo "重启 SecretNote 集群..."
cd "$SCRIPT_DIR/secretnote" && docker-compose restart
;;
"status")
echo "集群状态:"
cd "$SCRIPT_DIR/secretnote" && docker-compose ps
;;
"logs")
echo "查看日志..."
if [ -z "$2" ]; then
cd "$SCRIPT_DIR/secretnote" && docker-compose logs -f
else
cd "$SCRIPT_DIR/secretnote" && docker-compose logs -f $2
fi
;;
"clean")
echo "清理集群..."
cd "$SCRIPT_DIR/secretnote" && docker-compose down -v
echo "清理完成"
;;
"update")
echo "更新镜像..."
cd "$SCRIPT_DIR/secretnote" && docker-compose pull
cd "$SCRIPT_DIR/secretnote" && docker-compose up -d
;;
"access")
echo "访问信息:"
cd "$SCRIPT_DIR/secretnote" && ./access_info.sh
;;
*)
echo "使用方法: $0 {start|stop|restart|status|logs|clean|update|access}"
echo " start 启动集群"
echo " stop 停止集群"
echo " restart 重启集群"
echo " status 查看状态"
echo " logs 查看日志"
echo " clean 清理集群"
echo " update 更新镜像"
echo " access 查看访问信息"
exit 1
;;
esac
EOF
chmod +x manage.sh
6. 完整安装验证
6.1 验证 SecretFlow
# 在 Conda 环境中
conda activate sf
python -c "
import secretflow as sf
print(f'SecretFlow 版本: {sf.__version__}')
print(f'Python 版本: {sf.__version__.python_version if hasattr(sf.__version__, \"python_version\") else \"N/A\"}')
"
正常情况下会返回:
[info] [bigint_spi.cc:79] The default library used for BigInt operations is openssl
SecretFlow 版本: 1.15.0.dev$$DATE$$
Python 版本: N/A
# 运行完整测试
cd ~/secretflow-install/secretflow
python -m pytest tests/ -v -k "test_pyu"
6.2 验证 SecretNote
# 打开浏览器访问
echo "请在浏览器中访问:"
echo "1. Alice: http://localhost:8090/secretnote/?token=alice123"
echo "2. Bob: http://localhost:8092/secretnote/?token=bob456"
# 或在终端测试
curl -s "http://localhost:8090/secretnote/api?token=alice123" | python -m json.tool
7. 故障排除
7.1 常见问题
# 1. Conda 环境问题
conda deactivate
conda remove -n sf --all
conda create -n sf python=3.8 -y
conda activate sf
# 2. SecretFlow 编译问题
cd ~/secretflow-install/secretflow
pip install -e . --no-cache-dir
# 3. Docker 权限问题
sudo usermod -aG docker $USER
newgrp docker
# 4. 端口冲突
# 修改 docker-compose.yml 中的端口映射
7.2 卸载和清理
# 清理所有
cd ~/secretflow-install
./manage.sh clean
conda deactivate
conda remove -n sf --all -y
rm -rf ~/secretflow-install
总结
安装完成后,您将拥有:
- SecretFlow:源码编译安装的隐私计算框架
- SecretNote:基于 Docker 的多节点 Jupyter 环境
- 两个节点:Alice 和 Bob,可进行隐私计算实验
- 完整的管理脚本:方便启动、停止和管理集群