实验室服务器环境配置:超详细安装与部署手册
前言:本手册针对我们实验室在医院环境下搭建生物信息学 + 人工智能服务器时,需要的最细粒度配置步骤,力图“从零到可用”进行指导。读者可以选择性跳过已熟悉的部分,或根据实际情况微调版本号、命令参数。本手册与《服务器环境配置初始化方案》文档配套使用,后者阐述了总体思路与网络策略,本手册则关注具体安装命令与配置过程。
1. 操作系统与基础
以下针对 2×CPU 服务器 + 1×GPU 服务器 + 1×ZFS 存储服务器,统一安装 Ubuntu 22.04 LTS。
1.1 安装 Ubuntu 22.04
- 介质准备
- 下载 Ubuntu 22.04 LTS Server ISO (e.g.
ubuntu-22.04.3-live-server-amd64.iso); - 使用 Rufus/Etcher 写入U盘,或在虚拟化环境中加载 ISO。
- 下载 Ubuntu 22.04 LTS Server ISO (e.g.
- 引导及分区
- BIOS/UEFI 中检查硬盘模式与引导项;禁用 Secure Boot(若使用第三方驱动)
- 进入安装后,选择语言、网络配置、分区方案:
- 示例分区:
/根分区 + swap(大小依据内存)+/home(若有单独SSD/RAID可分配)。 - ZFS服务器 上别分配数据盘,以便后续 zpool 使用整盘。
- 示例分区:
- 系统初始设置
- 设置主机名:
cpu1,cpu2,gpu1,storage1; - 创建第一个管理员用户;
- 安装完成后,重启进入系统。
- 设置主机名:
1.2 基础软件与安全加固
- 更新系统 & 安装常见工具
1 2 3 4 5
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y build-essential git curl wget vim htop screen tmux unzip zip \ zlib1g-dev libssl-dev libcurl4-openssl-dev libxml2-dev libncurses5-dev \ nfs-common ufw net-tools
- 配置 SSH
1 2 3 4
# 禁用root直登 sudo sed -i 's/PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config # 开启密钥登录(若需要), 并确认 PasswordAuthentication yes/no sudo systemctl restart ssh
- UFW 防火墙
1 2 3 4 5
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH # CPU服务器上可能还要 8787 (RStudio), ... sudo ufw enable
- 创建常用用户
1 2 3 4
sudo adduser alice sudo usermod -aG sudo alice # 同理创建 bob, etc. # 在每台机器上保持相同用户名和UID/GID,以便后续NFS映射一致
1.3 cgroups / systemd 限制(可选)
- 如果要限制单用户 CPU/内存占用,可在
/etc/systemd/system/user-<UID>.slice.d/下创建.conf文件。例如:1 2
sudo mkdir -p /etc/systemd/system/user-1001.slice.d/ sudo nano /etc/systemd/system/user-1001.slice.d/limits.conf
写入:
1 2 3
[Slice] MemoryMax=100G CPUWeight=50
然后
sudo systemctl daemon-reload。此处仅示例,实际配置视需求而定。
2. ZFS 存储服务器配置
假设 storage1 上有 60 块 HDD,各 18TB,用来做 ZFS。
2.1 安装 ZFS
1
2
sudo apt-get update
sudo apt-get install -y zfsutils-linux
检查版本:
1
zfs version
2.2 创建 zpool
- 磁盘识别
1 2
lsblk # 查看 /dev/sdX /dev/sdY … 60块硬盘 - 创建池 (示例)
- 假设我们做 5 组 RAIDZ2,每组 12 块盘:
1 2 3 4 5
sudo zpool create tank \ raidz2 /dev/sd[b-m] \ raidz2 /dev/sd[n-y] \ ... # 直到覆盖所有盘
- 也可全部一次性 raidz2 60块, 但建议多个vdev以提高并发性能。
- 假设我们做 5 组 RAIDZ2,每组 12 块盘:
- 验证
1 2
zpool status # 应显示 healthy, total size, raidz2 vdevs
2.3 创建 ZFS 文件系统 & NFS 共享
- 创建 data
1
sudo zfs create tank/data - 设置 NFS 共享
1 2 3 4
# 方式一:zfs自带 sudo zfs set sharenfs="rw=@10.0.0.0/24" tank/data # 方式二:手动写 /etc/exports # /tank/data 10.0.0.0/24(rw,sync,no_root_squash)
- 设置 ZFS 快照
1 2 3 4
sudo nano /etc/cron.daily/zfs-snapshot #!/bin/bash /usr/sbin/zfs snapshot tank/data@daily_$(date +%Y%m%d) sudo chmod +x /etc/cron.daily/zfs-snapshot
每天自动生成 snapshot,可定期清理。
- 在 CPU/GPU 服务器上挂载
1 2 3 4
sudo mkdir /data sudo mount -t nfs storage1.lab.local:/tank/data /data # 或编辑 /etc/fstab: # storage1.lab.local:/tank/data /data nfs defaults 0 0
3. CPU 服务器详细安装
以下假设 2 台 CPU 服务器:cpu1 / cpu2。操作大同小异。
3.1 Miniconda + 生物信息 Python
- 安装 Miniconda
1 2 3 4 5
cd /tmp wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh bash Miniconda3-py310_23.5.2-0-Linux-x86_64.sh -b -p /opt/miniconda echo 'export PATH="/opt/miniconda/bin:$PATH"' | sudo tee /etc/profile.d/conda.sh source /etc/profile.d/conda.sh
- 创建环境:bio_env
1 2
conda create -n bio_env python=3.10 -y conda activate bio_env
-
更换源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
channels: - defaults show_channel_urls: true default_channels: - https://mirrors.zju.edu.cn/anaconda/pkgs/main - https://mirrors.zju.edu.cn/anaconda/pkgs/r - https://mirrors.zju.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.zju.edu.cn/anaconda/cloud msys2: https://mirrors.zju.edu.cn/anaconda/cloud bioconda: https://mirrors.zju.edu.cn/anaconda/cloud menpo: https://mirrors.zju.edu.cn/anaconda/cloud pytorch: https://mirrors.zju.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.zju.edu.cn/anaconda/cloud simpleitk: https://mirrors.zju.edu.cn/anaconda/cloud nvidia: https://mirrors.zju.edu.cn/anaconda-r auto: https://mirrors.zju.edu.cn/anaconda/cloud intel: https://mirrors.zju.edu.cn/anaconda/cloud MindSpore: https://mirrors.zju.edu.cn/anaconda/cloud numba: https://mirrors.zju.edu.cn/anaconda/cloud Paddle: https://mirrors.zju.edu.cn/anaconda/cloud ssl_verify: true
-
安装科学&生信包
1 2 3 4 5 6
conda install -n bio_env -c conda-forge -c bioconda \ numpy=1.24.3 pandas=2.0.2 scipy=1.10.1 scikit-learn=1.2.2 \ matplotlib=3.7.1 seaborn=0.12.2 statsmodels=0.14.0 \ jupyterlab=4.0.5 ipython=8.14.0 biopython=1.81 pysam=0.21.0 \ pybedtools=0.9.2 samtools=1.17 bcftools=1.17 bedtools=2.30.0 fastqc=0.12.1 \ multiqc=1.14 cutadapt=4.4 blast=2.14.0
- (可选) CPU版 PyTorch
1
conda install pytorch=2.0.1 torchvision=0.15.2 torchaudio=2.0.2 cpuonly -c pytorch
3.2 R & RStudio Server
- 安装 R 4.3.x
1 2 3 4 5
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9 echo "deb https://cran.rstudio.com/bin/linux/ubuntu jammy-cran40/" | sudo tee /etc/apt/sources.list.d/cran.list sudo apt-get update sudo apt-get install -y r-base r-base-dev R --version
- 安装 RStudio Server
1 2 3 4
wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2023.06.1-amd64.deb sudo apt-get install gdebi-core sudo gdebi rstudio-server-2023.06.1-amd64.deb # 默认端口 8787, systemctl status rstudio-server
- 安装常见 R 包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 在 R/ RStudio 控制台运行 install.packages(c("tidyverse","data.table","devtools","remotes","rmarkdown","knitr", "shiny","DT","plotly","pheatmap","ComplexHeatmap","EnhancedVolcano", "RColorBrewer","ggpubr","gridExtra","gapminder","parallelly")) if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install(version = "3.17") BiocManager::install(c( "BiocGenerics","S4Vectors","IRanges","GenomicRanges","SummarizedExperiment","Biobase", "Rsamtools","Biostrings","AnnotationDbi","DESeq2","edgeR","limma","tximport","GenomicFeatures", "org.Hs.eg.db","org.Mm.eg.db","ChIPseeker","DiffBind","Seurat","SingleCellExperiment", "scater","scran","clusterProfiler","GSEABase","ReactomePA","biomaRt","Gviz", "Rsubread","VariantAnnotation","BSgenome.Hsapiens.UCSC.hg38" ))
- 数据库(可选)
1 2 3 4 5 6
# PostgreSQL sudo apt-get install -y postgresql-15 postgresql-contrib # or MariaDB/MySQL sudo apt-get install -y mariadb-server # systemctl enable postgresql # systemctl start postgresql
4. GPU 服务器:深度学习 + CVAT GPU
4.1 NVIDIA 驱动 & CUDA
- 检查预装
1 2
nvidia-smi # e.g. Driver Version: 550.90.07, CUDA Version: 12.4 - 若需切换到 CUDA 11.8:
- 先移除现有驱动 & CUDA (慎重)
- 添加 NVIDIA repo & 安装指定版本
- 这里从略,若无冲突就用现有即可。
4.2 Miniconda + PyTorch GPU
- 安装 Miniconda
同 CPU 服务器方法 - 创建 gpu_env
1 2
conda create -n gpu_env python=3.10 -y conda activate gpu_env
- 安装 PyTorch GPU (e.g. CUDA 11.8)
1 2
conda install pytorch=2.0.1 torchvision=0.15.2 torchaudio=2.0.2 pytorch-cuda=11.8 \ -c pytorch -c nvidia
- 测试
1
python -c "import torch; print(torch.cuda.is_available())"
期待输出
True。
4.3 CVAT GPU 部署 (Docker Compose)
- 安装 Docker + nvidia-container-toolkit
1 2 3 4 5 6 7 8
sudo apt-get install docker.io distribution=$(. /etc/os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-container-toolkit/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-container-toolkit/$distribution/nvidia-container-toolkit.list \ | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt-get update sudo apt-get install nvidia-container-toolkit sudo systemctl restart docker
- 下载 CVAT compose
1 2 3
mkdir /opt/cvat && cd /opt/cvat wget https://raw.githubusercontent.com/opencv/cvat/v2.5.0/docker-compose.yml # or git clone https://github.com/opencv/cvat.git
- 编辑 docker-compose.yml
- 找到
cvat:服务块,增加 GPU 配置:1 2 3 4 5 6 7 8 9
deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] environment: NVIDIA_VISIBLE_DEVICES: all
- 确保端口映射
"8080:8080"存在。
- 找到
- 启动 CVAT
1
docker compose up -d打开
http://gpu1:8080即可在内网访问。
5. DMZ 服务器:反向代理 / 网闸(可选)
5.1 Ubuntu + 基础
- 若自建 DMZ 机(2000~3000 元二手机),安装 Ubuntu 22.04,同上安装工具;
- 配置双网口:一面连外/堡垒机/医院VPN区,另一面连内网(与 CPU/GPU 同网段或不同 VLAN 视IT策略)。
5.2 Nginx/Traefik配置
- 安装 Nginx (示例)
1 2 3
sudo apt-get install -y nginx systemctl enable nginx systemctl start nginx
- 编辑 /etc/nginx/sites-available/lab.conf (示例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
server { listen 80; server_name dmz.labhospital.org; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name dmz.labhospital.org; ssl_certificate /etc/ssl/certs/dmz.crt; ssl_certificate_key /etc/ssl/private/dmz.key; location /rstudio/ { proxy_pass http://cpu1.lab.local:8787/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; # ... } location /cvat/ { proxy_pass http://gpu1.lab.local:8080/; # ... } # 其他路由 /jupyter/ → cpu1:8888 之类 }
- 启用并重启
1 2
sudo ln -s /etc/nginx/sites-available/lab.conf /etc/nginx/sites-enabled/lab.conf sudo systemctl restart nginx
- IT 配合
- 在堡垒机/防火墙开放 80/443 → DMZ 服务器;
- 在 DMZ ↔ 内网 开放 8787,8080,8888,22,3306…(按需)。
5.3 正向代理 / 网闸(如需)
- 如果要让内网服务器通过 DMZ 出网拉 apt/pip/conda 包,可安装 Squid or Nginx http proxy:
1 2 3 4
sudo apt-get install squid sudo nano /etc/squid/squid.conf # 设置 http_port 3128, ACL白名单, etc. sudo systemctl restart squid
- 然后 CPU/GPU
export http_proxy=http://dmz.labhospital.org:3128即可。
6. 常见问题与注意事项
- 文件传输
- 若堡垒机无 SFTP,需用医院 Web 工具上传大文件到 CPU/GPU or /data;
- 也可在 DMZ 服务器上开 SFTP/SSH (需IT允许) 以简化传输。
- VSCode Remote SSH
- 需要堡垒机允许 SSH 隧道或 DMZ 端口映射;
- 否则只能通过 code-server Web IDE (443) 模式。
- 权限与日志
- ZFS 快照防误删;
- RStudio Server logs / Docker logs / Nginx logs 定期查看;
- GPU 服务器
nvidia-smi监控负载。
- PostgreSQL / MySQL 外网访问
- 若要外网用 GUI 直连数据库 (端口 5432/3306),需IT配合堡垒机/DMZ开放相应协议;
- 建议大多数据库只在内网用,安全性更好。
- GPU 驱动升级
- 先在测试机或conda docker环境试跑确认无冲突再升级生产版本;
- 注意 PyTorch CUDA 兼容性。
7. 一体化脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
#!/bin/bash
# 文件名: setup_lab_environment.sh
# 运行方式: sudo ./setup_lab_environment.sh
# 脚本内增加了可配置的参数以便用户定制,例如用户名、用户组、初始密码等
CHECKPOINT_FILE="/var/log/setup_lab_environment.checkpoint"
# 确保检查点文件存在
touch "$CHECKPOINT_FILE"
# 定义函数:检查步骤是否完成
function is_step_completed() {
grep -qx "$1" "$CHECKPOINT_FILE" 2>/dev/null
}
# 定义函数:标记步骤为完成
function mark_step_completed() {
echo "$1" >> "$CHECKPOINT_FILE"
}
# 配置参数
# 用户名和组配置
USER_NAME="alice" # 用户名(可以修改为其他)
USER_GROUP="sudo" # 用户组,默认添加用户到 sudo 组
USER_PASSWORD="password" # 用户密码,建议修改为更强的密码
# 开始配置
echo "========== 开始部署服务器环境 =========="
#############################################
# 1. 系统更新与基础软件安装
#############################################
if ! is_step_completed "system_update"; then
echo "[Step 1] 更新系统并安装基础工具..."
apt-get update -y && apt-get upgrade -y
apt-get install -y build-essential git curl wget vim htop screen tmux unzip zip \
zlib1g-dev libssl-dev libcurl4-openssl-dev libxml2-dev libncurses5-dev \
nfs-common ufw net-tools sudo
mark_step_completed "system_update"
else
echo "[Step 1] 系统更新已完成,跳过。"
fi
#############################################
# 2. SSH 和 UFW 配置
#############################################
if ! is_step_completed "ssh_ufw_config"; then
echo "[Step 2] 配置 SSH 安全与 UFW 防火墙..."
# 禁用 root 直登
sed -i 's/PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart ssh
# 配置 UFW
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw --force enable
mark_step_completed "ssh_ufw_config"
else
echo "[Step 2] SSH 和 UFW 已配置,跳过。"
fi
#############################################
# 3. 创建常用用户(示例:alice)
#############################################
if ! is_step_completed "create_user_alice"; then
echo "[Step 3] 创建用户 $USER_NAME 并添加到 $USER_GROUP 组..."
adduser $USER_NAME --gecos "$USER_NAME" --disabled-password
echo "$USER_NAME:$USER_PASSWORD" | chpasswd # 请修改为实际密码策略
usermod -aG $USER_GROUP $USER_NAME
mark_step_completed "create_user_alice"
else
echo "[Step 3] 用户 $USER_NAME 已创建,跳过。"
fi
#############################################
# 4. 安装 Miniconda(用户级别安装)
#############################################
if ! is_step_completed "install_miniconda"; then
echo "[Step 4] 下载并安装 Miniconda 到当前用户目录..."
cd /tmp
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
# 安装到当前用户的 home 目录,避免使用 sudo
su - $USER_NAME -c "bash /tmp/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh -b -p \$HOME/miniconda"
su - $USER_NAME -c "echo 'export PATH=\"\$HOME/miniconda/bin:\$PATH\"' >> \$HOME/.bashrc"
mark_step_completed "install_miniconda"
else
echo "[Step 4] Miniconda 已安装,跳过。"
fi
#############################################
# 5. 配置 Conda 镜像源(用户 .condarc)
#############################################
if ! is_step_completed "setup_condarc"; then
echo "[Step 5] 为用户 $USER_NAME 配置 .condarc (使用国内镜像源)..."
su - $USER_NAME -c "cat > \$HOME/.condarc << 'EOF'
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.zju.edu.cn/anaconda/pkgs/main
- https://mirrors.zju.edu.cn/anaconda/pkgs/r
- https://mirrors.zju.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.zju.edu.cn/anaconda/cloud
msys2: https://mirrors.zju.edu.cn/anaconda/cloud
bioconda: https://mirrors.zju.edu.cn/anaconda/cloud
menpo: https://mirrors.zju.edu.cn/anaconda/cloud
pytorch: https://mirrors.zju.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.zju.edu.cn/anaconda/cloud
simpleitk: https://mirrors.zju.edu.cn/anaconda/cloud
nvidia: https://mirrors.zju.edu.cn/anaconda-r
auto: https://mirrors.zju.edu.cn/anaconda/cloud
intel: https://mirrors.zju.edu.cn/anaconda/cloud
MindSpore: https://mirrors.zju.edu.cn/anaconda/cloud
numba: https://mirrors.zju.edu.cn/anaconda/cloud
Paddle: https://mirrors.zju.edu.cn/anaconda/cloud
ssl_verify: true
EOF"
mark_step_completed "setup_condarc"
else
echo "[Step 5] .condarc 已配置,跳过。"
fi
#############################################
# 6. 创建 Conda 环境并安装 Python 生信包
#############################################
if ! is_step_completed "create_bio_env"; then
echo "[Step 6] 为用户 $USER_NAME 创建 Conda 环境 bio_env 并安装生信包..."
su - $USER_NAME -c "source \$HOME/miniconda/bin/activate && \
conda create -n bio_env python=3.10 -y && \
conda activate bio_env && \
conda install -n bio_env -c conda-forge -c bioconda \
numpy=1.24.3 pandas=2.0.2 scipy=1.10.1 scikit-learn=1.2.2 \
matplotlib=3.7.1 seaborn=0.12.2 statsmodels=0.14.0 \
jupyterlab=4.0.5 ipython=8.14.0 biopython=1.81 pysam=0.21.0 \
pybedtools=0.9.2 samtools=1.17 bcftools=1.17 bedtools=2.30.0 fastqc=0.12.1 \
multiqc=1.14 cutadapt=4.4 blast=2.14.0"
mark_step_completed "create_bio_env"
else
echo "[Step 6] Conda 环境 bio_env 已创建,跳过。"
fi
#############################################
# 7. (可选) 安装 CPU版 PyTorch
#############################################
if ! is_step_completed "install_cpu_pytorch"; then
echo "[Step 7] 为用户 $USER_NAME 在 bio_env 中安装 CPU 版 PyTorch..."
su - $USER_NAME -c "source \$HOME/miniconda/bin/activate && conda activate bio_env && \
conda install pytorch=2.0.1 torchvision=0.15.2 torchaudio=2.0.2 cpuonly -c pytorch"
mark_step_completed "install_cpu_pytorch"
else
echo "[Step 7] CPU版 PyTorch 已安装,跳过。"
fi
#############################################
# 8. 安装 R 与 RStudio Server
#############################################
if ! is_step_completed "install_r"; then
echo "[Step 8] 安装 R 4.3.x 与 RStudio Server..."
# 安装 R
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9
echo "deb https://cran.rstudio.com/bin/linux/ubuntu jammy-cran40/" > /etc/apt/sources.list.d/cran.list
apt-get update
apt-get install -y r-base r-base-dev
R --version
# 安装 RStudio Server
cd /tmp
wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2023.06.1-amd64.deb
dpkg -i rstudio-server-2023.06.1-amd64.deb
mark_step_completed "install_r"
else
echo "[Step 8] R 与 RStudio Server 已安装,跳过。"
fi
#############################################
# 9. 安装 R 包(用户级别)
#############################################
if ! is_step_completed "install_r_packages"; then
echo "[Step 9] 为用户 $USER_NAME 安装 R 包..."
su - $USER_NAME -c "R -e \"install.packages(c('tidyverse','data.table','devtools','remotes','rmarkdown','knitr','shiny','DT','plotly','pheatmap','ComplexHeatmap','EnhancedVolcano','RColorBrewer','ggpubr','gridExtra','gapminder','parallelly'), repos='https://cran.rstudio.com/')\""
su - $USER_NAME -c "R -e \"if (!requireNamespace('BiocManager', quietly = TRUE)) install.packages('BiocManager', repos='https://cran.rstudio.com/')\""
su - $USER_NAME -c "R -e \"BiocManager::install(version='3.17')\""
su - $USER_NAME -c "R -e \"BiocManager::install(c('BiocGenerics','S4Vectors','IRanges','GenomicRanges','SummarizedExperiment','Biobase','Rsamtools','Biostrings','AnnotationDbi','DESeq2','edgeR','limma','tximport','GenomicFeatures','org.Hs.eg.db','org.Mm.eg.db','ChIPseeker','DiffBind','Seurat','SingleCellExperiment','scater','scran','clusterProfiler','GSEABase','ReactomePA','biomaRt','Gviz','Rsubread','VariantAnnotation','BSgenome.Hsapiens.UCSC.hg38'), ask=FALSE)\""
mark_step_completed "install_r_packages"
else
echo "[Step 9] R 包已安装,跳过。"
fi
#############################################
# 10. (可选) 安装数据库(PostgreSQL)
#############################################
if ! is_step_completed "install_postgresql"; then
echo "[Step 10] 安装 PostgreSQL..."
apt-get install -y postgresql-15 postgresql-contrib
systemctl enable postgresql
systemctl start postgresql
mark_step_completed "install_postgresql"
else
echo "[Step 10] PostgreSQL 已安装,跳过。"
fi
#############################################
# 11. GPU 服务器环境配置(针对 GPU 服务器)
#############################################
if [ "$(hostname)" == "gpu1" ]; then
if ! is_step_completed "gpu_setup"; then
echo "[Step 11] 配置 GPU 环境..."
# 检查 NVIDIA 驱动
nvidia-smi || { echo "请先安装 NVIDIA 驱动!"; exit 1; }
# 安装 Miniconda(如果尚未安装,参考步骤 4)
if [ ! -d "/home/$USER_NAME/miniconda" ]; then
su - $USER_NAME -c "wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh -O /tmp/Miniconda3.sh"
su - $USER_NAME -c "bash /tmp/Miniconda3.sh -b -p \$HOME/miniconda"
su - $USER_NAME -c "echo 'export PATH=\"\$HOME/miniconda/bin:\$PATH\"' >> \$HOME/.bashrc"
fi
su - $USER_NAME -c "source \$HOME/miniconda/bin/activate"
# 创建 gpu_env 环境
conda create -n gpu_env python=3.10 -y
conda activate gpu_env
# 安装 PyTorch GPU 版
conda install pytorch=2.0.1 torchvision=0.15.2 torchaudio=2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia
# 测试 GPU 可用性
python -c "import torch; print(torch.cuda.is_available())" || { echo "GPU 测试失败!"; exit 1; }
mark_step_completed "gpu_setup"
else
echo "[Step 11] GPU 环境已配置,跳过。"
fi
fi
#############################################
# 12. 安装 Docker 和部署 CVAT GPU(针对 GPU 服务器)
#############################################
if [ "$(hostname)" == "gpu1" ]; then
if ! is_step_completed "install_docker_cvat"; then
echo "[Step 12] 安装 Docker 及 nvidia-container-toolkit..."
apt-get install -y docker.io
distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-toolkit/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-container-toolkit/$distribution/nvidia-container-toolkit.list | tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update
apt-get install -y nvidia-container-toolkit
systemctl restart docker
echo "[Step 12] 部署 CVAT GPU..."
mkdir -p /opt/cvat && cd /opt/cvat
wget https://raw.githubusercontent.com/opencv/cvat/v2.5.0/docker-compose.yml
# 修改 docker-compose.yml 以启用 GPU (示例: 请根据实际需要编辑)
sed -i '/cvat:/,/ports:/ s/^ *#//' docker-compose.yml
# 确保 docker-compose.yml 中包含以下块(如未有,请手动添加):
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
# environment:
# NVIDIA_VISIBLE_DEVICES: all
# ports:
# - "8080:8080"
docker compose up -d
mark_step_completed "install_docker_cvat"
else
echo "[Step 12] Docker 和 CVAT GPU 已部署,跳过。"
fi
fi
echo "========== 环境配置完成! =========="
echo "请检查各项服务是否正常运行,并根据实际情况调整配置。"
关键修改:
- 可配置的参数:
USER_NAME:用户名(默认为 “alice”)。USER_GROUP:用户组(默认为 “sudo”)。USER_PASSWORD:初始密码(默认为 “password”),建议根据实际情况修改。
- 灵活性提升:
- 用户名、用户密码、用户组都可以根据实际需求调整。
- 脚本在每个步骤后检查是否已完成,若未完成则继续执行,否则跳过该步骤,避免重复执行。
使用方法:
- 保存脚本文件,修改相应的配置参数。
- 赋予脚本执行权限:
1
chmod +x setup_lab_environment.sh - 以 root 用户执行脚本:
1
sudo ./setup_lab_environment.sh
此脚本将根据设定的配置为每个新用户配置环境,支持从任何步骤恢复,并且会确保没有重复执行。
8. 总结
通过以上详尽的逐步安装与配置,我们可在医院高安全环境下搭建 2×CPU + 1×GPU + 1×ZFS (加可选DMZ) 的生物信息 & AI 研究服务器集群。核心要点:
- 操作系统:统一 Ubuntu 22.04 LTS;
- ZFS:集中存储
/data,快照备份; - Miniconda + RStudio:管理生信 Python & R 包;
- GPU:CUDA 驱动 + PyTorch,Docker Compose 部署 CVAT GPU;
- DMZ:若需对外访问 RStudio/CVAT, 采用反向代理(443→内网),或在堡垒机端口映射(医院DMZ);
- 维护:仅打安全补丁,谨慎升级驱动/CUDA/PyTorch;ZFS快照 + cgroups 资源限制,维持长期稳定。
至此,本手册提供了从系统安装、ZFS存储、Python/R 环境到 GPU 配置及 DMZ 反向代理的“一条龙”细节。只要依照本文执行,配合合适的网络策略与 IT 安全审批,我们即可建成一个高效、可扩展且合规的科研平台。祝部署顺利!如有疑问或遇兼容问题,请根据实际需求微调版本或配置。