0. 写在开头#
仅用于记录部署流程,用户名username
、项目名projectname
、文件夹名等信息均为示例,实际部署时请根据实际情况全局替换。
- 用户名:username
- 项目名:projectname
1. 装配好服务器硬件并安装系统及基础环境#
- 装配好服务器硬件,连接好电源、网线等外部设备
- 安装 Ubuntu20.04 系统
- 镜像:ubuntu-20.04.6-desktop-amd64.iso
- 更新和其他软件:正常安装、安装 Ubuntu 时下载更新、安装第三方软件
- 安装类型:清除整个磁盘并安装 Ubuntu、选择系统盘
- 姓名:
username
- 用户名:
username
- 选中自动登录
- 安装完成后,拷贝项目文件夹压缩包到服务器,解压到
/home/username/username
文件夹下,重命名为projectname
- 再打开
软件和更新
的附加驱动
,选中最新的驱动(应该是nvidia-driver-5xx
),等待下载,安装完成后重启
2. 安装并设置conda#
下载 miniforge 并安装(ps:不知具体文件,见附件)
cd /home/username/username/projectname chmod +x deploy/*.sh ./deploy/install_miniforge.sh
测试 conda 是否安装成功
- 重新打开终端有类似
echo 'export PATH="$HOME/miniforge3/bin:$PATH"' >> ~/.bashrc conda -V
conda xx.xx
就说明conda安装成功
- 重新打开终端
配置 conda 和 pip([见附件](ps:不知具体文件,见附件)
cp deploy/.condarc /home/username/ mkdir -p /home/username/.config/pip/ cp deploy/pip.conf /home/username/.config/pip/
3. 创建conda环境并安装项目依赖#
请根据当前设备是否联网选择对应的安装方式
- ps: 记得检查
scripts
内脚本是否为在 conda 指定环境运行:conda run -n projectname <正常命令>
,没有则添加 - ps: 记得检查
scripts
内脚本是否有export PATH="/home/minifoge3/bin:$PATH"
,没有则添加
3.1 联网#
创建 conda 环境(python 版本根据实际工程给定)
conda create -n projectname python=3.9 conda activate projectname
安装项目依赖
cd /home/username/username/projectname conda activate projectname pip install -r requirements.txt
检查包(有就说明无问题,无视出现
ERROR: Pipe to stdout was broken
):conda activate projectname (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
测试运行程序:
- 启动程序:
cd /home/username/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
- 等待程序完全启动后,在新终端中测试:
conda activate projectname cd /home/username/username/projectname python test/test.py
- 启动程序:
查看
logs
文件夹下最新的以日期命名的.log
文件:tail -f /home/username/username/projectname/logs/<修改为日期最新的那一个>.log
关闭程序:
cd /home/username/username/projectname ./scripts/projectnamedetimgstop.sh
3.2 不联网#
3.2.1 项目依赖打包#
激活 projectname 环境:
conda activate projectname ```shell
导出 conda 显式依赖列表:
mkdir -p /home/username/projectname/extra && conda list --explicit > /home/username/projectname/extra/conda_env.txt
导出 pip 包依赖列表:
pip freeze > /home/username/projectname/extra/pip_requirements.txt
下载 conda 包:
mkdir -p /home/username/projectname/extra/conda_pkg && wget -i /home/username/projectname/extra/conda_env.txt -P /home/username/projectname/extra/conda_pkg/
下载 pip 包:
mkdir -p /home/username/projectname/extra/pip_pkg && pip download -r /home/username/projectname/extra/pip_requirements.txt -d /home/username/projectname/extra/pip_pkg/
修改 conda 显式依赖文件
conda_env.txt
内包的路径为要安装的设备下的对应包位置的绝对路径
3.2.2 本地开发环境测试#
解压我发给你的压缩包,解压后文件夹应该是
/home/username/projectname
创建新的 conda 环境(输入y确认,一共2次):
conda create --name local_test --no-default-packages && conda activate local_test
在新环境中安装 conda 包:
conda install --name local_test --file /home/username/projectname/extra/conda_env_local.txt
安装 pip 包:
pip install --no-index --find-links /home/username/projectname/extra/pip_pkg/ -r /home/username/projectname/extra/pip_requirements.txt
检查包(有就说明无问题,无视出现
ERROR: Pipe to stdout was broken
):conda activate projectname (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
测试运行程序:
- 启动程序:
cd /home/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
- 等待程序完全启动后,在新终端中测试:
conda activate projectname cd /home/username/projectname python test/test.py
- 启动程序:
查看
logs
文件夹下最新的以日期命名的.log
文件:tail -f /home/username/projectname/logs/<修改为日期最新的那一个>.log
关闭程序:
cd /home/username/projectname ./scripts/projectnamedetimgstop.sh
3.2.3 服务器部署#
- 创建新的 conda 环境:
conda create --name projectname --no-default-packages --offline conda activate projectname
- 在新环境中安装 conda 包:
conda activate projectname conda install --name projectname --file /home/username/username/projectname/extra/conda_env_server.txt
- 安装 pip 包:
conda activate projectname pip install --no-index --find-links /home/username/username/projectname/extra/pip_pkg/ --no-deps -r /home/username/username/projectname/extra/pip_requirements.txt
- 检查包(有就说明无问题,无视出现
ERROR: Pipe to stdout was broken
):conda activate projectname (conda list | head -n 5 ) && echo "======" && (pip list | head -n 5 )
- 测试运行程序:
- 启动程序:
cd /home/username/username/projectname && chmod +x ./scripts/*.sh && ./scripts/projectnamedetimgstart.sh
- 等待程序完全启动后,在新终端中测试:
conda activate projectname cd /home/username/username/username/projectname python test/test.py
- 启动程序:
- 查看
logs
文件夹下最新的以日期命名的.log
文件:tail -f /home/username/username/projectname/logs/<修改为日期最新的那一个>.log
- 关闭程序:
cd /home/username/username/projectname ./scripts/projectnamedetimgstop.sh
4. 设置程序开机自启和守护#
- 安装 supervisor 并设置开机自启动
sudo apt install -y supervisor sudo systemctl enable supervisor sudo systemctl start supervisor sudo systemctl status supervisor
- 修改
/home/username/username/projectname/deploy/illegaloperatedetimg.conf
内的路径为实际路径 - 设置程序守护
cd /home/username/username/projectname sudo cp deploy/illegaloperatedetimg.conf /etc/supervisor/conf.d/ sudo supervisorctl reread sudo supervisorctl update
- 检查效果
- 手动打开
/home/username/username/projectname/logs
文件夹,查看是否有illegaloperatedetimg.log
和以时间命名的.log
文件,如果有则说明程序已经在后台运行。 - 重启,等待程序自启动,重复上一步操作
- 手动打开
66. BUG修复#
- 运行启动脚本正常,但是在测试时,出现
非法指令 (核心已转储)
- 解决方法:
requirements.txt
里面的 paddlepaddle 版本号修改为2.5.2
,然后运行pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 解决方法: