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样式问题
权限问题
解决办法:没有权限,chmod 777 webadmin注意登录页面的验证码会加载不出来,是由于Linux上没有字体的原因导致
解决办法:
下载字体文件,拷贝到allstatic/fonts/和 static/fonts目录下
6.解决问题的思路
解决问题的思路:gunicorn服务不能正常启动先用python manage.py runserver启动,看是否有错误,根据错误提示对应处理
nginx不能正常启动检查配置
出错了的话,检查日志/var/log/nginx/error