初始化的阿里云ECS是没有Python开发环境的,为了使用Jupyter等工具,需要对ECS进行初始化配置。
若无特殊说明,下文中的所有命令都是在命令行中使用。
hostnamectl set-hostname {NAME} # 修改主机名称为{NAME}
安装Python3.8.5
# 安装依赖包
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel libffi-devel
# 安装Python3.8.5
## 获取安装包,也可手动下载。
wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz
## 解压缩
tar -zxvf Python-3.8.5.tgz
## 进入目录
cd Python-3.8.5
## 配置安装位置
./configure --prefix=/usr/local/python
## 编译并安装
make && make install
## 建立Python软连接
ln -s /usr/local/python/bin/python3.8 /usr/bin/python
## 建立Pip软连接
ln -s /usr/local/python/bin/pip3.8 /usr/bin/pip
## 添加到PATH
echo 'export PATH=/usr/local/python/bin:$PATH' >>~/.bashrc
source ~/.bashrc
## 安装成功后查看python和pip版本
python -V
pip -V
## 升级Pip版本
python -m pip install --upgrade pip
## 删除安装包
rm -f Python-3.8.5.tgz
rm -rf Python-3.8.5
## 删除Python
# rm -rf /usr/local/python
运行Jupyter Notebook
jupyter notebook --generate-config --allow-root
此时,一般会在/root/.jupyter
目录下创建名为jupyter_notebook_config.py
的配置文件。打开配置文件,在文件末尾添加以下几个条目:
c.NotebookApp.notebook_dir = '/opt' # 默认工作目录
c.NotebookApp.ip='*' # 允许所有IP地址访问
c.NotebookApp.password = 'sha1:xxxxxx:xxxxxxxxxxxxxxxxxx' # SHA1后的密码,具体见下文
c.NotebookApp.open_browser = False # 启动时打开浏览器
c.NotebookApp.port = 8888 # 端口号
SHA1密码生成,只需要把下面代码中的*********替换为明文密码,然后再命令行中运行,把可以得到的结果完整地复制到上文密码处。
当然,还可以不添加password那行,然后直接在命令行中使用$ jupyter notebook password
直接设置密码。
python -c "from notebook.auth import passwd; print(passwd(passphrase='*********', algorithm='sha1'))"
然后同jupyter notebook --allow-root
启动Notebook服务即可。需要停止时,按下Ctrl+C
即可停止。
此时,关闭xShell后,Jupyter Notebook也会停止,所以需要不挂断地运行进程,使用命令行nohup jupyter lab --allow-root > jupyter.log 2>&1 &
。
想要终止这类进程,只需要ps -a
查看jupyter进程号pid,然后kill -9 pid
杀死进程。
安装Jupyter Lab
Jupyter Lab是Jupyter Notebook的升级版,过程类似,只是把上文中的Notebook换为Lab即可。
jupyter lab --generate-config
此时,一般会在/root/.jupyter
目录下创建名为jupyter_lab_config.py
的配置文件。打开配置文件,在文件末尾添加以下几个条目:
c.ServerApp.notebook_dir = '/opt' # 默认工作目录
c.ServerApp.ip='*' # 允许所有IP地址访问
c.ServerApp.password = 'sha1:xxxxxx:xxxxxxxxxxxxxxxxxx' # SHA1后的密码,具体见下文
c.ServerApp.open_browser = False # 启动时打开浏览器
c.ServerApp.port = 8889 # 端口号
其余内容基本相似,只是把上文中的Notebook换为Lab即可。
开放端口
上述过程只是运行了jupyter服务,想要实现客户端的访问,还需要开放服务器的端口,如8888。
首先查看端口是否开放:
firewall-cmd --query-port=8888/tcp
提示yes表示已开通,提示no表示未开通。
firewall-cmd --add-port=8888/tcp --permanent # 开放8888号端口
firewall-cmd --add-port=8000-9999/tcp --permanent # 开放8000~9999号端口
提示success表示成功。
注意,此时必须重载以生效
firewall-cmd --reload
若要关闭端口
firewall-cmd --permanent --remove-port=8888/tcp
防火墙相关指令
systemctl status firewalld # 查看防火墙状态
systemctl start firewalld # 开启防火墙
systemctl stop firewalld # 关闭防火墙
安装nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
service nginx start
修改/etc/nginx/
下的nginx.conf
配置文件
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 47.116.135.220;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# 重新载入配置文件
nginx -s reload
# 重启nginx
nginx -s reopen
# 停止nginx
nginx -s stop
Pip的一些问题
由于众所周知的原因,国内使用pip的官方源速度比较慢,所以很多人使用阿里源,清华源等等,也能应付绝大部分包的安装,但是镜像源与官方源还是有一定的差别的,阿里云ECS默认使用阿里源,对有些包的安装不友好,例如有些包会出现这样的报错
distutils.errors.DistutilsError: Command '['/root/.virtualenvs/music/bin/python', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpmlr7fab1', '--quiet', '--index-url', 'http://mirrors.cloud.aliyuncs.com/pypi/simple/', 'pytest-runner']' returned non-zero exit status 1.
此时,需要使用官方源安装pytest-runner
这个包。
云服务器搭建跳板机
有云服务器A,一台运行Jupyter Lab的台式机B,一台笔记本C。当B和C处于同一局域网下,C可以通过 B的内网地址:port 来访问 B主机,但是当B和C不位于同一局域网时,需要使用云服务器A作为跳板机实现对B的访问。这里使用frp。
分别在A和B上安装frp
服务器端A
配置文件为frps.ini
[common]
# 下面端口在云端主机均要开通
bind_port = 7600
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
max_pool_count = 20
# 下面这个配置访问jupyter很重要。
vhost_http_port = 80
客户端B
[common]
server_addr = XX.XX.XX.XX #云端的公网ip
server_port = 7600
[ssh]
# ssh或者windows mstsc 远程访问服务器端
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7200
use_compression = true
use_encryption = true
[jyputer]
type = http
local_ip = 127.0.0.1
local_port = 8888 # jupyter port
use_encryption = true
use_compression = true
custom_domains = XX.XX.XX.XX #云端的公网ip
主要注意几点:A的bind_port 需要和 B 的server_port 相同。
./frps -c ./frps.ini % 运行服务端程序
./frpc -c ./frpc.ini % 运行客户端
运行之后,使用 云服务器IP:vhost_http_port端口号,即可远程访问jupyter lab。
需要注意的是,部分电脑c.NotebookApp.ip不可设置为'*',或者'0.0.0.0',可能导致报错。最好都设置为'127.0.0.1'。
VS code 远程连接 云服务器 (ssh-remote)
### 生成公私密钥对
$ ssh-keygen
会在~/.ssh
目录下生成公钥id_rsa.pub
和私钥id_rsa
。私钥留在本地主机,公钥上传到云主机~/.ssh
目录下,同时使用命令cat id_rsa.pub >> authorized_keys
生成authorized_keys
文件。
在vscode中添加IdentityFile
。
Linux 常用命令
pwd
ls
cd
free -h
du -sh *
df -h
kill -9 pid