序
常用资源
清华镜像源:https://pypi.tuna.tsinghua.edu.cn/simple
NONMEM部署服务器ip:47.112.22.165
常用指令
查看磁盘占用情况:df ./
mkdir 创建文件夹(根目录)
tar -xvf 解压名为filename的压缩包到该目录下(到同名子文件夹中)
mv A B 将文件夹A重命名为B
rm -rf 将及file下的所有文件全部删除(如rm -rf Node/,不仅把名为Node的文件夹中的东西全部删除了,Node文件夹也被删除了)
vi 在命令行中打开filename,按i进行编辑(insert),按esc退出编辑状态,接着输入:q!(不保存文件,强制退出),:w(保存文件,但不退出vi命令),:wq(保存文件并退出vi命令)
系统使用
文件传输
从服务器上下载文件或者上传文件到远程服务器,有两种办法,一是用有图形界面的软件,如FileZilla、MobaXterm等;二是可以建立sftp连接(这种办法适用于类Unix系统,如Mac):在Mac中打开终端,左上角点击新建连接,新建SFTP连接,命令行输入sftp 用户名@ip
,输入密码,即可建立安全FTP连接进行文件传输,传输用put指令:put 地址1 地址2
,可以将地址1的文件传输到地址2上
开启端口方法
开启方法:既要在阿里云控制台安全组开启端口,最好同时也设置一下防火墙,开启相应端口
- 需要先安装firewalld:
apt install firewalld
- 查看当前端口开放情况:
sudo firewall-cmd --list-ports
或sudo firewall-cmd --list-all
- 开放端口(永久开放):
sudo firewall-cmd --permanent --add-port=8000/tcp \ sudo firewall-cmd --reload
当开启端口后,尽管后端程序正常运行,但访问端口(可以用curl测试)仍提示denied,则要看一看开放的IP和端口是否设置正确,本地IP localhost对应数字为0.0.0.0,不要和127.0.0.1之类的搞混了(!!!很重要,Agent项目部署NONMEM时在此处踩坑了,uvicorn默认运行在127.0.0.1上,但想当然以为是0.0.0.0,导致一直访问拒绝,排查了很久,正确办法是要设置unicorn的ip:uvicorn main:app --host 0.0.0.0 --port 8000 --reload
)排查办法是,看系统是否有在正常监听端口:sudo ss -tuln | grep 8000
,根据返回的信息确定IP和端口号
环境变量设置
临时更新
直接在命令行输入:
export PATH=$PATH:/your/new/path
export MY_VAR="HelloWorld"
此类变量在当前 shell 进程中有效,关闭终端就会失效,因此常用于临时测试或脚本运行
永久更新
需要编辑~/.bashrc
文件:nano ~/.bashrc
,用鼠标滚轮或向下按键划到最后一行,在文件末尾添加同上的命令:
export PATH=$PATH:/your/new/path
export MY_VAR="HelloWorld"
编辑完成后Ctrl+S保存,Ctrl+X退出,再执行source ~/.bashrc
即可更新环境变量
查看当前环境变量
- 查看某个变量的值:
echo $PATH
或者echo $MY_VAR
- 查看所有环境变量:
printenv
或者env
Docker
主要组成部分:容器和镜像,在容器里运行镜像
创建Docker
查看docker列表:docker container list
或者docker ps
创建docker镜像(需要提前写好dockerfile放在相应目录下):docker build -t <name> .
(别忘了后面的点)
注意事项:
- 如果更新了dockerfile,那就只能重新执行docker build来重建环境,docker里面没有sudo指令,要安装什么包和库,提前在dockerfile中写好相应指令安装,如果安装得慢,记得换源
- docker存放位置:
/var/lib/docker
- 有时候构建docker时安装包会抽风,可能是dns配置的问题,此时需要重启一下docker服务:
sudo systemctl restart docker
便能正常解决
运行Docker
运行docker:docker run -d -p 8000:8000 --name <容器名称> <镜像名称>
指令组成部分解析:-d表示detached模式,后台运行,-p 8000:8000表示即将主机的8000端口映射到容器的8000端口,格式为主机端口:容器端口;--name nmtest_fastapi表示给这个容器起名为nmtest_fastapi,便于后续管理,比如logs, stop
进入到docker:docker run -it <name> /bin/bash
或者docker exec -it <name> sh
(退出:exit)
停止docker运行:docker stop <name>
查看docker完整运行日志:docker logs <name>
文件复制
如果要修改文件,尽量使用docker cp指令将本地修改好的文件复制过去,否则会污染docker的历史
语法
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
SRC_PATH
: 源路径(可以是容器内的路径或宿主机的路径)。CONTAINER
: 容器的名称或 ID。DEST_PATH
: 目标路径(可以是容器内的路径或宿主机的路径)。
从容器复制文件到宿主机
docker cp my_container:/path/in/container /path/on/host
将容器 my_container 内的 /path/in/container 文件或目录复制到宿主机的 /path/on/host。
从宿主机复制文件到容器
docker cp /path/on/host my_container:/path/in/container
将宿主机上的 /path/on/host 文件或目录复制到容器 my_container 内的 /path/in/container。
从容器复制目录到宿主机
docker cp my_container:/path/in/container /path/on/host
将容器内的 /path/in/container 目录及其内容复制到宿主机的 /path/on/host。
从宿主机复制目录到容器
docker cp /path/on/host my_container:/path/in/container
将宿主机上的 /path/on/host 目录及其内容复制到容器 my_container 内的 /path/in/container。
环境配置
Python环境配置
从原生Linux开始配置Python环境
用了很多服务器,配过很多次环境了,但每次拿到个新的服务器还是会手生,不知道该从何下手配置环境,写下这部分内容记录一下安装过程,方便后续参考使用:
- 下载Anaconda安装包(优先推荐安装Miniconda,省时间,后面需要的包在安装时也能附加一起装上,所以一开始没必要安装那么多)https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 从这个链接里找需要的版本,不要直接下载,复制下载链接
- 打开终端,连接服务器,用
wget 上面复制的链接
下载安装包(.sh文件) - 使用
bash 上面下载的文件名
进行安装,一路默认配置输入yes即可 - 这个时候可能还没法直接使用,有两种可能,一是环境变量没有加进去,二是加进去了但还没有更新,一般是没有更新,此时需要更新一下环境配置:
source .bashrc
,一般.bashrc
文件放在根目录下 - 这时候命令行用户名前面会多一个
(base)
,表示Anaconda已经正常安装好和可以使用,可以用python --version
检查当前的python版本,加下来就可以愉快使用了 此时Conda使用的还是默认的下载Channel,有的包可能没有,而且下载速度奇慢,于是需要更换下载源,一般国内使用清华源或阿里源,复制下方指令执行:
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/r conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
但有时候conda也会遇到一些无法找到的包,还是需要用到pip来安装,所以也需要更新一下pip的源:
python -m pip install --upgrade pip pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
Anaconda环境管理
注意:可以用conda来管理环境,但最好不要conda和pip安装包混用,否则在后面部署导出requirements.txt时会比较麻烦
创建环境:conda create --name <envname> <python version>
启用环境:conda activate <envname>
,关闭环境:conda deactivate <envname>
列出当前所有的环境:conda info --envs
或conda env list
复制环境:conda create --name <envnameA> --clone <envnameB>
(复制环境B,创建A)
移除环境:conda remove --name <envname> all
导出项目的依赖库列表:如果是用纯pip安装的环境,可以用pip freeze > requirements.txt
导出相应的附属包信息,如果用conda安装了,就会包括很多虚拟路径。在混用的情况下,也可以使用pipreqs库来导出requirements.txt,这个库会自动分析代码,只生成实际依赖和使用了的包:pipreqs ./ --encoding=utf-8
UV
运行前可以通过env
来查看当前环境变量,看是否有添加这两个环境变量
使用uv配置项目级环境时,常会遇到timeout的情况(下载响应时间过长,报错),需要定义环境变量来实现换源和修改timeout阈值时间
- 换源:
export UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
- 修改timeout时间:
export UV_HTTP_TIMEOUT=100000
TO-DO: 找个一劳永逸的办法,永久添加环境变量进去
Jupyter notebook
远程访问Jupyter的密码设置
- 在控制端输入jupyter notebook password,回车,能够设置新密码,重复一遍确认
- 设置完新密码后,后台会生成jupyter_server_config.json文件(一般是在根目录下的.jupyter文件夹中),这个文件里包含了刚刚密码对应的hash值,打开这个文件,复制hashed_password中的值
- 打开jupyter_notebook_config.py,在没有更改任何设置的情况下里面全部是注释的内容,在最后一行加上
c.NotebookApp.password='hashed_password'
,将hashed_password替换成刚才复制的值 - 重新打开jupyter,访问时如要求输入密码,则输入刚才新设置的那个密码即可正常访问