django控制linux服务器,django项目部署到linux服务器上的注意事项

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Django项目部署

1. 常见的部署方式nginx+uwsgi:配置要求严格,效率高

nginx+gunicorn:部署极其方便,gunicorn可以同时起多个pythondjango进程,提高多进程服务,提高并发处理能力。gunicorn将django包装成一个服务启动,进行管理。(supervisor监控gunicorn,一旦gunicorn进程停止服务,马上重新启动进程)WSGI

处理动态请求(uwsgi, gunicorn)

Nginx

处理静态资源 ==> (/static/, /uploads/)

2.Django分布式架构Nginx :

提供服务,并处理静态请求

Server1..N:

处理动态请求

DB:

处理数据库相关

静态文件:

存储挂载/加Rewrite(用于放静态文件的位置)

3. 代码准备区分环境配置:弄好requirement.txt

pip freeze > requirement.txt

dev:开发环境,test:测试环境,prod:生产环境安装包

数据库

是否开启Debug区分环境env.ini1

2# 写文件env.ini

env.ini不放到版本库中系统环境变量1

2

3# 在Linux命令行执行

或者在setting.py文件声明一下

# export ENV="prod"根据环境写配置直接在settings.py中修改1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16import os

env = os.environ.get('ENV', None)

if env == 'prod':

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db_prod.sqlite3'),

}

}

else:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

}

}

​ 2. 写settings_prod.py 、settings_test.py1from .settings_prod import *收集静态文件:Admin后台 => 静态文件/static/ => 出错

settings.py配置STATIC_ROOT1STATIC_ROOT = os.path.join(BASE_DIR, "allstatic")收集变化:1python manage.py collectstatics

上传代码到git- 创建git项目:gitee.com

- 在仓库中进行版本的管理

- git clone -> 把代码copy到仓库 -> git add .-> git commit -> git push -> gitee.com

上传代码到git创建git项目:gitee.com

在仓库中进行版本的管理

git clone -> 把代码copy到仓库 -> git add .-> git commit -> git push -> gitee.com

4. 部署流程所有和python相关的命令使用普通用户

useradd webadmin新建普通用户

a. Server 环境部署代码克隆1

2

3

4

5

6yum install git -y

git clone (你的仓库地址)

# 更新

cd 仓库

git pull

安装系统依赖包及项目依赖包1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18yum install epel-release -y

yum install python36 -y

python36 -m ensurepip

# 创建虚拟环境

pip3 install pipenv

# 切换到项目目录(在有pipfile的目录下,执行)

pipenv install

# 会根据pipfile创建一个虚拟环境,并安装好所有的依赖

# 注意pipfile.lock的问题 => 可删除掉lock文件

# pipenv安装包时,lock的时间可能会比较长

# 如果使用了mysql需要安装mysql相关

yum install python-devel, mysql-python,等

# 如果pipenv install 失败,可直接进虚拟环境,用requirements.txt安装

pipenv shell

pip install -r requirements.txt另一种创建虚拟环境的方法

python36 -m venv venv(虚拟环境名字)安装Gunicorn1

2pipenv install gunicorn

#pip install gunicorn -i https://pypi.douban.com/simple/#临时配置国内源在虚拟环境中安装依赖1

2pip install -r requirements.txt -i https://pypi.douban.com/simple/

#安装依赖gunicorn运行1

2

3

4

5gunicorn projname.wsgi:application -b 127.0.0.1:8080

gunicorn projname.wsgi -w 4 -b 127.0.0.1:8080 -D --access-logfile=./log/gunicorn_access.log -u webadmin -g webadmin

# w => worker => 进程

# b => bind => 监听(确保nginx服务器能连接上就行)

# 权限 => 最小化原则, iptables 开启你需要的,默认规则Drop只能处理动态的请求(样式丢失的)编写脚本run.sh服务部署脚本:安装python,安装环境

停启服务脚本: service nginx stop => 写脚本1

2

3

4

5#!/bin/bash

source ~/mycode_env/bin/activate

export BLOG_ENV="prod"

cd ~/mycode

gunicorn projname.wsgi -w 4 -b 127.0.0.1:8080 -D --access-logfile=./log/gunicorn_access.log

b. Nginx配置Nginx的操作用Root用户

下载安装Nginx1yum install nginx -y

配置文件及日期文件配置文件:/etc/nginx/nginx.conf和/etc/nginx/conf.d/default.conf

日志文件:/var/log/nginx/error.log 和 /var/log/nginx/access.log

配置Nginx:/etc/nginx/nginx.conf1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31server {

listen 80;

server_name sc.com;

root /home/webadmin/question_repo;

location ~/static {

root /home/webadmin/question_repo;

expires 1d;

}

location ~/allstatic/media {

root /home/webadmin/question_repo;

expires 1d;

}

location / {

# 设置头信息(以便gunicorn能看到真实的访问服务的客户端地址)

proxy_set_header X-Forwarded-For $remote_addr;

proxy_set_header X-Forwarded-Host $server_name;

proxy_set_header X-Real-IP $remote_addr;

proxy_pass http://127.0.0.1:8080;

}

error_page 404 /404.html;

location = /40x.html {

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

}

}检查配置文件是否正确:1nginx -t

启动服务1service nginx start

检查服务是否启动1

2

3

4

5

6

7

8

9ps aux | grep nginx

lsof -i:80

netstat -tulnp

# 安装工具包

yum whatprovides *killall

/usr/bin/kill => 包名

yum install 包名

killall gunicorn

5. 常见问题安装速度慢

修改pip源环境依赖1

2

3

4

5

6Python:pip install -r requirement/comm.txt

Django==1.11.6

django-markdownx==2.0.21

markdown2==2.3.4

mysqlclient==1.3.12

Sys: yum install Mysql-devel, MySQL-python, python-devel

DB授权

监听地址

Settings

Py2编码问题

Admin样式问题

权限问题

1565961026742.png

解决办法:没有权限,chmod 777 webadmin注意登录页面的验证码会加载不出来,是由于Linux上没有字体的原因导致

解决办法:

下载字体文件,拷贝到allstatic/fonts/和 static/fonts目录下

6.解决问题的思路

解决问题的思路:gunicorn服务不能正常启动先用python manage.py runserver启动,看是否有错误,根据错误提示对应处理

nginx不能正常启动检查配置

出错了的话,检查日志/var/log/nginx/error

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值