最近因為項目的需求開始正在搭建一個個人網站。在本地完成了項目后端的內容后需要部署到服務器上以供用戶訪問。因為后端使用的是Django框架,就在網上找了很多有關將Django項目部署到網站上的教程。由于本人在網絡這塊屬于小白,原理了解甚少,在一邊參照各種教程一邊實操的過程中碰了不少壁,總算是成功實現(xiàn)…因此寫這篇博客來記錄自己配置的過程,也希望能對正在學習Django的小伙伴提供一些幫助~
本文主要是參考了極客點兒的博客進行配置,是我在網上眾多教程中找到的最清晰的一篇,為原博主瘋狂點贊!?。?/p>
一、云服務器
1.1 購買云服務器
首先搭建一個網站需要一個遠程服務器來運行項目。阿里云有個飛天免費試用計劃,可以免費試用1核2G的云服務器ECS,試用期為3個月,個人用為僅用來學習網站搭建足矣。
試用(或購買)服務器后選擇操作系統(tǒng)等就可以開始使用。這里不建議選Windows系統(tǒng)。本人選擇的是Ubuntu20.04。不同版本的Ubuntu在配置上也有一些區(qū)別,這里建議選擇版本舊一些的如16.04,后面會詳細說明。
1.2 連接云服務器
在阿里云控制臺實例處可以看到自己購買的服務器,一般第一次連接是無法使用WorkBench或SSH登錄的,會提示服務器禁用了密碼登錄的方式。這是因為在服務器SSH配置文件 /etc/ssh/sshd_config
中的 PasswordAuthentication
被設置為 no
。解決方法是通過VNC連接服務器后將上述項修改為 yes 。阿里云官方文檔中也提供了對該問題完整的解決步驟,這里就不再贅述。
如果提示 訪問公網IP地址需要在實例安全組白名單中增加Workbench的服務器白名單 ,則在控制臺的 安全組 -> 配置規(guī)則 -> 入方向
中增加22端口。
22端口是遠程連接端口,因此要通過SSH方式登錄服務器肯定需要這個端口開放。這里可以順便把80(http端口),3306(MySQL)
也設置開放。
二、部署項目環(huán)境
連接好服務器后,我們需要開始在服務器部署項目需要的環(huán)境,安裝一些必要的包。以下是本項目中使用到工具和包。
Python 3.8.1
Django 4.2
Nginx 1.18.0
uWSGI 2.0.21
這里解釋一下各個工具的用途。Django項目部署到服務器的方式有很多種,本項目是基于Django+Nginx+uWSGI
的方式。這種方式的工作原理是將 Nginx 作為服務器最前端來接收 web 的所有請求,統(tǒng)一管理請求。Nginx 把所有靜態(tài)請求自己來處理,將所有非靜態(tài)請求通過 uWSGI 傳遞給 Django,由 Django 來進行處理,從而完成一次 web 請求。
2.1 安裝Python
?
打開終端,輸入以下指令下載Python 3.8.1安裝包,如果是其他版本則要按官方下載鏈接修改,不要選擇3.5以下的!??!
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.3.tgz
然后新建一個安裝目錄:
sudo mkdir -p /usr/local/python3
解壓安裝包:
tar -zxvf Python-3.8.1.tgz
進入解壓后的目錄:
cd Python-3.8.1
配置安裝的目錄:
./configure --prefix=/usr/local/python3
編譯Python 3.8.1的代碼,并安裝:
sudo make install
由于Linux中自帶Python2.7,因此需要在終端建立軟連接將python3
指向Python3.8。
建立軟連接運行的名稱:
sudo ln -s /usr/local/python3/bin/python3.8 /usr/local/bin/python38
sudo ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3
完成以上過程后在命令行輸入python3
后有回顯>>>
就表示安裝成功,進入Python環(huán)境了。
2.2 安裝Django
這個比較簡單,直接pip3 install
就可以了。
pip3 install Django==4.0
2.3 安裝Nginx
使用apt之前可以先更新一下可用軟件包列表和已安裝的包
sudo apt update
sudo apt upgrade
然后install
sudo apt install nginx
安裝完之后可以在本地輸入你的服務器公網IP查看是否顯示Nginx歡迎頁,顯示的話則證明安裝成功。
2.3 安裝uWSGI
執(zhí)行pip install
安裝uWSGI
pip3 install uwsgi
安裝完后可以測試一下,先創(chuàng)建一個test.py
#test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
然后在test.py所在目錄下運行:
uwsgi --http :8000 --wsgi-file test.py
運行結果跟下圖一樣就是正常的啦。
三、配置uWSGI與Django,Nginx之間的通信
3.1 上傳本地Django項目到服務器
首先需要將本地的項目上傳到阿里云服務器上,這里提供兩種方式作為參考:一種是將自己的Django項目上傳到GitHub后再在服務器上git clone
下來;另一種是通過ftp軟件
將本地項目傳輸給服務器。題主原本使用第一種方式但后來發(fā)現(xiàn)git倉庫不能上傳太大的文件(T~T),故改用第二種。
這里我使用的是FileZilla,連接后上傳項目文件即可。
3.2 配置uWSGI
上傳項目文件后,cd
進入項目文件夾的根目錄創(chuàng)建uwsgi.ini
文件。
cd myproject #我的Django項目文件
vi uwsgi.ini
配置uwsgi.ini
內容如下:
[uwsgi]
socket = :8888
chdir = /root/myroject
module = myproject.wsgi
master = true
processes = 4
vacuum = true
socket=:8888
表示指定項目的端口號為8888,chdir
為指定的項目目錄。
這一步在網上很多教程中,wsgi.py
文件的位置都跟我不一樣,不知道是不是因為Django版本的問題。我的項目文件中,wsgi.py
文件是在同名子目錄myproject
下的,所以module處應為myproject.wsgi
。這里show一下我的項目文件結構,有一樣問題的配置文件可以參考這么寫。
myproject/
├── manage.py
├── myproject
│ ├── asgi.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-310.pyc
│ │ └── ...
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── uwsgi.ini
└── ...
之后就是運行uwsgi --ini uwsgi.ini
讀取uwsgi.ini啟動項目。正常運行結果如下:
如果報以下錯誤則需要檢查以下該端口是否已被占用,可以執(zhí)行uwsgi --stop uwsgi.pid
和pkill -f uwsgi -9
關閉進程。
然后我們可以將uWSGI配置為開機自啟。網上一些教程是在/etc/rc.local
下添加開機命令,但Ubuntu在20.04版本已經取消了rc.local
文件,所以這里提供另一種方法設置開機自啟動
首先設置rc-local.service
sudo vi /etc/systemd/system/rc-local.service
內容如下:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
然后激活rc-local.service
sudo systemctl enable rc-local.service
創(chuàng)建rc.local
文件
sudo vi /etc/rc.local
內容如下:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 開機啟動的命令
uwsgi --ini /root/myproject/uwsgi.ini & # 開機自動啟動項目,并在后臺運行
exit 0
保存退出后,給予腳本執(zhí)行權限。
sudo chmod +x /etc/rc.local
這樣開機自啟動就設置好了。
3.3 配置Nginx
首先需要查看一下nginx配置文件,Ubuntu20.04的nginx配置文件為/etc/nginx/sites-available
下的default
,有些版本的Linux系統(tǒng)下配置文件為/etc/nginx/nginx.conf
。
修改配置文件運行:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak #這里先對原來的配置文件進行備份
sudo vi /etc/nginx/sites-available/default
在文件后面添加這段:
server {
listen 80;
server_name xx.xxx.xxx.xx #有域名填域名,沒有就寫自己的公網IP
charset UTF-8;
access_log /var/log/nginx/myweb_access.log;
error_log /var/log/nginx/myweb_error.log;
client_max_body_size 800M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8888; #這里的端口號要與uwsgi.ini中填寫的一樣
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias myproject/static/;
}
}
這里建議直接復制粘貼進去修改,因為這個配置文件對格式檢查比較嚴格。
配置完后重新啟動Nginx:
sudo /etc/init.d/nginx restart
現(xiàn)在在自己的主機或其他設備上的瀏覽器輸入服務器的IP:端口號
,就能正常訪問自己的項目了。文章來源:http://www.zghlxwxcb.cn/news/detail-777783.html
總結
這兩天在完成項目部署的過程中確實是碰了很多壁,加上原先對網絡通信這塊確實不是很了解,查閱了各種資料后對那些配置文件的內容等還是一頭霧水,不懂得背后的原理,報錯也不知道從何解決。好在最后還是一點一點的搞定了。希望我的這篇記錄能夠為同樣正在學習Django的朋友提供一些些幫助吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-777783.html
到了這里,關于將本地Django項目部署到服務器上(Ubuntu20.04)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!