项目部署上线指南
准备上线
-
上线前的检查工作。
python manage.py check --deploy
-
将DEBUG设置为False并配置ALLOWED_HOSTS。
DEBUG = False ALLOWED_HOSTS = ['*']
-
安全相关的配置。
# 保持HTTPS连接的时间 SECURE_HSTS_SECONDS = 3600 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True # 自动重定向到安全连接 SECURE_SSL_REDIRECT = True # 避免浏览器自作聪明推断内容类型 SECURE_CONTENT_TYPE_NOSNIFF = True # 避免跨站脚本攻击 SECURE_BROWSER_XSS_FILTER = True # COOKIE只能通过HTTPS进行传输 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True # 防止点击劫持攻击手段 - 修改HTTP协议响应头 # 当前网站是不允许使用<iframe>标签进行加载的 X_FRAME_OPTIONS = 'DENY'
-
敏感信息放到环境变量或文件中。
SECRET_KEY = os.environ['SECRET_KEY'] DB_USER = os.environ['DB_USER'] DB_PASS = os.environ['DB_PASS'] REDIS_AUTH = os.environ['REDIS_AUTH']
更新服务器Python环境到3.x
说明:如果需要清除之前的安装,就删除对应的文件和文件夹即可
-
安装底层依赖库。
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libdb4-devel libpcap-devel xz-devel libffi-devel libxml2
-
下载Python源代码。
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
-
验证下载文件。
md5sum Python-3.7.6.tar.xz
-
解压缩和解归档。
xz -d Python-3.7.6.tar.xz tar -xvf Python-3.7.6.tar
-
执行安装前的配置(生成Makefile文件)。
cd Python-3.7.6 ./configure --prefix=/usr/local/python37 --enable-optimizations
-
构建和安装。
make && make install
-
配置PATH环境变量(用户或系统环境变量)并激活。
vim ~/.bash_profile vim /etc/profile
... 此处省略上面的代码... export PATH=$PATH:/usr/local/python37/bin ... 此处省略下面的代码...
source ~/.bash_profile source /etc/profile
-
注册软链接(符号链接)- 这一步不是必须的,但通常会比较有用。
ln -s /usr/local/python37/bin/python3 /usr/bin/python3
-
测试Python环境是否更新成功(安装Python 3一定不能破坏原来的Python 2)。
python3 --version python --version
项目目录结构
假设项目文件夹为project
,下面的五个子目录分别是:code
、conf
、logs
、stat
和venv
分别用来保存项目的代码、配置文件、日志文件、静态资源和虚拟环境。其中,conf
目录下的子目录cert
中保存了配置HTTPS需要使用的证书和密钥;code
目录下的项目代码可以通过版本控制工具从代码仓库中检出;虚拟环境可以通过工具(如:venv、virtualenv、pyenv等)进行创建。
project
├── code
│ └── fangtx
│ ├── api
│ ├── common
│ ├── fangtx
│ ├── forum
│ ├── rent
│ ├── user
│ ├── manage.py
│ ├── README.md
│ ├── static
│ └── templates
├── conf
│ ├── cert
│ │ ├── 214915882850706.key
│ │ └── 214915882850706.pem
│ ├── nginx.conf
│ └── uwsgi.ini
├── logs
│ ├── access.log
│ ├── error.log
│ └── uwsgi.log
├── stat
│ └── css
│ └── images
│ └── js
└── venv
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── celery
│ ├── celerybeat
│ ├── celeryd
│ ├── celeryd-multi
│ ├── coverage
│ ├── coverage3
│ ├── coverage-3.7
│ ├── django-admin
│ ├── django-admin.py
│ ├── easy_install
│ ├── easy_install-3.7
│ ├── pip
│ ├── pip3
│ ├── pip3.7
│ ├── __pycache__
│ ├── pyrsa-decrypt
│ ├── pyrsa-decrypt-bigfile
│ ├── pyrsa-encrypt
│ ├── pyrsa-encrypt-bigfile
│ ├── pyrsa-keygen
│ ├── pyrsa-priv2pub
│ ├── pyrsa-sign
│ ├── pyrsa-verify
│ ├── python -> python3
│ ├── python3 -> /usr/bin/python3
│ └── uwsgi
├── include
├── lib
│ └── python3.7
├── lib64 -> lib
├── pip-selfcheck.json
└── pyvenv.cfg
下面以阿里云为例,简单说明如何为项目注册域名、解析域名以及购买权威机构颁发的证书。