总述

今天是8月10日,实训的第16天。
上午孟老师演示了如何将Django项目部署在云服务器上。
由于我没有云服务器,因此用装有Centos7的虚拟机来代替。
将项目部署在虚拟机上的过程也不算容易,途中遇到了不少坎坷。例如我的centos在刚开始时连不上网络,rc命令无法上传等等。
靠着不断百度到的CSDN的资料还是艰难地克服了难题,完成了部署。
今天还有部分关于Nginx的还未讲授完,为保证该笔记的一体性,我也加上去了。

SSH设置

启动ssh服务

在打开centos虚拟机后,先用yum install openssh* -y安装开启SSH必备的程序。
而后用vi /etc/ssh/sshd config命令打开sshd的配置文件。
修改内容为:

  • ListenAddress 0.0.0.0ListenAddress ::的井号去掉。
  • PermitRootLogin前的井号去掉。

完成这些操作后,用systemctl restart sshd指令重启sshd服务。

查询IP地址

接下来使用ifconfig来查询虚拟机的IP地址。
由于我的centos7没有内置ifconfig命令,因此需要进行额外的安装。
通过yum search ifconfig命令发现,ifconfig命令在net-tools.x86_64这个包里。
因此使用yum install net-tools.x86_64命令来进行安装。

建立SSH连接

在配置完SSH服务和获取IP地址后,在本机上的XShell或者其他能SSH连接的shell中输入ssh ip address进行连接。
通过命令sudo apt install lrzsz unzip -y解压缩上传工具,但由于我安装成功后也无法使用rc命令,因此只能采用scp命令。
形如scp a.txt root@ip:/home的命令,来完成文件的上传。

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 创建软连接

安装python3

centos自带了一个python2,但是没有python3。因此需要安装一个python3。依照以下步骤即可完成python3的安装。

  1. 拉取远程包yum install wget -y
  2. 安装编译时需要的程序yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel gcc make -y
  3. 在home创建一个目录mkdir python37
  4. 切换到目标文件夹 cd python37/
  5. 获取python的源文件 wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
    • 直接从官网获取速度会比较慢,因此也可以使用阿里云的源https://npm.taobao.org/mirrors/python/3.7.2/Python-3.7.2.tar.xz
  6. 使用tar命令进行解压 tar -xvJf Python-3.7.2.tar.xz
  7. 进入解压后的目录,指定编译路径 ./configure prefix=/usr/local/python3
  8. 进行文件的编译make && make install
    • 如果报错ModuleNotFoundError: No module named ‘_ctypes’,则yum install libffi-devel –y
  9. 删除旧的python2 rm -rf /usr/bin/python
  10. 创建软连接 ln -s /usr/local/python3/bin/python3 /usr/bin/python
  11. 修改yum vim /usr/bin/yum
  12. vim /usr/libexec/urlgrabber-ext-down
  13. 永久换pip源 mkdir ~/.pip
  14. vim ~/.pip/pip.conf
  15. 在前一步文件都迁移过来后,安装工程项目所需的包。
+ `python -m pip install -r r.txt -i https://pypi.tuna.tsinghua.edu.cn/simple`
+ 其中`r.txt`的内容是,工程项目所需要的包的名字。一行一个。

uwsgi部署

uwsgi --ini uwsgi.ini 前台以http方式启动uwsgi
uwsgi -d --ini uwsgi.ini 以后台运行uwsgi
pkill -f uwsgi -9 杀死uwsgi服务

1
2
3
4
5
6
7
8
9
10
11
12
[uwsgi]
chdir = /home/qd201909dj #设置项目根目录
module = qd201909dj.wsgi:application #设置项目启动器
master = true #设置主节点
processes = 1 #设置进程数
http = 0.0.0.0:80 #以http形式访问
chmod-socket = 644
vacuum = true #服务停止杀死pid
logto = /home/qd201909dj/test.log #输出日志
pidfile = /home/qd201909dj/uwsgi.pid #pid文件
static-map = /static = /home/qd201909dj/ 静态文件
py-autoreload = 1 #修改后自动重启项目(生产不可用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Nginx
server{
listen 80;
server_name 39.100.6.138;
charset utf-8;

client_max_body_size 75M;

location /static {
alias /home/qd201909dj;
}
location / {
uwsgi_pass 127.0.0.1:8888;
include /etc/nginx/uwsgi_params;
}
}

生成文件服务器

  1. yum install httpd-tools -y
  2. htpasswd -bc /home/htpasswd python(用户名) python2019(密码)
  3. 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server{
listen 9999;
server_name 39.100.6.138;
charset utf-8;
location / {
auth_basic "input your user name and password";
auth_basic_user_file /home/htpasswd;#密码文件
autoindex on; #自动展示索引文件
root /home/; #显示的目录
}
location ^*\.(*)$ {
add_header Content-Type text/plain;
root /home/; ##匹配下载的目录
}
}