最近将django项目部署到了云服务器,网上好多部署的都是弄到了服务器本地访问,并没有实现云服务器上线部署,如果您需要部署到云服务器上线,那么这篇文章或许能帮您解决这个问题。
刚接触服务器的部署会觉得很麻烦,什么uwsgi,什么nginx的,看着就头大,但是等部署完之后会发现真的很简单,思路就是把本地项目弄到服务器上,然后在服务器上装好所需环境直到项目能够正常运行后,就可以通过uwsgi+nginx部署上线了,最后客户输入提供的ip就可以访问(因为是http协议,所以有ip就可以,而这个ip在开服务器的时候就会提供)
云服务器的部署
新开服务器的初始环境部署
新开的服务器是很干净的啥也没有,所有要简单部署一下新开服务器的环境,这部分根据需要选择是否部署,参考文章:
新增服务器初始环境部署
项目导入服务器
我这里是mac笔记本,所以用scp就可以实现本地文件和服务器之间的文件互传,其他电脑系统请咨询查询本地和服务器的文件互传方法。
sudo scp -r 项目的绝对路径 服务器用户名@服务器ip:/要上传到服务器哪个路径位置
如果服务器改了端口号,不是默认的22,那么就需要用下面指定端口号传文件
sudo scp -P 端口号 -r 项目的绝对路径 服务器用户名@服务器ip:/要上传到服务器哪个路径位置
项目运行环境调试
这部分就是在服务器里面本地跑起来导入的项目,具体配置就看您自己了,我说几个注意事项:
1)现在的Ubuntu是自带python2和python3.5的,如果您的项目是python3的,且能用python3.5部署最好,只需要配一个pip3(默认的一般不会给装上pip3,如果有的话,可以跳过下面pip3 的安装),项目所需依赖就会迎刃而解(小技巧,可以在服务器外面即本机把项目所需模块生成requiremet.txt文件,服务器内部直接pip3装这个requiremet.txt就可以)
#查看pip3
pip3 -V
#如果没有,就手动安装pip3
sudo apt-get install python3-pip
装好的pip3如果能用的话,就可以接着部署自己所需的环境了,注意pip3如果能用就不要升级,忽略它的提示,正常安装即可,如果timeout超时,就临时换源安装:
pip3 install pythonModuleName -i https://mirrors.aliyun.com/pypi/simple
2)如果您实在不想用自带的python3.5,那么我劝您习惯用这个自带的3.5不要尝试卸载他,装一个其他python3版本,因为您在卸载的时候会同时卸载掉和自带python3.5所关联的所有依赖,而这些依赖是系统所需的,卸载了之后您就离重装系统不远了。
当然如果还是没忍住卸载了也有补救措施:
1⃣️删除/usr/lib/python3/这个位置的dist-packages文件夹
2⃣️下载原python3.5的dist-packages文件夹:
地址:https://pan.baidu.com/s/1g9gbOEG1MSr-4T3xWW6wSw
提取码:5ygu
3⃣️将下载好的文件解压成文件夹直接上传到服务器的/usr/lib/python3/目录下
3)一般在ubuntu中的python3.5也有自己的想法,如果您通过pip3下载了相应的pythonModuleName后,执行"python3 manage.py runserver"报错找不到下载的pythonModuleName,那么可以尝试一下"python3.5 manage.py runserver",我就是这么解决的。
下载并配置uwsgi和nginx准备上线
1)下载uwsgi和nginx
sudo pip3 install uwsgi
sudo apt install nginx -y
2)进入到项目目录下修改settings.py文件
cd 项目目录
sudo vi settings.py
配置文件需要修改的部分:
#如果没有ALLOWED_HOSTS,在最底部加上即可
ALLOWED_HOSTS = ['公网ip']
#在最底追加下面的,用于一会配置uwsgi的静态文件,即static
STATIC_ROOT=os.path.join(BASE_DIR,"static/")
#找到DBUGE=True,改为下面的,True和False的首字母是否大写我忘了,以实际文件为准
#这个的的修改是为了上线后更流畅,值为True表示的是开发模式
DBUGE=False
3)配置uwsgi_params,这个东西的目的是uwsgi和nginx建立连接,在项目根目录下执行
cp /etc/nginx/uwsgi_params . #在项目目录下执行,注意后面这个点儿别落下
4)项目根目录下执行下面命令,配置uwsgi.ini
sudo vim uwsgi.ini
[uwsgi]
#与外界连接的端口号, Nginx通过这个端口转发给uWSGI
#注意这里一定要这么写,不要想着改成自己的端口,按照我的配基本上就没问题了
#公网访问端口也不是在这里配,这样写只是为了和nginx建立连接
socket = 127.0.0.1:8010
#是否使用主线程
master = true
# 项目在服务器中的目录(绝对路径)
chdir = /home/kl/Desktop/manager_for_kailuan
master=true
# Django's wsgi 文件目录,相对于上面的chdir路径
wsgi-file = manager_for_kailuan/wsgi.py
# 最大进程数
processes = 4
#每个进程的线程数
threads = 2
# 退出时自动清理环境配置
vacuum = true
#目录下文件改动时自动重启
touch-reload = /manager_for_kailuan
#后台运行并把日志存到.log文件,这个路径自己定,能找到就行,主要是存日志,j记得在你加的这个路径创建一个uWSGI.log
daemonize = /home/kl/Desktop/manager_for_kailuan/manager_for_kailuan/uWSGI.log
5)创建一个nginx.conf文件,这样就不用改默认的了,避免发生错误,文件的位置放在/usr/share/nginx/,否则找不到
sudo vi /usr/share/nginx/nginx.conf
配置内容,注意仔细看注释的字,改动的地方还是挺多的
user root;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#这个是引入他的一些默认配置,可以注释掉
#include /etc/nginx/conf.d/*.conf;
server {
#这是nginx服务器监听端口,一定要是80,不能是其他的,因为80是允许http协议的,我们的目的也是借助http协议访问ip
listen 80;
#你的云服务器的公网ip地址,为了安全我这里不展示,改成自己拿到的公网ip
server_name 27.128.xx.xx;
charset utf-8;
#你的项目存放的位置,不包括项目名
root /home/kl/Desktop/manager_for_kailuan;
#指定首页,Django中可以设置,这里注释掉
#index hello.html;
location / {
#你的uwsgi_params位置
include /home/kl/Desktop/manager_for_kailuan/uwsgi_params;
#同你前面配置的uwsgi的socket,这样就建立连接了
uwsgi_pass 127.0.0.1:8010;
}
#静态资源位置
location /static{
#访问/static就相当于访问下面的路径
alias /home/kl/Desktop/manager_for_kailuan/static;
}
}
}
6)文件配好后,要加载一下配置文件内部的静态文件路径
1⃣️打开项目的settings.py文件
找到下面这一段,注释掉,如果不注释掉这一段,接下来的命令执行会报错
STATICFILES_DIRS = (
os.path.join(os.path.join(BASE_DIR, 'static')),
)
2⃣️到项目的根目录下执行manage.py进行迁移静态文件目录
python3.5 manage.py collectstatic
3⃣️成功后记得把刚才注释掉的东西在注释回来!!!!
7)启动/测试配置的uwsgi和nginx服务和配置文件是否成功
1⃣️启动和测试uwsgi,当然还是要先进入到uwsgi.ini的文件目录,或者在下面文件前加入文件的绝对路径
uwsgi --ini uwsgi.ini
如果输出如下结果表示开启成功
[uWSGI] getting INI configuration from uwsgi.ini
2⃣️启动和测试nginx,这里要加上咱们自己配置的nginx.conf指向
测试部分如下:
#测试
sudo nginx -t -c /usr/share/nginx/nginx.conf
出现下面情况表示启动成功:
nginx: the configuration file /usr/share/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/share/nginx/nginx.conf test is successful
启动部分如下:
#开启之前我们先关闭系统自启的nginx
sudo nginx -s quit
#查看是否已经关闭
ps -ef|grep nginx
#开启
sudo nginx -c /usr/share/nginx/nginx.conf
8)如果开着防火墙需要开放配置的这个80端口:
#查看防火墙状态,如果有开放的端口会显示出来,allow表示允许,deny表示拒绝
sudo ufw status
#开放端口
sudo ufw allow 80
9)在浏览器下输入公网ip就可以进行项目访问了,至此上线就部署成功了
10)注意事项
1⃣️当上线后如果对项目进行改动,效果是不会实时展示出来的,需要关闭uwsgi,在启动执行一下uwsgi.ini就可以了(启动方式在第七步里面)
关闭uwsgi有两种方式,一个是根据pid关闭进程在打开,一个是直接kill端口,我喜欢用第二种进行刷新:
#查看一下uwsgi已经启动的进程(如果显示的是root用户启动的,那么你要进入root用户在执行下面的操作)
ps -ef|grep uwsgi
#杀掉所有的uwsgi
killall -9 uwsgi
uwsgi --ini uwsgi.ini
内网服务器上线项目的部署
大体上和外网的部署方式一致,但是需要注意的是,好多东西依赖啥的需要手动离线安装,会遇到很多很多的问题,最好的解决办法就是联系提供内网服务器的客户,帮助开通一下这个内网服务器临时访外网,应该是在他路由管理那里可以设置。
如果不方便配置的话,建议在自己电脑的linux系统上先下载离线包,虚拟机就可以,系统要和服务器系统相匹配,下载包的命令如下,以ubuntu为例:
pip或pip3下载python相关依赖命令:
用pip download 模块名 -d 目录来下载所需安装的模块whl包到指定目录,如下:
#下载单一包命令
pip download 模块名
#下载包到指定目录
pip download -d 目录名 模块名
#集中下载
#先将项目包打包到一个requirement.txt文件中,一般在项目的根目录下执行就可以
pip freeze > requirements.txt
#然后找到这个目录可集中下载
pip download -d 目录名 -r requirement.txt
毕设没思路看这里:https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501
如果对您有帮助,赏口饭吃❤谢谢老板❤