🗣 Wd提问: VPS安装搭建云作业优化
🤖 Ai回答: 以下方案基于一台干净的 Linux VPS(推荐 Debian 12/Ubuntu 22.04,2 vCPU/2 GB RAM 起步),通过 Docker + Traefik 反向代理,在 30 分钟内完成“云作业优化”平台(以开源的 nbgrader + JupyterHub 为例)的部署。所有命令均以 root 身份执行。
1、系统初始化
apt update && apt install -y curl git
curl -fsSL https://get.docker.com | bash
systemctl enable now docker
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2、目录与配置
mkdir -p /srv/cloud-hw/{traefik,data/{jupyter,exchange}}
cd /srv/cloud-hw
3、创建 .env(按需改域名、密码)
cat .env <<EOF
DOMAIN=hw.65.hk
JUPYTER_ADMIN=admin
JUPYTER_PASS=admin123
POSTGRES_PASSWORD=pg123
EOF
4、Traefik 反向代理(自动 HTTPS)
cat traefik.yml <<EOF
api:
dashboard: true
entryPoints:
web:
address: :80
websecure:
address: :443
certificatesResolvers:
letsencrypt:
acme:
email: admin@65.hk
storage: /acme.json
httpChallenge:
entryPoint: web
providers:
docker:
exposedByDefault: false
EOF
5、Docker Compose 总览
cat docker-compose.yml <<EOF
version: 3.9
services:
traefik:
image: traefik:v3.0
restart: always
ports:
80:80
443:443
volumes:
/var/run/docker.sock:/var/run/docker.sock:ro
./traefik.yml:/etc/traefik/traefik.yml:ro
./acme.json:/acme.json
labels:
traefik.enable=true
traefik.http.routers.dashboard.rule=Host(\`traefik.\${DOMAIN}\`)
traefik.http.routers.dashboard.tls.certresolver=letsencrypt
traefik.http.services.dashboard.loadbalancer.server.port=8080
traefik.http.routers.dashboard.middlewares=auth
traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$10$$8K1p/kVGKpDH0WJ8XP5MWeKjINhQXr6TRN8rDv5X7GRosF1uIsEDC.
postgres:
image: postgres:15
restart: always
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
./data/postgres:/var/lib/postgresql/data
jupyterhub:
image: jupyterhub/jupyterhub:4
restart: always
depends_on: [postgres]
environment:
DOCKER_JUPYTER_IMAGE: jupyter/datascience-notebook:latest
DOCKER_NETWORK_NAME: cloud-hw_default
HUB_IP: jupyterhub
JUPYTER_ENABLE_LAB: 1
POSTGRES_HOST: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
/var/run/docker.sock:/var/run/docker.sock
./data/jupyter:/home
labels:
traefik.enable=true
traefik.http.routers.jupyter.rule=Host(\`\${DOMAIN}\`)
traefik.http.routers.jupyter.tls.certresolver=letsencrypt
traefik.http.services.jupyter.loadbalancer.server.port=8000
command:
bash -c pip install jupyterhub-nativeauthenticator dockerspawner &&
jupyterhub -f /srv/jupyterhub_config.py
configs:
source: jupyterhub_config
target: /srv/jupyterhub_config.py
nbgrader:
image: jupyter/nbgrader:latest
restart: always
volumes:
./data/exchange:/srv/nbgrader/exchange
command:
bash -c nbgrader db upgrade &&
nbgrader generate_config &&
nbgrader formgrade ip=0.0.0.0 port=5000
labels:
traefik.enable=true
traefik.http.routers.nbgrader.rule=Host(\`grade.\${DOMAIN}\`)
traefik.http.routers.nbgrader.tls.certresolver=letsencrypt
traefik.http.services.nbgrader.loadbalancer.server.port=5000
configs:
jupyterhub_config:
content: |
c = get_config()
c.JupyterHub.authenticator_class = 'nativeauthenticator.NativeAuthenticator'
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'
c.DockerSpawner.image = 'jupyter/datascience-notebook:latest'
c.DockerSpawner.network_name = 'cloud-hw_default'
c.DockerSpawner.volumes = { 'cloud-hw_data-jupyter': '/home/jovyan' }
c.Authenticator.admin_users = {'${JUPYTER_ADMIN}'}
c.JupyterHub.db_url = f'postgresql://postgres:{POSTGRES_PASSWORD}@postgres:5432/jupyterhub'
EOF
6、启动
touch acme.json && chmod 600 acme.json
docker-compose up -d
7、创建管理员账号
首次访问 https://hw.65.hk 注册 admin,登录后即为管理员。
8、优化要点
资源限制:在 jupyterhub 的 spawner 中设置 CPU/MEM 限制。
自动关机:安装 jupyterhub-idle-culler,避免空转。
作业分发:nbgrader 的 exchange 目录挂载到所有容器,实现作业自动收集/批改。
备份:定时 `tar czf /backup/$(date +%F).tgz /srv/cloud-hw/data`。
升级:改 docker-compose.yml 版本号后 `docker-compose pull && docker-compose up -d`。
至此,一个可横向扩展、HTTPS 加密、自动域名证书的“云作业优化”平台已部署完成。
📣 商家广告:





0
IP地址: 96.18.61.250
搜索次数: 11
提问时间: 2025-11-17 13:23:49
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。