- 上線前檢查項目還存在的問題:python manage.py check --deploy
配置文件(settings.py):
#所有關于debug的都注釋掉
DEBUG = False
# 允許所有主機訪問
ALLOWED_HOSTS = ['*']
#指定靜態文件在服務器位置
STATIC_ROOT = '/root/project/stat/'
# HTTP和HTTPS相關配置
# # 保持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'
- 上線(打開阿里云服務器)
- 創建項目文件夾(配置文件、代碼文件、日志文件、靜態資源文件)
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir project_school
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/conf
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/code
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/logs
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/stat
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# ls
code conf logs stat
- 克隆碼云項目(code文件夾)
[root@izuf6hgznqeh3d0hgxzyrqz code]# git clone https://gitee.com/weejoo/school.git
[root@izuf6hgznqeh3d0hgxzyrqz code]# ls
school
- 創建環境,添加依賴項
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# python3 -m venv venv
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# source venv/bin/activate
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# ls
code conf logs stat venv
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# pip install -r code/school/requirements.txt
創建python3 -m venv venv
啟動source venv/bin/activate
更新pip pip install -U pip
安裝依賴項 pip install -r code/fangtx/requirements.txt
- uwsgi相關
- 配置uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim conf/uwsgi.conf
1[uwsgi]
2 # 配置項目前導路徑
3 base=/root/project
4 # 配置項目名稱
5 name=fangtx
6 # 守護進程
7 master=true
8 # 進程個數(CPU個數)
9 processes=4
10 # 虛擬環境地址
11 pythonhome=%(base)/venv
12 # 項目地址
13 chdir=%(base)/code/fangtx
14 # 指定python解釋器
15 pythonpath=%(pythonhome)/bin/python
16 # 指定uwsgi文件
17 module=%(name).wsgi
18 # 通信的地址和端口(自己服務器內網的IP地址和端口)
19 http=172.19.169.61:80
20 # 日志文件地址
21 # logto=%(base)/logs/uwsgi.log
- 安裝uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# pip install uwsgi
- 啟動uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# uwsgi --ini conf/uwsgi.conf
- 如果80端口被占用(nginx)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# netstat -nap | grep 80
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# systemctl stop nginx
- 確認uwsgi可運行后,恢復配置文件中注釋的日志,uwsgi用8000端口,nginx用80端口
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# vim conf/uwsgi.conf
19 通信的地址和端口(自己服務器的IP地址和端口)
socket=服務器內網IP:8000
20 # 日志文件地址
21 logto=%(base)/logs/uwsgi.log
- 配置Nginx
- 靜態文件夾轉移
(先在pycharm中指定靜態資源位置)
STATIC_ROOT = '/root/project_school/stat/'
(venv) [root@izuf6hgznqeh3d0hgxzyrqz school]# git pull
(venv) [root@izuf6hgznqeh3d0hgxzyrqz fangtx]# python manage.py collectstatic
(venv) [root@izuf6hgznqeh3d0hgxzyrqz stat]# ls
admin css images js rest_framework
- 項目更新pull(不是必須的)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz fangtx]# git pull
- 配置nginx(動靜分離)
- 后臺運行uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# uwsgi --ini conf/uwsgi.conf &
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# jobs
[1]+ 運行中 uwsgi --ini conf/uwsgi.conf &
- 安裝nginx(不是必須)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# yum install nginx
- 配置nginx文件(nginx官方)-讓官方的包含自己項目的nginx文件
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim /etc/nginx/nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
10 # Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
include /root/project_school/conf/nginx.conf;
}
- 配置nginx文件(nginx自己)(locatin動態走uwsgi,靜態走nginx)
server{
2 listen 80;
3 server_name _;
4 access_log /root/project_school/logs/access.log;
5 error_log /root/project_school/logs/error.log;
6
7 location / {
8 include uwsgi_params;
9 uwsgi_pass 服務器內網IP:8000;
10 }
11
12 location /static/ {
13 alias /root/project_school/stat/;
14 expires 30d;
15 }
16
17 }
- HTTPS相關
- sftp傳安全訪問證書到服務器(project>conf>cert>):2248813_weejoo.cn.key 2248813_weejoo.cn.pem
(venv) [root@izuf6hgznqeh3d0hgxzyrqz cert]# ls
2248813_weejoo.cn.key 2248813_weejoo.cn.pem
- 配置HTTPS
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim conf/nginx.conf
server {
19 listen 443;
20 server_name _;
21 access_log /root/project/logs/access.log;
22 error_log /root/project/logs/error.log;
23
24 ssl on;
25 ssl_certificate /root/project/conf/cert/2248813_weejoo.cn.pem;
26 ssl_certificate_key /root/project/conf/cert/2248813_weejoo.cn.key;
27 ssl_session_timeout 5m;
28 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
29 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
30 ssl_prefer_server_ciphers on;
31
32 location / {
33 include uwsgi_params;
34 uwsgi_pass 服務器內網IP:8000;
35 }
36
37 location /static/ {
38 alias /root/project/stat/;
39 expires 30d;
40 }
41 }
- 保存退出/重啟nginx
systemctl restart nginx - 設置云解析DNS
記錄類型: A
主機記錄:@
記錄值:服務器公網地址