前言
疫情在家隔離期間,實在無聊,便想着瞭解一下目前網站相關的技術並選擇適合學習並實現的部分實現自己的博客網站。
什麼是網站?
網站也可以理解爲web應用程序,只不過無需用戶下載,只要有網絡,隨時隨地都能訪問。網站由域名、網站空間(服務器,vps)、網站程序、數據庫等組成。域名和網址是對應的,比如http://14.215.177.39/就是百度,但是數字不好記,就發明了域名。沒有域名也可以,那就是使用ip地址訪問。使用域名需要解析,需要向域名註冊商申請。使用域名也需要備案,凡是你使用的主機在中國大陸,那你當前綁定的域名都需要備案(網站ICP備案),指向外國主機或服務器則不需要備案。網站空間就是服務器,網站程序就是源代碼,是程序員的頭髮換來的,數據庫可有可無,如果做靜態網站,不需要數據庫,但如果是網店,12306,博客,論壇一類,就需要使用數據庫進行數據管理和網頁的動態顯示。
建立一個網站需要什麼?
一臺能連接互聯網的主機,一個域名,一個數據庫,一個web工程
如何滿足以上需要?
主機筆者使用的是雲主機,(具體是哪家不講,有廣告嫌疑),可以同時申請域名並綁定到該雲主機;
Web工程使用Django開發(django是使用python開發的一個web框架,使用方便,學習成本低),使用uwsgi+nginx部署;
如果是學習目的,Django可以使用sqlite數據庫。
如何開發網站?
參考:https://www.django.cn/course/course-2.html
這裏涉及到大量的django知識,筆者打算在後續的文章中展開講,一來對於django筆者也是剛開始學,好多地方認知也不準確,二來上面所列教程及其詳細,甚至有最後實現的源碼。所以這兒只放一個筆者實現的效果圖。
如何部署在雲服務器上
第一步:把web工程拷貝到雲主機上
筆者使用的方法是在本地開發好的web工程,使用github,push到遠程倉庫,然後在雲主機上下載github代碼。
第二步:安裝python虛擬環境
sudo apt install virtualenv
進入要建立虛擬環境的目錄,使用命令
virtualenv –python=python3 –no-site-pakeage venv
成功後可激活虛擬環境
source venv/bin/activate
激活成功後,命令行每行前面括號會有你的虛擬環境名稱,筆者是venv。
第三步:安裝環境nginx,uwsgi,django
在虛擬環境下,運行
pip3 install uwsgi
sudo apt-get install nginx
pip3 install django
第四步:測試django
同樣,在虛擬環境下,在web工程根目錄下運行
python manage.py runserver 0.0.0.0.8000
在本地開發時可以直接打開瀏覽器查看結果,在沒有界面的雲主機上只是用來測試web程序所依賴的環境是否配置成功。
第五步:測試uwsgi
Uwsgi命令參數很多,每次都打很費勁,寫一個配置文件uwsgi.ini,放到web工程的根目錄。
[uwsgi]
socket = /home/gwj/socktmp/zqxt.sock # 使用文件轉發時使用,對應的配置文件
# socket = 0.0.0.0:8000 # 對應的配置爲uwsgi_pass 127.0.0.1:8000,推薦使用此方式
# http = 0.0.0.0:8000 # 直接發佈,不使用nginx轉發時使用
chdir = /home/gwj/Pycharm # web工程根目錄
wsgi-file = Pycharm/wsgi.py # 工程名/ wsgi.py
home = /home/gwj/PythonEnv/venv # 虛擬環境根目錄
static-map = /static=/home/gwj/Pycharm/static # 靜態資源目錄
processes = 1
threads = 1
buffer-size = 32768
chmod-socket = 755
vacuum = true
uid=root
gid=root
然後使用uwsgi uwsgi.ini啓動,如果要在後臺啓動,則加-d參數。
第五步:測試nginx
Nginx使用也需要配置
在/etc/nginx/sites-available下建立Pycharm.conf文件,內容如下
server {
listen 80;
server_name localhost www.qianrenzhan.com 127.0.0.1;
charset utf-8;
client_max_body_size 75M;
location /media {
alias /home/ubuntu/Pycharm/media;
}
location /static {
alias /home/ubuntu/Pycharm/static;
}
location / {
uwsgi_pass unix:/home/ubuntu/socktmp/zqxt.sock; # 和uwsgi.ini中對應
include /etc/nginx/uwsgi_params;
}
}
建立軟連接,把放到sites-available 的Pycharm.conf 軟連接到sites-enabled中
sudo ln -s /etc/nginx/sites-available/Pycharm.conf /etc/nginx/sites-enabled/Pycharm.conf
啓動nginx
sudo service nginx reload
然後在本機訪問雲主機地址,如果可以看到你的網站,則說明所以配置成功;如果網站可以看到,但靜態資源無法下載,則需要關注uwsgi.ini文件中的static-map = /static=/home/gwj/Pycharm/static一項,並且在web工程運行django的蒐集靜態資源命令,把靜態資源拷貝到指定的路徑中。如果看不到你的網站,但看到了nginx的歡迎頁面,則說明nginx配置正確,uwsgi配置有問題。如果無法連接,則說明nginx配置有誤。
Web工程操作
蒐集靜態資源
在setting.py文件中,設置STATIC_ROOT和STATICFILES_DIRS。STATIC_ROOT只能有一個路徑,並且不能包含到STATICFILES_DIRS中。
STATIC_ROOT=os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
# os.path.join(BASE_DIR, 'static'), # 不能包含STATIC_ROOT
os.path.join(BASE_DIR, 'blog', 'static'),
os.path.join(BASE_DIR, 'templates', 'static')
)
在運行collectstatic命令過程中,會把STATICFILES_DIRS目錄中的內容拷貝到STATIC_ROOT。
數據庫遷移
生成遷移文件
python manage.py makemigrations
生成數據庫表
python manage.py migrate