項目開發環境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicornphp
發佈出來供須要的同窗借鑑參考。文中若有錯誤請多多指正!html
轉載請註明出處!https://blog.markhoo.comnode
部署前的準備python
要部署項目就要先購買服務器,如騰訊雲,阿里雲等等mysql
注意:服務器在國內的話,必需要備案!否則沒法使用。nginx
阿里雲優惠券:點擊前往領取
騰訊雲代金券:點擊前往領取
騰訊雲首頁:點擊直達
騰訊雲西南區雲產品促銷連接:點擊直達
騰訊雲服務器購買連接:點擊直達git
域名購買選擇,能夠到百度雲,騰訊雲,阿里雲,GoDaddy,namecheap等等github
購買域名後就是解析域名,打開域名解析面板,添加解析記錄
記錄類型:A
主機記錄:test.markhoo.com,這個markhoo.com是你的一級域名,二級域名你能夠設置爲www.markhoo.com
解析線路:能夠默認也能夠選別的
記錄值:填寫你的服務器IP地址
TTL:域名生效時間,也就是多久生效
設置好以上內容,點擊肯定。解析完成sql
主機記錄中這個markhoo.com是你的一級域名,二級域名你也能夠設置爲 www.markhoo.com 或者別的 xxx.markhoo.com 也能夠。
注意:域名是否在國內購買不重要,只要服務器不在大陸購買,即便未備案照樣可使用。要是要解析的服務器是大陸服務商則必需要備案。備案後一個域名能夠同時接入多個服務商。shell
域名解析記錄類型說明:
- A:將域名指向一個IPv4地址
- AAAA:將域名指向一個IPv6地址
- CNAME:將域名指向另一個域名
- NS:將子域名指定其餘DNS服務器解析
- MX:將域名指向郵件服務器地址
- SRV:記錄提供特定的服務的服務器
- TXT:文本長度限制512,一般作SPF記錄(反垃圾郵件)
- CAA:CA證書頒發機構受權校驗
- 顯性URL:將域名302重定向到另一個地址
- 隱性URL:與顯性URL相似,可是會隱藏真實目標地址
主要用於遠程登陸服務器進行相關操做。在官網註冊後發送下載連接到你的註冊郵箱,或者到搜索引擎搜索下載。
我的版免費,企業版收費。
下載後一路點擊下一步,完成。
登陸服務器步驟:
點擊左上角'文件'--'新建'
而後彈出對話框
常規:名稱,這個你能夠隨便取什麼名字
協議:SSH,通常默認
主機:空,填上你的服務器IP地址
端口號:22,默認的就行
填好以上選項內容,點擊左側的'用戶身份驗證',而後看右側,方法選擇'Password',在下面輸入你的服務器登陸用戶名和密碼,最後點擊下面的'鏈接'。
登陸成功!進入界面。
百度網盤官網軟件下載連接:
連接: https://pan.baidu.com/s/19K5q1JkmD9qnYaGRTALyLg 密碼: r6hx
首先用xshell登陸服務器
經過 yum 安裝 Nginx
> yum install nginx
啓動 Nginx 服務
> systemctl start nginx
或者
> systemctl start nginx.service > systemctl enable nginx.service
訪問服務器IP地址,能夠看到 nginx 的歡迎界面
Nginx相關命令:
中止nginx
> nginx -s stop
重啓nginx
> nginx -s reload
因爲centos7.5本來默認安裝了Python2,並且這個Python2不能被刪除,由於有不少系統命令,好比yum都要用到。
如下操做首先要用xshell登陸到服務器
輸入Python命令,查看能夠得知是Python2.7.5版本
輸入
> which python
能夠查看位置,通常是位於/usr/bin/python目錄下。
下面介紹安裝Python3的方法
首先安裝依賴包
> yum -y groupinstall "Development tools" > yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
而後根據本身需求下載不一樣版本的Python3,我下載的是Python3.5.2
注:若是速度不夠快,能夠直接去官網下載,利用WinSCP等軟件傳到服務器上指定位置。
個人存放目錄是/usr/local/python3,使用命令:
> mkdir /usr/local/python3
創建好一個空文件夾,進入該目錄
> cd /usr/local/python3
使用一下命令下載壓縮包
> wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
而後解壓壓縮包安裝Python3
> tar -xvJf Python-3.5.2.tar.xz > cd Python-3.5.2 > ./configure --prefix=/usr/local/python3 > make && make install
最後建立軟連接
> ln -s /usr/local/python3/bin/python3 /usr/bin/python3 > ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
在命令行中輸入python3測試
升級pip3命令:
> pip3 install --upgrade pip
Django 項目中會有一些 CSS、JavaScript 等靜態文件,爲了可以方便地讓 Nginx 處理這些靜態文件的請求,咱們把項目中的所有靜態文件收集到一個統一的目錄下,這個目錄一般位於 Django 項目的根目錄,而且命名爲 static。爲了完成這些任務,須要在項目的配置文件裏作一些必要的配置:
myblog/settings.py # 其餘配置... STATIC_URL = '/static/' # 加入下面的配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_ROOT 指明瞭靜態文件的收集目錄,即項目根目錄(BASE_DIR)下的 static 文件夾。
爲了安全起見,在生產環境下須要關閉 DEBUG 選項以及設置容許訪問的域名。打開 settings.py 文件,找到 DEBUG 和 ALLOWED_HOSTS 這兩個選項,將它們設置成以下的值:
myblog/settings.py DEBUG = False ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.markhoo.com']
ALLOWED_HOSTS 是容許訪問的域名列表,127.0.0.1 和 localhost 是本地訪問的域名,.markhoo.com 是訪問服務器的域名(換成你本身的域名)。域名前加一個點表示容許訪問該域名下的子域名,好比 www.markhoo.com test.markhoo.com 等二級域名一樣容許訪問。若是不加前面的點則只容許訪問 markhoo.com。
項目還會依賴一些第三方 Python 庫,爲了方便在服務器上一次性安裝,咱們將所有依賴寫入一個叫 requirements.txt 的文本文件中。激活本地的虛擬環境(若是你使用了虛擬環境的話),並進入項目的根目錄,運行 pip freeze > requirements.txt 命令:
> (myblog_env) D:\Djangoprojects\myblog> > pip freeze > requirements.txt
這時項目根目錄下會生成了一個 requirements.txt 的文本文件,其內容記錄了項目的所有依賴。因爲有一些依賴包也有前後依賴關係,該調整的須要進去txt文件調整一下。
若是上傳到服務器後修改,可使用 'vi (文件名稱)' 打開文件,而後點擊鍵盤 'i' 鍵切換到輸入模式。
修改完須要退出,先按鍵盤 'Esc' 鍵,而後輸入 ':wq' 保存退出。若是不想修改又沒法退出能夠用 ':q!' 強制退出,這樣不會保存你修改的內容
更多的vi、vim命令使用方法能夠自行到搜索引擎搜索學習,這裏就不一一講解了。
將代碼上傳到 GitHub 等代碼託管平臺,這樣咱們就能夠方便地把代碼拉取到服務器了。
若是訪問慢或者打不開GitHub的話,能夠上傳到國內的Gitee或者Coding
安裝Git能夠到官網 https://git-scm.com 下載,安裝的話能夠一直下一步,完成。
首先你須要一個GitHub 、 Gitee 、 或者Coding帳號,因此尚未的話先去註冊吧!
https://github.com
https://gitee.com
https://coding.net
1.進入Github首頁,點擊New repository新建一個項目
2.填寫相應信息後點擊create便可
Repository name: 倉庫名稱
Description(可選): 倉庫描述介紹
Public, Private : 倉庫權限(公開共享,私有或指定合做者)
Initialize this repository with a README: 添加一個README.md
gitignore: 不須要進行版本管理的倉庫類型,對應生成文件.gitignore
license: 證書類型,對應生成文件LICENSE
通常能夠填寫項目倉庫名稱,點擊create就能夠了。由於免費用戶只有 Gitee 才能夠建立私有倉庫
3.建立好項目倉庫後,在項目倉庫頁面點擊Clone or dowload會出現一個地址,copy這個地址備用。
4.接下來就到本地操做了,首先右鍵你的項目,若是你以前安裝git成功的話,右鍵會出現兩個新選項,分別爲Git Gui Here,Git Bash Here,這裏咱們選擇Git Bash Here進入界面,個人本地項目名爲myblog。
5.接下來輸入以下代碼(關鍵步驟),把github上面的倉庫克隆到本地
> git clone (粘貼上你以前複製的地址)
6.操做步驟5之後你的本地項目文件夾下面就會多出個文件夾,該文件夾名即爲你github上面的項目名,如我多出了個myblogsite文件夾,咱們把本地項目文件夾下的全部文件(除了新多出的那個文件夾不用),其他都複製到那個新多出的文件夾下。
7.接着繼續輸入命令 cd myblogsite,進入myblogsite文件夾
8.接下來依次輸入如下代碼便可完成其餘剩餘操做:
> git add . (注:別忘記後面的.,此操做是把myblogsite文件夾下面的文件都添加進來) > git commit -m "提交信息" (注:「提交信息」裏面換成你須要,如「first commit」) > git push -u origin master (注:此操做目的是把本地倉庫push到github上面,此步驟須要你輸入GitHub賬號和密碼)
注意:數據庫文件不要上傳!要是SQLLITE3裏面有你測試的重要數據,將可能會泄露。
接下來須要把代碼上傳到服務器了。我服務器上存放代碼的目錄結構通常是這樣的:
/home/markhoo/ sites/ markhoo.com/ myblog_env/ myblog/
一臺服務器可能部署多個網站,全部網站代碼都放在 sites/ 目錄下。markhoo.com/ 這個文件夾以網站的域名命名,便於區分。myblog_env 是 python 虛擬環境目錄。myblog 是 Django 博客項目目錄。
建立這個目錄結構,注意目錄名替換爲你本身的域名,之後涉及到 markhoo.com 的地方一般都要替換你本身的域名,後面就再也不一一指出了。
備註:上面的個人目錄結構.可能會有新手看不懂,解釋一下,就像下面這樣一直建立下去
/home/markhoo/sites/markhoo.com/
最後的 myblog_env 和 myblog 是同級目錄位於markhoo.com下,這裏本身先不要建立。
建立目錄的命令爲: mkdir (文件夾名稱)
刪除目錄的命令爲: rmdir (文件夾名稱)
爲了避免影響外界環境的清潔,因此咱們使用虛擬環境來配置 Django 項目
首先用xshell登陸到你的服務器,而後按一下步驟操做
> pip3 install virtualenv
接下來建立虛擬環境,先進入到 markhoo.com 目錄下,而後運行 virtualenv 命令建立虛擬環境:
> [root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com > [root@instance-pkb22o0h markhoo.com]# virtualenv -p /usr/bin/python3 –-no-site-packages myblog_env
命令說明:
-p: 指定你要虛擬的Python版本,這裏選擇了本地的python3
–-no-site-packages:表示在創建虛擬環境時不將原版本中的第三方庫拷貝過來,這樣就能得到一個純淨的Python環境。
myblog_env:代表在該目錄下,創建一個叫作myblog_env的虛擬環境,這樣的命名方式,讓你一眼就能看出這個虛擬環境是爲誰創建的。
virtualenv的命令使用方法:
建立虛擬環境:
$ virtualenv -p /usr/bin/python3.5 –-no-site-packages myblog_env
啓動虛擬環境:
$ source myblog_env/bin/activate
退出虛擬環境:
$ deactivate
刪除虛擬環境:
$ rm –r myblog_env
檢查一下虛擬環境是否建立成功,運行 ls 命令列出當前目錄下的文件和文件夾,看到 myblog_env 這個文件夾說明虛擬環境建立成功。
> [root@instance-pkb22o0h markhoo.com]# ls > myblog_env
因爲我只是測試項目,因此使用了Python自帶的venv。
先進入到 markhoo.com 目錄下,而後運行 python3 -m venv myblog_env 建立虛擬環境:
> [root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com > [root@instance-pkb22o0h markhoo.com]# python3 -m venv myblog_env
檢查一下虛擬環境是否建立成功,運行 ls 命令列出當前目錄下的文件和文件夾,看到 myblog_env 這個文件夾說明虛擬環境建立成功。
> [root@instance-pkb22o0h markhoo.com]# ls > myblog_env
接着再從代碼倉庫把項目代碼拉取過來,把 git clone 後的地址換成你本身的 GitHub 倉庫地址!
> [root@instance-pkb22o0h markhoo.com]# git clone https://github.com/MarkHoo/myblog.git
運行 ls 命令檢查一下是否拉取成功:
> [root@instance-pkb22o0h markhoo.com]# ls > myblog myblog_env
多了 myblog 文件夾(文件夾名稱由你的 GitHub 倉庫名決定),說明拉取成功了。
接下來執行命令,啓動虛擬環境
> [root@instance-pkb22o0h markhoo.com]# source myblog_env/bin/activate > (myblog_env) [root@instance-pkb22o0h markhoo.com]#
安裝項目環境依賴
> (myblog_env) [root@instance-pkb22o0h markhoo.com]# cd myblog > (myblog_env) [root@instance-pkb22o0h myblog]# pip3 install -r requirements.txt
收集靜態文件
運行 python manage.py collectstatic 命令收集靜態文件到 static 目錄下
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py collectstatic
生成數據庫
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate
建立超級用戶
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser
而後就會出現如下內容,第一個是用戶名,第二個是郵箱,第三和第四是密碼(輸入時沒有任何顯示,實際上已經輸入了)。最後顯示建立成功!
> Username (leave blank to use 'root'): admin > Email address: admin@markhoo.com > Password: > Password (again): > Superuser created successfully.
備註:這裏使用的是Django默認生成的sqlite3數據庫,我使用了這個,簡單寫寫博客夠用了。
啓動 Django
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000
若是沒有報錯,就說明 Django 已經安裝成功了,打開瀏覽器輸入你的服務器IP:8000,就能夠看到你的網站了
退出 Django
按 ctrl+c 退出 Django 服務
安裝並啓動 mariadb
由於 CentOS 7 以後的版本都不在提供 Mysql 安裝源,這裏咱們使用 mariadb 代替 mysql,依次執行下列命令
> yum install mariadb mariadb-server -y > yum install MySQL-python -y > systemctl start mariadb
對 mariadb 進行初始化設置
- 執行下面命令,根據提示操做
- 設置新密碼爲 test
- 默認密碼爲空,直接回車便可
> mysql_secure_installation
使用設置的密碼登錄 mariadb
- 登錄 db,這裏假設密碼被設置爲 admin123
> mysql -uroot -ptest
建立一個數據庫
> create database myblog;
成功後,輸入 exit 命令退出 db
> exit
修改配置文件,與 Mysql 數據庫相關聯
編輯 myblog/settings.py
# Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myblog', 'PASSWORD':'admin123', 'USER': 'root', 'HOST':'127.0.0.1', 'PORT':'3306', } }
建立 Django 數據庫
> (myblog_env) [root@instance-pkb22o0h myblog]# cd /home/markhoo/sites/markhoo.com/myblog > (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate
建立超級用戶
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser
而後就會出現如下內容,第一個是用戶名,第二個是郵箱,第三和第四是密碼(輸入時沒有任何顯示,實際上已經輸入了)。最後顯示建立成功!
> Username (leave blank to use 'root'): admin > Email address: admin@markhoo.com > Password: > Password (again): > Superuser created successfully.
啓動 Django
> (myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000
若是沒有報錯,就說明 Django 已經安裝成功了,而且跟 Mysql 的鏈接正常。打開瀏覽器輸入你的服務器IP:8000,就能夠看到你的網站了
退出 Django
按 ctrl+c 退出 Django 服務
Gunicorn 通常用來管理多個進程,有進程掛了Gunicorn 能夠把它拉起來,防止服務器長時間中止服務,還能夠動態調整 worker 的數量,請求多的時候增長 worker 的數量,請求少的時候減小。
在虛擬環境下,安裝 Gunicorn:
> (myblog_env) [root@instance-pkb22o0h myblog]# pip3 install gunicorn
測試Gunicorn是否能啓動你的項目服務
> (myblog_env) [root@instance-pkb22o0h myblog]# gunicorn --bind 0.0.0.0:8000 myblog.wsgi:application
注意:myblog.wsgi:application這裏的myblog對應的是 /home/markhoo/sites/markhoo.com/myblog/myblog, 根據本身的修改。瀏覽器輸入域名,能夠看到訪問成功了!
訪問ip地址看瀏覽器是否能正常查看內容(此時沒有退出虛擬環境)
完成測試後,按CTRL-C 中止 Gunicorn 運行
退出虛擬環境
> deactivate
建立一個 Gunicorn Systemd Service 文件,直接運行如下命令
> vim /etc/systemd/system/gunicorn.service
修改內容以下:
[Unit] Description=gunicorn daemon After=network.target [Service] User=root Group=nginx WorkingDirectory=/home/markhoo/sites/markhoo.com/myblog ExecStart=/home/markhoo/sites/markhoo.com/myblog_env/bin/gunicorn --workers 3 --bind unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock myblog.wsgi:application [Install] WantedBy=multi-user.target
必定要注意本身的項目路徑和虛擬環境路徑
WorkingDirectory與ExecStart 修改成本身的路徑
開啓Gunicorn服務並開機自啓,運行如下命令
> systemctl start gunicorn > systemctl enable gunicorn
接下是配置 Nginx 來處理用戶請求
配置nginx代理經過Gunicorn
依次運行如下命令
> (myblog_env) [root@instance-pkb22o0h myblog]# cd /etc/nginx/ > (myblog_env) [root@instance-pkb22o0h nginx]# ls > conf.d fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi > default.d fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi > (myblog_env) [root@instance-pkb22o0h nginx]# vi nginx.conf
或者直接運行
> 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 nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # 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; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
找到server內容進行修改,具體內容以下:
server { listen 80; server_name markhoo.com 0.0.0.0; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/markhoo/sites/markhoo.com/myblog; } location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock; } }
注意修改本身的IP地址或域名,還有文件路徑
server_domain_or_IP 表明你的IP地址或域名
- 這裏的域名爲 markhoo.com,其次必定要添加 0.0.0.0 不然沒法訪問,兩個之間用空格隔開。
- 全部URL 帶有 /static 的請求均由 Nginx 處理,alias 指明瞭靜態文件的存放目錄。
- 其它請求轉發給 Django 處理。proxy_pass 後面使用了 unix 套接字,其做用是防止端口衝突,這裏就再也不詳述。
修改所涉及到的vim命令使用方法:使用 'vi (文件名稱)' 是打開文件,而後點擊鍵盤 'i' 鍵切換到輸入模式。修改完須要退出vim編輯器,先按鍵盤 'Esc' 鍵,而後輸入 ':wq' 保存退出。若是不想修改又沒法退出能夠用 ':q!' 強制退出,這樣不會保存你修改的內容。
更多的vi、vim命令的具體使用方法能夠自行到搜索引擎搜索學習,這裏也不一一講解了。
修改nginx的權限
> usermod -a -G root nginx > chmod 710 /home/ > nginx -t
若是沒有報錯,就行下一步操做
開啓nginx服務並開機自啓
> systemctl start nginx > systemctl enable nginx
如今,一切配置完成!你能夠訪問你的域名了!