將django專案部屬在Ubuntu+Nginx

系統與Python版本如下

Ubuntu 20.04.1 LTS

Python 3.8


安裝相片地圖程式(https://github.com/jang0820/pmap.git),可以將相片使用相片的GPS標記在地圖上。

最後成品 http://203.68.236.9:8080/map/list/

Step1)建立與啟動Python3的虛擬環境

$ sudo apt install python3-venv

離開root權限,新增虛擬環境map

$ python3 -m venv map

$ .  map/bin/activate


Step2)下載程式

(map) $ git clone https://github.com/jang0820/pmap.git

(map) $ cd pmap


Step3)安裝python所需模組

(map) $ pip3 install -r requirements.txt 

程式pmap的requirements.txt如下

Step4)修改pmap\settings.py

ALLOWED_HOSTS = ['網頁伺服器IP']

檢查pmap目前是否還正常

(map) $   python manage.py check

出現「System check identified no issues (0 silenced).」表示正常。


Step5)新增管理者帳號與新增一般使用者與權限

(map) $   python manage.py createsuperuser


Step6)執行伺服器

(map) $ python manage.py runserver 0.0.0.0:8000

使用瀏覽器瀏覽http://伺服器IP:8000/,正常情況應該可以看到伺服器

不要使用runserver啟用pmap,改用nginx與uWSGI 


Step7)使用Step5所新增使用者上傳圖片,解壓縮與建立縮圖


Step8)建立資料庫內的資料表

(dmojsite) $ python manage.py migrate


Step9)設定uWSGI

編輯設定檔/home/jian/pmap/uwsgi.ini,如下

在map的虛擬環境下

(map) $ pip install wheel

(map) $ pip install uwsgi 

(map) $ cd \home\jian\pmap

(map) $ uwsgi --ini uwsgi.ini

出現spawned表示正常,使用Ctrl+C中斷

如果之前已經存在/tmp/pmap-site.sock與/tmp/pmap-site.pid需要刪除

Step10)使用supervisor啟動uwsgi

(map) $  sudo apt install supervisor

在/etc/supervisor/conf.d/下建立設定檔pmap.conf

pmap.conf如下

使用supervisor啟用uwsgi,等一下nginx會呼叫使用

(dmojsite)$ sudo supervisorctl update

(dmojsite)$ sudo supervisorctl status

如果出現/tmp/pmap-site.pid權限不足,直接刪除/tmp/pmap-site.pid,重新執行「sudo supervisorctl update」看能不能驅動uwsgi

Step17)安裝與設定nginx,使用nginx當成web伺服器,呼叫後方的uwsgi,uwsgi再呼叫django的pmap套件

(map) $    sudo apt install nginx

編輯設定檔/etc/nginx/sites-available/pmap

# sudo nano /etc/nginx/sites-available/pmap

建立超連結sites-enabled/pmap指向sites-available/pmap

$ sudo ln -s /etc/nginx/sites-available/pmap /etc/nginx/sites-enabled/pmap

/etc/nginx/sites-available/pmap的第29行需要檔案uwsgi_params

新增/home/jian/pmap/uwsgi_params,內容如下

測試nginx

$sudo nginx  -t

啟動nginx

$sudo service nginx    start

使用瀏覽器瀏覽http://192.168.134.65:8000就可以看到nginx所啟動的pmap,如下。

附錄

安裝Mysql資料庫

$ apt install mariadb-server libmysqlclient-dev

設定Mysql資料庫,預設root密碼為空白,直接按下Enter,資料庫帳號為dmo,需修改<password>為資料庫密碼。

$ mysql -uroot -p

mariadb> CREATE DATABASE pmap DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

mariadb> GRANT ALL PRIVILEGES ON pmap.* to 'pmap'@'localhost' IDENTIFIED BY '<password>';

mariadb> exit