阿里雲部署Django專案(nginx+uWSGI)-2018.11
前言:部署的前提是你的專案已經在本地完成可以執行了,我的本地環境是ubuntu16.04+python3.5+Django2.1.2+Mysql,在python虛擬環境(virtualenv)下建的專案。阿里雲部署用的是nginx+uWSGI。
一、雲伺服器購買和配置
去阿里雲官網購買一臺雲伺服器ECS(Elastic Compute Service),可以直接支付寶掃碼登入。個人用的話入門級就可以了,我買的是1核2G的,原價還是挺貴的。個人練手的話1核1G應該也是夠用了,看實際需求。
購買的時候會讓你選作業系統,因為我本地用的就是Ubuntu,所以選的ubuntu16.04 64位。除了作業系統選擇,還有幾個要設定的地方,等下說。先說下這個雲伺服器ECS(Elastic Compute Service)是個什麼東西,簡單的就可以把它理解為一臺電腦,我們租的一臺電腦,可以一直執行。我們可以通過遠端連線對它進行操作,只能通過終端命令操作,不能用滑鼠。
購買成功後進入控制檯→雲伺服器(ECS)→例項,就能看到你買的伺服器。上面的公網IP就是這臺伺服器所在的IP地址,部署成功後瀏覽器通過這個地址訪問你部署的專案。這裡還有兩個密碼要設定,一個是遠端連線的密碼,第一次點選上圖的遠端連線會出現一個6位數字密碼,只出現一次,所以要記住這個密碼,後面也可以修改。第二個是ubuntu登入的賬戶密碼,帳戶名預設為root,密碼需要設定。點選上圖的管理,點選更多-重置密碼 設定ubuntu登入密碼。
除此之外還有一個要設定的就是安全組,設定允許訪問的埠。點選安全組--配置規則 進入如下介面,最下面三條是系統的預設設定。
點選新增安全組規則進行埠新增,只需要填埠範圍和授權物件,比如80埠,埠範圍寫80/80,授權物件寫0.0.0.0/0,表示所有IP地址都能訪問。常用的幾個埠號,SSH(22),HTTP(80),HTTPS(443)。
到此,雲伺服器的基本設定完成了。點選 例項頁面的遠端連線,輸入6位密碼,就可以遠端登入。然後會讓你輸入Ubuntu的賬戶名和密碼。輸入成功後就可以遠端登入ubuntu的終端,可以像在本地一樣通過各種命令操作。
二、專案資料上傳和環境搭建
1、把我們本地Django專案工程檔案拷貝到阿里雲上
這裡要用到一個工具:Xftp,可以用來在本地和遠端Linux之間拷貝檔案。
進入官網,https://www.netsarang.com/products/xfp_overview.html 。點選Free License,填寫下姓名、郵箱就可以免費下載安裝。
安裝成功後,開啟,點選左上角新建,主機 輸入你阿里雲的公網IP,確定。然後點選對話,輸入ubuntu的賬戶名,密碼,就可以實現本地和阿里雲的連線。
左邊就是你的PC桌面,右邊是阿里雲ubuntu的root目錄。可以直接按住把檔案從左邊拖到右邊的資料夾中。因為本地是在虛擬機器中執行的ubuntu,專案檔案叫做myweb,先把檔案從ubuntu中拷貝到桌面,再從桌面拖到阿里雲ubuntu的home資料夾下。這裡還有一點設定是如何顯示ubuntu中的隱藏檔案,在工具欄--選項--顯示隱藏檔案。
2、虛擬環境(virtualenv)的安裝
本地專案是建在python虛擬環境下的,所以在阿里雲上也要先建下虛擬環境。安裝如下步驟如下:
1、安裝virtualenv
sudo pip install virtualenv
sudo pip install virtualenvwrapper #安裝虛擬環境管理工具
2、在home下建立虛擬環境安裝目錄
mkdir .virtualenvs
3、為virtualenv配置環境變數,開啟.bashrc檔案,在末尾加上兩行程式碼,在阿里雲的ubuntu上,你想編輯檔案只能用vi/vim開啟,對於沒用過vi的話還是需要點時間學習的。或者你可以在本地pc編輯好,再用Xftp工具上傳覆蓋原來的檔案。
用vim開啟.bashrc ,一般就在home資料夾下
sudo vim ~/.bashrc
在末尾新增兩行程式碼
export WORKON_HOME=$HOME/.virtualenvs # 所有虛擬環境儲存的目錄
source /usr/local/bin/virtualenvwrapper.sh
使配置檔案生效
source ~/.bashrc
4、建立虛擬環境,預設命令建立的是python2的虛擬環境,指定建立python3.5的虛擬環境可以使用以下命令
mkvirtualenv -p /usr/bin/python3.5 XX #XX是虛擬環境的名字,建立python3.5的虛擬環境
其他命令:
workon xx #進入虛擬環境XX
deactivate #退出虛擬環境
3、在虛擬環境中安裝相應的工具包
我們在本地寫django專案肯定是安裝了一堆相應的包,需要把他們移植到阿里雲上。首先在本地ubuntu進入虛擬環境,在專案根目錄下,執行以下命令收集安裝的包,就是生成一個包的清單檔案plist.txt。
pip freeze > plist.txt
然後用xftp把這個plist.txt檔案上傳到阿里雲專案的根目錄home/myweb,然後進入虛擬環境test(test是我新建的虛擬環境的名字)。
workon test #進入虛擬環境test
cd到plist.txt所在目錄
pip install -r plist.txt #安裝txt檔案上的包
4、Mysql資料庫的安裝和資料的遷移
安裝Mysql:輸入以下命令,安裝過程會設定密碼,設定成和原來本地一樣的,就不用在setting中修改了。
sudo apt-get update
sudo apt-get install mysql-server
sudo apt-get install mysql-client
建立資料庫:先登入資料庫, 然後建立資料庫v1,資料庫名字也建立成和原來本地一樣的,我的叫v1。
create database v1;
資料的遷移:把本地資料庫中的資料複製到阿里雲上的資料庫中。先在本地生成備份檔案,v1是要備份的資料庫,v1.sql是生成的備份檔案。然後用Xftp把v1.sql檔案上傳到阿里雲。
mysqldump -u root -p v1 >v1.sql
資料還原:阿里雲終端 cd到v1.sql所在目錄,輸入以下命令
mysql -u root -p v1<v1.sql
mysql配置:找到mysqld.cnf檔案註釋掉bind-address這一行
/etc/mysql/mysql.conf.d/mysqld.cnf #配置檔案路徑
#bind-address = 127.0.0.1 #註釋掉這一行
5、修改django的setting檔案:
DEBUG = False
ALLOW_HOSTS=['XXXXXX'] #改成阿里雲的公網IP
至此,我們已經完成了專案檔案遷移、環境建立、資料庫遷移 。可以在阿里雲的終端中執行Django專案,先進入虛擬環境,然後cd到專案目錄下,python manage.py runserver 看能不能啟動專案,如果可以說明專案本身已經沒有問題了。如果不能說明專案本身還有問題。有些包安裝好後需要設定配置檔案,看是不是沒設定。到目前為止的操作其實基本都和本地是一樣,下面我們要安裝兩個額外的東西,nginx和uWSGI。
三、nginx、uWSGI的安裝
在安裝前先了解下這幾個是什麼東西:WSGI、uWSGI、nginx。
WSGI:PythonWeb伺服器閘道器介面(Python Web Server Gateway Interface),這是一種協議規範,用於規範web server(比如uWSGI)和web application(Flask、Django等)之間的通訊方式。這種協議其實是將我們和更加底層的HTTP、TCP等協議分隔開來,使我們在開發的時候可以不用自己去實現這些協議的處理,只關注於更高層次的邏輯處理,實現物件導向的程式設計。
uWSGI:uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。它本身可以作為一個伺服器單獨使用,但是也可以和nginx組合使用。一般Django部署都是用的nginx+uWSGI,可以理解為這種組合效能更優。
nginx:這是一個高效能的web伺服器/反向代理,類似Apache。什麼叫反向代理,客戶端通過一個代理去訪問伺服器,這樣的代理叫正向代理;同樣的伺服器前加一個代理和客戶端通訊,這樣的代理叫反向代理。nginx就是用來放在uWSGI前做反向代理。
我們在本地開發的時候沒有安裝過以上伺服器,但是也可以python manage.py runserver執行專案,那是因為Django等框架自帶了WSGI伺服器,效能不強,可以用於除錯。
nginx安裝:
直接在終端安裝,不用裝在虛擬環境中,輸入以下命令:
sudo apt-get update
sudo apt-get install nginx
安裝成功後,用瀏覽器訪問你的阿里雲IP地址,可以看到以下提示 :
nginx常用命令:
service nginx start #啟動
service nginx stop #停止
service nginx reload #重啟
nginx配置:開啟配置檔案default,路徑/etc/nginx/sites-available/default,設定以下內容。一個是server_name後面換成你的阿里雲公網IP,有的文章說不換也行。關鍵是下面2個location,第一個location是設定的和uWSGI的關聯。第二個location /static是設定的靜態檔案的路徑。如果你的專案還有media資料夾,那還要加一個location /media,把路徑設定上。注意:location 和alias後面有空格。
server_name 47.106.84.245;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /home/myweb/static;
}
更新(2018.11.26):
上面nginx配置靜態檔案有一個問題,就是上面的目錄/home/myweb/static只是我們自己的靜態檔案的目錄,你登入admin後發現admin頁面的樣式都丟失了。因為django自帶的admin的靜態檔案路徑沒有匯入。所以就需要新建一個資料夾,我的是/home/myweb/nginx/static,然後執行命令把整個專案的所有靜態檔案都收集到這個目錄下,再修改下上面的配置。
第一步:新建資料夾 /home/myweb/nginx/static
第二步:修改setting.py檔案,增加STATIC_ROOT
STATIC_ROOT='/home/myweb/nginx/static/' #新增收集靜態檔案的目錄
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
第三步:執行以下程式碼收集靜態檔案
python manage.py collectstatic
第四步:修改nginx的配置
location /static {
alias /home/myweb/nginx/static;
}
uWSGI安裝:
這個是安裝在虛擬環境中,先workon test進入虛擬環境,安裝uWSGI前需要先安裝依賴,輸入以下命令完成安裝
apt-get install build-essential python
apt-get install python-dev
pip install uwsgi
配置uWSGI:在django專案的根目錄下,新建兩個檔案,uwsgi.ini和run.log 。第一個是uWSGI的配置檔案,第二個是日誌記錄檔案。設定uwsgi.ini檔案如下:
[uwsgi]
chdir = /home/myweb
module = myweb.wsgi:application
socket = 127.0.0.1:8000
master = true
daemonize = /home/myweb/run.log
disable-logging = true
wsgi-file = /home/myweb/myweb/wsgi.py
pidfile=/home/myweb/uwsgi.pid
chdir是django專案所在目錄,socket後面的地址是和上面nginx配置檔案中的地址uwsgi_pass 127.0.0.1:8000對應的,規定nginx和uWSGI之間的通訊埠。daemonize就是日誌檔案的路徑。disable-logging = true 表示不記錄正常資訊,只記錄錯誤資訊。wsgi-file是你django專案根目錄下專案同名目錄中有一個wsgi.py檔案的路徑。pidfile是uwsgi.pid檔案的路徑,這個檔案是uWSGI執行後自動生成的,裡面記錄了uWSGI的程式號,可以用來重啟uWSGI。但是我的uwsgi.pid檔案記錄的程式號老是不對,用不了。
uWSGI基本命令:
啟動:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重啟:uwsgi --reload uwsgi.pid
全部配置好後,重啟nginx和uWSGI,因該就可以用瀏覽器訪問你的專案了。
以下是我部署的django專案,前端基本是用的現成的,一些js和後端是自己寫的。
水平有限如有問題,望指正。
參考文章:
https://blog.csdn.net/qq_41590417/article/details/80509098
相關文章
- 阿里雲部署Django專案(nginx+uWSGI)阿里DjangoNginx
- 使用nginx+uwsgi部署Django專案NginxDjango
- centos8-django專案部署 nginx+uwsgiCentOSDjangoNginx
- 阿里雲伺服器部署django專案阿里伺服器Django
- 阿里雲centos7部署Django專案阿里CentOSDjango
- 把django專案部署到阿里雲伺服器流程Django阿里伺服器
- Djang專案部署阿里雲伺服器(四)之執行Django專案阿里伺服器Django
- 【django輕量級框架】django專案部署到阿里雲伺服器流程Django框架阿里伺服器
- 阿里雲部署nuxt專案阿里UX
- 5.Django專案部署Django
- Linux 下部署Django專案LinuxDjango
- 部署Django到阿里雲伺服器教程Django阿里伺服器
- docker 部署 django + mysql + vue 專案DockerDjangoMySqlVue
- Vue專案打包到django部署VueDjango
- Django筆記四十四之Nginx+uWSGI部署Django以及Nginx負載均衡操作Django筆記Nginx負載
- 如何在阿里雲上部署 Django 應用程式阿里Django
- 使用 uWSGI 和 Nginx 部署 Django 專案NginxDjango
- 在騰訊雲&阿里雲上部署JavaWeb專案(Tomcat+MySQL)阿里JavaWebTomcatMySql
- 騰訊雲伺服器 Django專案部署 傻瓜式部署全流程 (一)伺服器Django
- springBoot專案部署整合阿里雲https證書報錯Spring Boot阿里HTTP
- 阿里雲伺服器部署web專案全過程阿里伺服器Web
- SpringBoot專案部署到阿里雲伺服器全流程Spring Boot阿里伺服器
- Ubuntu Apache下部署Django2專案UbuntuApacheDjango
- Centos7系統部署django專案CentOSDjango
- django專案部署到centos,踩的坑DjangoCentOS
- vue專案部署到阿里雲伺服器(windows - Nginx代理)Vue阿里伺服器WindowsNginx
- vue專案部署到阿里雲伺服器(windows),Nginx代理!Vue阿里伺服器WindowsNginx
- 使用Intellij IDEA快速部署SpringBoot專案到阿里雲伺服器IntelliJIdeaSpring Boot阿里伺服器
- 伺服器(Aliyun)部署Django專案(Ubunto版)伺服器Django
- 寶塔皮膚成功部署Django專案流程Django
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- Django + react + 阿里雲ecs 前後端分離部署上線DjangoReact阿里後端
- springboot部署到阿里雲,配置https,springboot專案同時支援http和https請求,阿里雲配置httpsSpring Boot阿里HTTP
- Jenkins部署碼雲SpringBoot專案JenkinsSpring Boot
- Django學習筆記《一》圖書管理系統專案掛載到阿里雲Django筆記阿里
- 阿里雲Freeswtich部署阿里
- django專案在uwsgi+nginx上部署遇到的坑DjangoNginx
- Windows下使用Apache和mod_wsgi部署django專案WindowsApacheDjango