1 安裝 python3 到 Centos7, 先安裝軟件管理包和可能使用的依賴css
yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
2 下載Pyhton3到/usr/local 目錄html
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
3 解壓python
tar -zxvf Python-3.7.2.tgz
4 進入到解壓好的python文件中mysql
cd Python-3.7.2
5 編譯安裝到指定路徑linux
./configure --prefix=/usr/local/python3
6 安裝python3nginx
make make install
7 安裝完成以後 創建軟連接 添加變量 方便在終端中直接使用python3web
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
8 Python3安裝完成以後pip3也一塊安裝完成,不須要再單獨安裝同樣創建軟連接
一樣給pip3創建軟連接sql
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3 注: 若是軟鏈創建完成,可是卻沒法使用的時候執行下面命令: mv pip pip2 # (將文件 pip 改名爲 pip2 ) ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
9 安裝virtualenv, 方便不一樣版本項目管理。shell
pip3 install virtualenv
10 創建軟連接數據庫
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv3
11 安裝成功在根目錄下創建兩個文件夾,主要用於存放env和網站文件的 (文件建立隨意,根據實際需求)。
mkdir -p /data/env # 存放虛擬環境 mkdir -p /data/wwwroot # 存放web項目
12 切換到/data/env/下,建立指定版本的虛擬環境。
virtualenv3 --python=/usr/bin/python qize_demo (項目名) # 建立虛擬環境 # 而後進入 cd /data/env/qize_demo/bin # 進入bin目錄後開啓虛擬環境,執行命令 source activate # 注:(啓動後出現 (qize_demo),說明是成功進入虛擬環境。)
13 虛擬環境裏用pip3安django和uwsgi (留意:uwsgi要安裝兩次,先在系統裏安裝一次,而後進入對應的虛擬環境安裝一次。)
pip3 install django #(若是用於生產的話,則須要指定安裝和你項目相同的版本) pip3 install uwsgi # 給uwsgi創建軟連接,方便使用 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
14 在本地項目目錄下用下面的命令把當前的環境依賴包導出到requirements.txt文件
pip freeze > requirements.txt
15 把項目源碼壓縮打包。把項目上傳到服務器對應的目錄裏(/data/wwwroot/),解壓。
16 進入解壓好的項目根路徑中安裝requirements.txt裏的依賴包。
pip3 install -r requirements.txt
17 導入數據庫到服務器。(若是用的是Mysql的話)
導出Mysql,django爲你的數據庫
mysqldump -uroot -p password django>django.sql
把django.sql上傳到服務器,在服務器裏用下面命令導入
mysql -uroot -ppassword use dajngo; source your Path\django.sql
18 經過 python3 manage.py runserver 運行一下項目,若是能正常啓動則進行下一步,不能正常運行往上檢查 (下面給出幾個常見錯誤和解決方案)。
報錯1:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11 解決方案:
解決:編輯Python安裝路徑下的 Python36-32\Lib\site-packages\django\db\backends\mysql\base.py
將文件中的以下代碼註釋 #if version < (1, 3, 3): # raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
報錯2: File "/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
解決:編輯
/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py
的 第146 行,
# 將 decode 改成 encode 保存並退出 query = query.decode(errors='replace') 改成 query = query.encode(errors='replace')
19 在項目根目錄裏添加uwsgi配置文件 (qize_demo.xml)
<uwsgi> <socket>127.0.0.1:8070/</socket><!-- 內部端口,自定義 --> <chdir>/data/wwwroot/qize_demo/</chdir><!-- 項目路徑 --> <module>qize_demo.wsgi</module> <processes>4</processes> <!-- 進程數 --> <daemonize>uwsgi.log</daemonize><!-- 日誌文件 --> </uwsgi>
20 配置Nginx配置文件(把原先的配置文件能夠備份如下,而後將下面的替換進去)。
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name 127.0.0.1:80; # 改成本身的域名,沒域名修改成127.0.0.1:80 charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8070; #端口要和uwsgi裏配置的同樣 uwsgi_param UWSGI_SCRIPT qize_demo.wsgi; #wsgi.py所在的目錄名+.wsgi uwsgi_param UWSGI_CHDIR /data/wwwroot/qize_demo/; #項目路徑 } location /static { alias /data/wwwroot/qize_demo/static; #靜態資源路徑 } location /templates { alias /data/wwwroot/qize_demo/templates; } } }
留意:必定要注意Uwsgi和Nginx配置文件裏的項目路徑和靜態資源路徑,填寫正確了才能成功訪問。否則會出現502錯誤。還有就是,修改Django文件和其它配置文件以後,必定要重啓Uwsgi和Nginx,否則不生效。
21 Uwsgi和Nginx重啓方法:
uwsgi 啓動方法
uwsgi -x qize_demo.xml
Nginx 重啓方法
nginx -s reload
而後在瀏覽器裏訪問服務器ip(或域名),就能查看到項目。
若是想使用域名訪問項目,先在域名管理後臺把域名解析到服務器IP上來,以後在Nginx配置文件裏綁定域名。而後在瀏覽器裏經過綁定的域名訪問項目。
1 若是訪問出現 500 以上的錯誤信息並有nginx的信息,通常是nginx配置出了問題。去查看nginx.conf配置中的項目路徑是否正確,uwsgi_pass 參數的端口和 uwsgi的xml 文件中端口是否一致,是否修改完配置後從新啓動了nginx。還有就是能夠去項目根路徑下 python manage.py runserver 啓動下項目,看看有沒有報錯,也有多是程序自己就有問題。
2 若是訪問出現 400 以上的錯誤信息,重點檢查項目路徑,包括 tempates / static 靜態路徑是否正確,和項目中 settings 是否配置了 tempates / static 文件的訪問路徑,以及 url 是否正確,其次還有html文件中引入的 css, js, img 等文件路徑是否正確, 好比:
css文件:<link rel="stylesheet" href="/static/css/q.css"> js文件 :<script src="/static/js/q.js"></script>
1 項目上線後記得 DEBUG = False 這樣設置,這樣的話你的項目訪問失敗就不會有 Django 的錯誤信息了
2 設置全部 IP 均可訪問 (settings.py)
ALLOWED_HOSTS = ['*']
3 數據庫設置(settings.py)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sql_base', # 庫名 (根據實際數據庫名進行修改) 'PORT': 3306, # 端口(不用改) 'HOST': '127.0.0.1', # 本地host(不用改) "USER": 'root', # 用戶名 'PASSWORD': '123456' # 密碼 } }