Django學習路線之將項目部署到阿里雲服務器

Django雖然沒有講完,但是基礎部分已經講完了,根據前四篇文章:

再加上這篇文章,您已經可以自己完成一個簡單的Django項目了。但是,項目做出來是需要別人訪問並使用的,因此還需要部署項目。

這篇文章是基於CentOS + nginx + uwsgi 的部署方法。

下面是四大步驟:

  1. 生產環境部署準備
  2. 阿里雲部署安裝必要的軟件
  3. 上傳並啓動項目
  4. 配置Nginx以及uwsgi

在這裏插入圖片描述

1. 生產環境部署準備

爲什麼要用雲服務器部署?

像這樣查到的ip地址,是動態變化的,可能重啓一下路由就變了:
在這裏插入圖片描述
我們是通過IP地址訪問網站的,而IP地址一變,就訪問不到了,而用雲服務器能固定IP

購買ECS雲服務器

進入阿里雲購買一臺ECS雲服務器,配置根據自己的需求進行選擇,買的過程就不多說了,阿里雲的產品文檔寫的都挺清楚的,系統選擇CentOS,當然選擇Ubuntu也是可以的,但是比較常用的還是CentOS

下面是已經購買好的ECS雲服務器:
在這裏插入圖片描述
如果您是第一次使用雲服務,還需要重置實例密碼,具體操作可以查看阿里雲的產品文檔:
在這裏插入圖片描述
在這裏插入圖片描述

配置安全組規則

新建一個安全組規則,點擊快速添加:
在這裏插入圖片描述

開放必要的端口:
在這裏插入圖片描述
爲什麼要配置安全組呢?

安全組負責管理是否放行來自公網或者內網的訪問請求。
爲安全起見,安全組入方向大多采取拒絕訪問策略。

因此,如果不配置安全組,可能無法遠程連接數據庫等

通過Xshell測試連接雲服務器

剛剛已經開放了端口22,下面我們就用Xshell訪問服務器:
在這裏插入圖片描述
點擊同意並保存:
在這裏插入圖片描述
這時輸入系統的賬戶和密碼:
在這裏插入圖片描述
這樣就算連接成功了:
在這裏插入圖片描述

2. 阿里雲部署安裝必要的軟件

安裝Python3

CentOS 8.1 已經預先安裝了Python3:
在這裏插入圖片描述
但是老版本只安裝了Python2,如果你用的是老版本,那就需要手動安裝Python3

1.安裝依賴包

yum install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

2.下載Python源碼

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
tar -xzvf Python-3.7.3.tgz -C /tmp
cd /tmp/Python-3.7.3

3.把Python3.7安裝到 /usr/local目錄

./configure --prefix=/usr/local
make
make altinstall  # 這一步比較耗時

4.更改/usr/bin/python鏈接

ln -s /usr/local/bin/python3.7 /usr/bin/python3
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

安裝maridb

mariadb跟MySQL是一樣的,centos中已經集成了,安裝非常簡單

1.安裝命令

sudo yum install mariadb-server

在這裏插入圖片描述
安裝好後:
在這裏插入圖片描述

2.啓動、重啓

sudo systemctl start mariadb
sudo systemctl restart mariadb

開啓數據庫服務:
在這裏插入圖片描述
然後也可以show databases查看數據庫,最後按Ctrl+C退出

下面我們試一下在本地連接一下服務器裏的數據:
在這裏插入圖片描述
測試連接時是失敗的,失敗的原因是我們還需要綁定一下端口

3.設置安全規則,配置MySQL端口

在根目錄下:

vim /etc/my.cnf

進入後:
在這裏插入圖片描述
輸入 i 進入編輯模式:
在這裏插入圖片描述

添加兩行:

[mysqld]
bind-address = 0.0.0.0

在這裏插入圖片描述

按ESC退出編輯模式,輸入:wq保存並退出

重啓服務:

sudo systemctl restart mariadb

然後再進入數據庫:
在這裏插入圖片描述

4.設置外部ip可以訪問

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

如下圖所示:
在這裏插入圖片描述
這時回到SQLyog測試連接:
在這裏插入圖片描述
可以看到連接成功了,密碼是剛剛的123456

這裏說一句,爲了演示方便,所以我設置了一個簡單的密碼,但是在實際項目中,密碼應該複雜些,否則很危險

來show databases:
在這裏插入圖片描述
和本地查看的結果是一樣的:
在這裏插入圖片描述

安裝redis

yum install redis
service redis start

在這裏插入圖片描述
然後開啓redis服務:在這裏插入圖片描述

安裝Nginx

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx

在這裏插入圖片描述

安裝virtualenvwrapper

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
yum install python-setuptools python-devel
pip install virtualenvwrapper

3. 上傳並啓動項目

將項目所用到的本地數據庫導出

先把本地的數據庫文件導出:
在這裏插入圖片描述
在這裏插入圖片描述

將導出的數據庫上傳至服務器

下面我們把在本地導出的數據庫導入服務器:
在這裏插入圖片描述
在這裏插入圖片描述
現在再來執行以下show databases:
在這裏插入圖片描述
查看裏面的數據表:
在這裏插入圖片描述
查表:
在這裏插入圖片描述
這就是上一篇文章裏用到的數據表

使用FileZilla上傳項目文件

如下圖所示連接服務器:
在這裏插入圖片描述

成功連接後:
在這裏插入圖片描述
選中需要上傳的項目,右鍵點擊上傳即可:
在這裏插入圖片描述
成功上傳:
在這裏插入圖片描述
回到Xshell,看一下文件有沒有成功上傳:
在這裏插入圖片描述

啓動項目

還記得前幾篇文章裏講的方法嗎:

python3 manage.py runserver 0.0.0.0:8000

這裏我們直接運行是會報錯的,因爲我們還有一些資源庫沒有安裝:
在這裏插入圖片描述
下面我們把這些庫都裝一下,另外,我在安裝mysqlcilent時出了點問題,這時我們先執行這一條命令:

yum install python3-devel mariadb-devel -y

在這裏插入圖片描述
然後再:

pip3 install mysqlclient

在這裏插入圖片描述
安裝成功!啓動項目:
在這裏插入圖片描述
這時咱們來訪問一下:
在這裏插入圖片描述
這時我們要回到settings.py文件:
在這裏插入圖片描述
將ALLOWED_HOSTS改成*:

ALLOWED_HOSTS = ['*']

另外,正式上線的話,DEBUG = True應該也改一下

修改好以後,再來運行一下項目:
在這裏插入圖片描述
這時就可以正常訪問了!

4. 配置Nginx以及uwsgi

剛剛已經成功把項目跑起來了,但是那樣的方式其實並不是特別好,在訪問時需要輸入端口號,不安全

接下來我們通過使用uwsgi的方式來跑項目

安裝uwsgi

pip3 install uwsgi

在這裏插入圖片描述
安裝的過程中,可能會有一點慢

測試uwsgi

uwsgi --http :8000 --module django_db_demo.wsgi

出現下面的界面是正常的:
在這裏插入圖片描述
再來訪問一下網站:
在這裏插入圖片描述

配置Nginx

先在項目的目錄下新建一個名爲conf的文件夾,再在conf這個文件下新建兩個目錄,分別是nginx和uwsgi:
在這裏插入圖片描述
在nginx下新建一個uc_nginx.conf文件並在裏面添加以下內容:

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 101.201.181.229;     # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias /root/logic_online/media;  # 指向django的media目錄
}

location /static {
    alias /root/logic_online/static; # 指向django的static目錄
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

這裏要注意的是,server_name要改成自己的域名或IP

然後再在uwsgi這個目錄下新建uwsgi.ini配置文件,並添加如下內容:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /root/django_db_demo
# Django's wsgi file
module          = django_db_demo.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
virtualenv = /root/.virtualenvs/django_db_demo

#logto = /tmp/mylog.log

如果不用虛擬環境,後面那塊可以不寫:

  • chdir:表示需要操作的目錄,也就是項目的目錄
  • module:wsgi文件的路徑
  • processes:進程數
  • virtualenv:虛擬環境的目錄

然後將這個conf文件夾上傳至服務器:
在這裏插入圖片描述
在用之前,我們先來改一個文件:

vim /etc/nginx/nginx.conf

在這裏插入圖片描述
將nginx改成root

重啓Nginx服務:

sudo systemctl restart nginx

將改配置文件加入到Nginx的啓動配置文件中

sudo ln -s 你的目錄/logic_online/conf/nginx/uc_nginx.conf  /etc/nginx/conf.d/

當然也可以直接找到這個文件,然後用cp命令複製過去:

cp uc_nginx.conf /etc/nginx/conf.d/

執行完以後記得重啓Nginx服務:

sudo systemctl restart nginx

接下來進入項目所在目錄,並執行以下命令即可:

uwsgi yourfile.ini

在這裏插入圖片描述
這時就不需要輸入端口號了:
在這裏插入圖片描述
到這裏,Django項目就全部部署結束了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章