ubuntu下部署django项目(django+uwsgi+nginx)

django项目部署
uwsgi配置
nginx配置
iptables持久化配置

django部署

项目拉到服务器上,做好setting.py中数据库的相关配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 数据库引擎
        'NAME': 'db_name', #数据库名
        'USER': 'user_name', #数据库用户名
        'PASSWORD': 'user_pwd', #数据库密码
        'HOST': '127.0.0.1', 
        'PORT': 3306, 
     }
 }

生成数据库迁移

python3 manage.py makemigrations 

生成数据库表

python3 manage.py migrate

收集静态文件

python3 manage.py collectstatic

python manage.py collectstatic在执行时,django默认会去查看定义在STATICFILES_DIRS里的目录,以及在INSTALLED_APPS里定义了的app的static目录。如果这些目录下有文件,则把文件全部收集起来,拷贝到STATIC_ROOT目录下。
setting.py的静态目录一般需这样设置。

STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

还有setting文件里需要注意的小细节,设置allowed_host通过域名可访问

ALLOWED_HOSTS = ['127.0.0.1','www.XXX.com']

使用域名需要在域名购买网站做好解析,关联自己的域名和服务器公网IP,最好进行域名备案。

DEBUG = False

在setting.py里设置DEBUG=True时,django可以帮忙寻找静态文件,但如果是部署的情况,建议把这个选项关为False,否则在404的网页状态下可以查看网站所有url,相当于不被扫站就主动暴露。但是DEBUG=False时,django不能再处理静态文件,这时需要配置nginx帮忙查找静态文件。

测试django是否成功启动可以用下面代码。

python3 manage.py runserver 0.0.0.0:8000

这个时候通过网站8000端口也是可以访问的,但是有两个问题,第一,静态文件丢失,网站所有样式丢失,第二,如果客户端浏览器在服务端数据未加载完时主动关闭,就会抛出Connection reset by peer异常,是由于客户端已经关闭,服务端还在主动发送数据引起的。这个异常可以通过配置uwsgi,通过uwsgi启动来解决。

ps:有一个小坑是django的时区设置,默认是美国,可以在setting.py中设置下面代码改成中国时区。

TIME_ZONE = 'Asia/Shanghai'

uwsgi部署

最开始不明白为什么要配uwsgi,直观觉得有django,加上nginx帮忙找找静态文件就可以,后来发现在项目上最直接的反应就是加载状态中关闭客户端,服务端会抛异常,在代码里进行了捕捉但是没有产生效果。安装uwsgi

pip3 install uwsgi

安装成功后可以直接通过命令行启动程序测试

uwsgi --http :8000 --chdir /root/project_name -w project_name.wsgi

uwsgi可以通过ini脚本启动,ini脚本配置如下,可以直接建在项目目录下。vim /root/project_name/uwsgi.ini

[uwsgi]
socket = 127.0.0.1:8001 #这里和nginx的配置对应
chmod-sock = 666
chdir = /root/project_name/
module = project_name.wsgi
master = true
processes = 5
vacuum = true
buffer-size = 65536

通过以下命令启动

uwsgi --ini uwsgi.ini

nginx配置

nginx的配置文件可以在两个地方修改,一个是/etc/nginx/nginx.conf,在http{}部分增加下面代码,或者在/etc/nginx/site-available下对default进行编辑或新建自己的文件进行编辑都可以。需编辑的内容如下:

server {
       listen 80; #ngingx监听的端口,默认是80,也可以改成别的
       server_name www.XXX.com;
       location /static/ {
       root /opt; #静态文件目录,我放在/opt/static
        }       
        location /{
             uwsgi_pass 127.0.0.1:8001;#nginx与uwsgi交互socket的端口
             include uwsgi_params;
         }
     }

如果是在/etc/nginx/site-available下vim project_conf,需进行软链接

ln -s /etc/nginx/site-available/project_conf /etc/nginx/site-enabled

这是因为nginx的主配置nginx.conf中定义了配置文件的生效目录(include /etc/nginx/sites-enabled/*;)
重新加载nginx配置可用以下命令不中断重加载。

nginx -s reload

都配置好之后,可以访问 http://域名:nginx监听的端口 访问,如http://www.XXX.com(默认80)

iptables持久化配置

ubuntu iptables文件编辑

vim /etc/iptables.rules

文件内容如下,新开端口可以加一行,如:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable

重启iptables

 iptables-restore < /etc/iptables.rules
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值