將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