# 安装编译相关工具
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install libffi-devel -y
# 创建安装目录
$ sudo mkdir /usr/local/python3
# 从官网下载 Python 源文件 注意:wget获取https的时候要加上:--no-check-certificate
$ wget --no-check-certificate https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
# 解压缩包
$ tar -xzvf Python-3.8.2.tgz
# 进入解压目录
$ cd Python-3.8.2
$ sudo ./configure --prefix=/usr/local/python3 # 指定创建的目录
$ sudo make # 编译
$ sudo make install # 安装
创建python3的软连接
$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
这样就可以通过 python
命令使用 Python 2,python3
来使用 Python 3。
将 /usr/bin
中的 python
备份
# 查看当前python软连接
$ ll /usr/bin/ | grep python
$ sudo mv /usr/bin/python /usr/bin/python.bak
然后创建 python3 的软链接
$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 查看python版本
$ python -V
创建pip3软连接
# 备份pip软连接
$ mv /usr/bin/pip /usr/bin/pip.bak
# 创建pip3软连接
$ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
# 查看pip版本
$ pip -V
这样默认的 Python 版本就替换为 Python 3 了。
因为 yum 使用 Python 2,因此替换为 Python 3 后可能无法正常工作,因此修改 yum 配置文件(不管安装 python3的那个版本,都必须要做的)
$ vi /usr/bin/yum
把 #! /usr/bin/python 修改为 #! /usr/bin/python2
$ vi /usr/libexec/urlgrabber-ext-down
把 #! /usr/bin/python 修改为 #! /usr/bin/python2
$ vi /usr/bin/yum-config-manager
#!/usr/bin/python 修改为 #!/usr/bin/python2
如果没有yum-config-manager这个文件,是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,要通过命令yum -y install yum-utils 安装。
虚拟环境是一个独立的python,防止与其他项目冲突
$ yum update
# pip 安装
$ pip install virtualenv
# 建立软连接
$ ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
地址:https://nginx.org/en/download.html
# 官网下载安装包建议下载稳定版
$ wget https://nginx.org/download/nginx-1.20.2.tar.gz
# 解压
$ tar -zxvf nginx-1.20.2.tar.gz
$ cd nginx-1.20.2
# 配置
$ ./configure
# 编译安装
$ make && make install
# 查找安装路径
$ whereis ngin
# 建立软连接
$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 启动停止nginx
$ nginx # 默认以nginx.conf配置文件启动
$ nginx -c 配置文件 # 指定配置文件启动
# 停止
$ nginx -s stop # 此方式停止步骤是待nginx进程处理任务完毕进行停止。
$ nginx -s quit # 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
# 重启
$ nginx -s reload # 当 nginx的配置文件 nginx.conf 修改后,先nginx -t检查配置文件是否有问题,要想让配置生效需要重启nginx,使用nginx -s reload不用先停止 nginx再启动nginx即可将配置信息在nginx 中生效
# 查看配置文件是否有问题
$ nginx -t
配置完成之后在本地电脑的浏览器输入你的服务器IP地址或域名显示欢迎界面就成功啦
# pip安装
$ pip install uwsgi
# 建立软连接
$ ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# 用命令查看软连接是否成功
$ ll /usr/bin/nginx
在任意路径下创建一个test.py文件,写入以下内容:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World" # 这是python2的写法
Return [b“hello world”] # 这是python3的写法,返回的是字节
根据自己的python版本来选择
然后在test.py目录下,执行以下命令
$ uwsgi --http :8002 --wsgi-file test.py
执行完命令之后你可以在本地电脑上输入你的服务器ip或域名加8002来查看例如123.45.67.89:8002
如果页面显示helloworld说明成功
测试之前要把服务器的安全组端口打开,不然会测试不成功
端口号不要选择有特殊作用的 比如80 22 3306
之前的nginx,uwsgi,virtualenv都可以在任意目录下使用命令安装,因为他们会安装到默认的目录下的,我们可以不用管。现在建立虚拟环境就要考虑目录了。我是在/home下建立的虚拟环境
$ cd /home
$ virtualenv env # 这是虚拟环境的名字 自己自定义
# 使用下面命令进入虚拟环境
$ source env/bin/activate
# 退出虚拟环境
$ deactivate
进入虚拟环境之后命令行最左边会显示(env), 之后的操作都是在虚拟环境下进行
# pip安装
$ pip install uwsgi
然后安装你的项目所依赖的库比如django3.2
这里说一个很方便的方法
在你本地电脑项目的终端中或者你的项目虚拟环境下执行
pip freeze > requirement.txt # 把环境里所有的输出到一个txt文件中,把此文件传到服务器上
# 然后在你服务器虚拟环境下执行
pip install -r requirement.txt # pip会自动安装文件里的所有包
比如我的项目是testproject,上传到/home目录,所以目录应该是/home/testproject
在你的服务器上运行你的项目,保证能正常运行
然后修改项目里的settings文件
DEBUG = False
ALLOWED_HOSTS = ['*'] # 允许所有ip可以访问
2.把你需要连接的数据库地址改成127.0.0.1,因为你本来就是在你的服务器上连接数据库嘛
3.静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / 'static',
]
# 在这里写以下代码
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
然后执行python manage.py collectstatic
之后就会在当前目录生成一个新的目录,目录下就是你的所有静态文件(包括css,js,image等,还有一个admin相关的静态文件)。可能你会想,我的项目命名已经有静态文件了,为什么不直接用那个目录下的文件,而要执行这些命令将那些静态文件复制后来呢?
因为nginx找不到你的这个路径啊l。所以才要执行上面的操作,将静态文件收集到一个目录,然后在nginx配置中添加一下这个路径,nginx就可以识别到了。但是为什么不能直接将自己的静态文件的路径添加到nginx的配置中使用呢?我觉得可能是规范问题。首先,你写的静态文件的目录可能很乱,从收集到的静态目录我们也可以看到,路径分明,css,js,image在不同路径下,并且还有后台管理的静态文件。
之后就是最重要的配置uwsgi和nginx了
前提是之前步骤的uwsgi和nginx测试没问题
在项目根目录下(建议)创建uwsgi配置文件
$ touch testproject_uwsgi.xml # 配置文件有多种写法,可以是.ini的,也有.xml等等,但是不同的后缀所写的代码是不一样的,我这里用的是.xml这种写法,名字自定义
# 使用vim编辑
$ vim testproject_uwsgi.xml
在文件里输入以下内容
127.0.0.1:8002
/home/testproject/
testproject.wsgi
4
uwsgi.log
/home/env/lib/python3.8/site-packages
:wq保存退出就可以了
先备份nginx.conf文件
$ cp /usr/local/nginx/conf/nginx.conf.bak
# 用vim编辑nginx.conf文件
$ vim /usr/local/nginx/conf/nginx.conf
在文件中输入以下内容
root配置
server {
listen 80;
server_name 127.0.0.1:80; #有域名改为自己的域名,没域名写127.0.0.1:80
charset utf-8;
location / {
include /usr/local/nginx/conf/uwsgi_params; # yum安装的话,好像这个uwsgi_params文件没有的,编译安装的nginx是有的,不过如果你是用yum安装的话,你的nginx也不是在这个路径下。
uwsgi_pass 127.0.0.1:8002; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT testproject.wsgi; # 项目名.wsgi
uwsgi_param UWSGI_CHDIR /home/testproject; # 项目路径
}
location /static/ { # 注意,这儿的static是执行了python manage.py collectstatic之后,自动产生的一个目录,该目录下收集了你项目中所有的静态文件。其实就是将你的静态文件复制了一遍过来)
root /home/meiduo_mall/static; #静态资源路径 注意:location中指定的/static/必须是在root指定的/home/testproject/目录中真实存在的。
}
}
alias配置
location /static/ {
alias /home/testproject/static/; # 注意,这儿的static是执行了python manage.py collectstatic之后,自动产生的一个目录,该目录下收集了你项目中所有的静态文件。其实就是将你的静态文件复制了一遍过来)
}
# 注意:alias指定的目录后面必须要加上"/",即/home/testproject/static/不能改成/home/testproject/static
两者配置后的访问效果是一样的。
:wq退出就可以了
测试nginx是否有问题
如果nginx建立软连接成功,就直接
$ nginx -t
# 如果上面执行没报错
$ nginx -s reload
然后回到项目目录下,也就是你的uwsgi配置文件所在的目录。如果你的这个配置文件在其他地方,那你就回到那个目录就可以了。使用命令如下命令启动uwsgi配置文件
$ uwsgi -x testproject_uwsgi.xml # # 保证testproject_uwsgi.xml在当前目录,不在的话,请先切换到它所在的目录。
然后就可以在本地电脑上输入你的服务器ip或者域名就可以访问你的django项目了
新人第一次发文,如有错误大佬轻喷