在Linux(Ubuntu16)服务器上进行项目部署,在其他公有服务器(阿里云,青云,华为云…)部署的流程大同小异。
?? 项目的结构图如下:
部署
从uwsgi、nginx、静态文件三个方面处理
服务器环境配置(Ubuntu下操作)
一、安装pip
Ubuntu默认自带了Python2和python3,默认python代表使用python2,想使用python3则需要python3来进行交互命令行,Ubuntu没有自带pip需要使用如下命令进行安装:
sudo apt install python-pip #(安装python2 pip)
sudo apt install python3-pip #(安装python3 pip)
二、安装virtualenv与扩展模块virtualenvwrapper
pip install virtualenv
# 注意:不要使用apt来安装,不然会有意想不到的错误
pip install virtualenvwrapper
# 如果失败的话,就升级一下pip
python -m pip install -upgrade pip
使用ls -alh
查看文件,然后打开~/.bashrc文件,在结尾添加以下配置需要配置python执行程序以及virtualenvwrapper路径(注:此配置不用改)
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
使用source .bashrc
命令更新路径。
设置在文件中的配置信息会马上生效,而不需要经过重启。
现在所创建所有的虚拟环境,都默认位于/home/(用户)/.virtualenvs
目录下。
补充一下virtualenvwrapper的操作命令:
创建:mkvirtualenv [虚拟环境名称]
删除:rmvirtualenv [虚拟环境名称]
进入:workon [虚拟环境名称]
退出:deactivate
进行创建虚拟环境(上边已经配置过~/.bashrc)
mkvirtualenv dev1 (python3版本)
# 如果要创建python2版本的话
mkvirtualenv -p /usr/bin/python2 dev2 (python2版本)
# 创建完毕会自动进入到创建的虚拟环境,想要退出,用deactivate
#(这个终端暂时不用关闭,一会还要用到)
三、在Ubuntu中获取项目
我的项目在github远程仓库中,在此使用git clone
命令获取项目,如果你的项目在windows下,github中没有,那就可以安装vsftpd,然后通过他进行文件传输,这边只说git的使用了。
获取项目之前,要先使用命令生成项目环境的.txt模块文件
# DjangoProject(github上的仓库名) -> EAMS(项目根目录)
# 在项目根目录下使用:
pip freeze > list.txt
# 根目录下会生成这个.txt文件
# 这个文件可以随意命令,里边是项目所需要的模块
git的安装
sudo apt-get install git
在ubuntu下边创建一个文件夹demodjango(注:随意命名,只是为了方便管理),然后点进去,右键打开一个新的终端,使用git clone命令
sudo git clone https://github.com/git-lilei/DjangoProject.git
执行成功之后就会在这个新创建的文件夹中得到你的项目,此时的项目只有读的权限,要修改一下权限,执行下边命令
sudo chmod -R 777 DjangoProject
# 注:仓库下边所有的项目都会有读写权限
切换到虚拟环境的那个终端(没有关闭的那个),使用如下命令在虚拟环境中安装项目所需要的模块
进入虚拟环境
workon dev1
# dev1是我创建的虚拟环境名
sudo pip install -r /home/lilei/demodjango/DjangoProject/EAMS/list.txt
# 如果一遍没有成功,再来一遍
然后在ubuntu下使用开发工具打开项目,选择dev1的虚拟环境,这里我使用的是pycharm,没有工具就用命令更改
更改settings.py文件
DEBUG = False # 关闭DEBUG调试模式
ALLOW_HOSTS=['*',] # 表示可以访问服务器的ip ,*是所有
python manage.py runserver
启动服务器,运行正常,但是静态文件无法加载
四、配置uWSGI服务器
uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。
安装uWSGI(首先确保是在虚拟环境中,不是的话workon [虚拟环境])
pip install uwsgi #(注意:这个安装在虚拟环境中)
在项目文件夹下创建一个uwsgi.ini文件,内容如下:
注:配置的ip是内网,外网一样,修改一下就行
[uwsgi]
# nginx运行就用socket
# socket=0.0.0.0:7000 #(这个先注释了,配置nginx的时候把这个解开,把下边的注释了)
# 直接运行就用http,端口号随便写,但是别用一些常用的,不然会提示占用,比如6666,8888
http=0.0.0.0:7000
# chdir 指项目运行的目录
chdir=/home/lilei/demodjango/DjangoProject/EAMS
# 指定项目中的wsgi.py文件
wsgi-file=EAMS/wsgi.py
# 进程数量
processes=4
# 线程数量
threads=2
# 允许主线程存在
master=True
# pid进程的的文件(启动uwsgi时会生成)
pidfile=uwsgi.pid
# 日志文件(启动uwsgi时会生成)
daemonize=uswgi.log
uwsgi的操作命令:
启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
查看进程号:ps -ef|grep uwsgi
不要使用python manage.py runserver
来运行项目了,用uwsgi启动
uwsgi --ini uwsgi.ini
使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
五、安装nginx服务器和配置静态文件(最后一步啦~?)
nginx服务器可以隐藏真实服务器并且自动负载均衡
在开一个终端安装nginx,这个不是安装在虚拟环境中的,而是系统下,系统下安装的都在etc目录下
sudo apt install nginx
⛳使用nginx服务器需要修改uwsgi服务器配置 将socket放开 http注释
很重要的一步,不然nginx启动不成功
[uwsgi]
socket=0.0.0.0:7000
#http=0.0.0.0:7000 #(注释这个)
chdir=/home/lilei/demodjango/DjangoProject/EAMS
wsgi-file=EAMS/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
修改nginx服务器配置文件,这边使用vim打开,gedit,vi都可以
sudo vim /etc/nginx/nginx.conf
在http目录中下边代码?
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
上边添加如下配置信息:
server {
# 这个不能和uwsgi.ini文件中socket那个端口一样,访问的时候用9000端口
listen 0.0.0.0:9000;
# location后边的空格都不能少
location / {
include uwsgi_params;
# 这个是指定那个.ini文件中的那个端口必须一致
uwsgi_pass 0.0.0.0:7000;
}
# 配置静态文件,alias后边空格也不可以少
location /static{
alias /home/lilei/demodjango/DjangoProject/EAMS/staticroot/;
}
}
在项目根目录下创建staticroot文件夹
在settings.py中添加配置指定创建的静态文件夹:
STATIC_ROOT = '/home/lilei/demodjango/DjangoProject/EAMS/staticroot/'
在manage.py同级目录下,收集静态文件的指令,如下命令:
python manage.py collectstatic
nginx的操作命令:
启动:sudo nginx
停止:sudo nginx -s stop
重启:sudo nginx -s reload
查看进程号:ps -ef|grep nginx
最重要的一步:
⛳重启nginx和uwsgi
这个时候进入浏览器,访问9000端口,就OK了,项目就能跑起来了。?
? 照这个流程走,应该不会有什么问题的,虽然坑踩过了,当然也不排除例外,哈哈~? 欢迎各位大神指正。