手记

服务器无root权限网页部署实录

基本场景和问题描述

目前的应用场景是学校课题组希望对外开放一个即时计算、渲染科学数据的平台,因为需要较多计算资源选在校内服务器上部署一个Django前后端网页,但是管理非常严格,不能给出sudo权限,包括对docker的调用。为解决这个问题探索了了rootlessdocker部署方案。

Rootless Docker安装和配置

教程见官方文档中文文档,已经较为详细。因为完全没有sudo权限,我们选用不使用软件包,直接运行安装脚本的方法。需要注意的是,中文网站上直接照搬了原curl -fsSL https://get.docker.com/rootless | sh的命令,访问有问题,脚本内容中还涉及到从download.docker.com下载,同样无法访问,可以先考虑在本地下载下载下来,将download.docker.com替换为mirrors.tuna.tsinghua.edu.cn/docker-ce或其他源,再运行脚本。在我的服务器上,还提示缺少iptables相关的依赖:

# Missing system requirements. Please run following commands to
# install the requirements and run this installer again.
# Alternatively iptables checks can be disabled with SKIP_IPTABLES=1

也没有权限安装,于是根据提示运行:

SKIP_IPTABLES=1 sh rootless

这会把docker相关的一系列可执行文件安装到$HOME/bin下,如果$HOME/bin还不在$PATH中则将其加入。但是还缺少了常用的``docker-compose`,可从GitHub上下载:

mkdir -p ~/.docker/cli-plugins/
curl -SL https://githubfast.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose #使用镜像
chmod +x ~/.docker/cli-plugins/docker-compose

注意到与一般模式下的docker不同,暂未找到rootless模式下的docker访问宿主机网络的方式,不能执行直接从公共源下载类的操作。因此在内部进行项目的构建和部署时,依赖的软件包需要从宿主机复制,如对于Python依赖,可以使用类似的方法修改原来的配置:

# 命令行运行
pip download -d /app/dependencies -r requirements.txt
# dockerfile
WORKDIR /app
COPY requirements.txt /app/
COPY dependencies /app/dependencies/
RUN pip install --no-cache-dir --no-index --find-links=/app/dependencies -r requirements.txt

这样根据docker-compose.yml中定义的转发规则,就可以在宿主机上正常得到服务的端口。

本文由博客一文多发平台 OpenWrite 发布!

0人推荐
随时随地看视频
慕课网APP