ubuntu18+uwsgi+nginx部署django項目


更新系統軟件源

  sudo apt-get update

pip3安裝

  sudo apt install python3-pip

安裝virtualenvwrapper

  pip3 install virtualenvwrapper

修改.bashrc,最后面添加以下代碼:

  sudo vim ~/.bashrc

  export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

  source /usr/local/bin/virtualenvwrapper.sh

重新加載配置

  source ~/.bashrc

 

創建虛擬環境

  mkvirtualenv 虛擬環境名

進入虛擬環境

  workon 虛擬環境名

退出虛擬環境

  deactivate

 

安裝mysql

  sudo apt-get install mysql-server

 

安裝mysql驅動
  sudo apt-get install libmysqlclient-dev

 

設置mysql允許遠程訪問,方便使用navicat導入數據.首先編輯文件/etc/mysql/mysql.conf.d/mysqld.cnf

  sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  注釋掉bind-address = 127.0.0.1: #允許遠程連接

 

進入mysql,修改root密碼

  mysql>alter user 'root'@'localhost' identified with mysql_native_password by '123456';

 

 

 

創建普通用戶

  mysql>create user 'username'@'%' IDENTIFIED BY 'password';

 

給普通用戶賦權

  mysql>grant all on *.* to username@'%';

 

刷新

  mysql>flush privileges;

 

退出

  mysql>exit

 

重啟mysql,如果遠程連接失敗報2003可能是服務器沒添加安全組

  service mysql restart

 

安裝redis

  sudo apt-get install redis-server

 

如果安裝不了報這個錯的:

 

Job for redis-server.service failed because a timeout was exceeded.
See "systemctl status redis-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript redis-server, action "start" failed.
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; disabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: timeout) since Fri 2019-11-22 15:07:07 CST; 10ms ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)

Nov 22 15:07:07 haha systemd[1]: redis-server.service: Start operation timed out. Terminating.
Nov 22 15:07:07 haha systemd[1]: redis-server.service: Failed with result 'timeout'.
Nov 22 15:07:07 haha systemd[1]: Failed to start Advanced key-value store.
dpkg: error processing package redis-server (--configure):
 installed redis-server package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 redis-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

 

1.編輯/etc/redis/redis.conf,將bind 127.0.0.1后面的::1去掉

2.執行命令:

    cd /var/lib/dpkg

    sudo mv info info.bak

    sudo mkdir info

3.重新安裝redis-server

 

 ---------------------redis配置根據自己需求考慮是否配置-----------------------

修改redis配置

  使用redis的訪問賬號

  sudo vi /etc/redis/redis.conf

  #取消注釋requirepass

  requirepass 密碼

 

允許遠程訪問

  #注釋bind

  # bind 127.0.0.1

重啟redis

  sudo /etc/init.d/redis-server restart

 

桌面創建新目錄Project

  mkdir Project

 

在項目中創建項目依賴包文件

  pip freeze > package.txt

 

在本地上傳項目到服務器Project,或者進入Project使用git克隆

  scp -r 本地項目目錄  root@服務器IP:/root/Project

  git clone 項目地址

 

安裝依賴包

  pip install -r package.txt

 

進入項目修改settings文件

  將mysql賬號密碼修改成服務器的

  修改ALLOWED_HOSTS = ['*']

 

# 測試之前先將項目用到數據導入數據庫,不然肯定報錯

測試能否正常運行,然后瀏覽器訪問服務器地址

  python3 manage.py runserver 0.0.0.0:80

 

安裝uwsgi

  sudo pip3 install uwsgi

 

在manage.py同級目錄下創建uwsgi.ini文件

  vim uwsgi.ini

 

編輯內容如下

[uwsgi] #如果單獨使用uwsgi來部署Django項目時,就用這一行。 http=0.0.0.0:80 #如果使用nginx+uwsgi來部署Django項目時,就用這行。 # socket=127.0.0.1:8080 # 和nginx連接的端口 #你項目的完整路徑。 chdir=/root/Project/MyProject -----------修改 #給socket文件賦權限,這里不用管。 # chmod-socket=664 #啟用主線程。 master=true processes=4 threads=2
#加載靜態資源
static-map=/static=/home/Project/static ----------------修改
# 日志文件
logto=uwsgi.log
# 進程id
pidfile=uwsgi.pid
# 修改project為你的項目名
module=project.wsgi:application ------------修改
HOME=/root/.virtualenvs/django_env/bin/ ----------------修改
PYTHON=
/root/.virtualenvs/django_env/bin/python ---------------修改成自己Python的路徑
 
        

 

保存退出后啟動uwsgi,如果報錯請查看日志文件

  uwsgi --ini uwsgi.ini 

如果啟動uwsgi訪問沒有問題再繼續配置nginx,不然出錯不好找。

 

安裝nginx

  sudo apt-get install nginx

 

進入/etc/nginx/備份nginx.conf

  sudo cp nginx.conf nginx.conf.bak

刪除nginx.conf,重新創建nginx.conf,內容如下:

  

events { worker_connections 1024; # 不用管 } http{
include /etc/nginx/mime.types; server { listen
80; #這個端口用來監聽瀏覽器的請求。 server_name 0.0.0.0; # 不用管,如果有域名可以填上域名。 charset UTF-8; #日志文件。如果nginx出現問題,都可以通過日志文件來查錯。 access_log /var/log/nginx/MyProject_access.log; error_log /var/log/nginx/MyProject_error.log; client_max_body_size 75M; location / { include uwsgi_params; # 使用uwsgi服務器。 uwsgi_pass 127.0.0.1:8080; ---------修改成和uwsgi的socket一樣 # 把瀏覽器發來的請求轉發到8080端口,而uwsgi也正在監聽8080端口,所以就實現了nginx與uwsgi的通信。 uwsgi_read_timeout 30; #鏈接超時時間 } location /static/{ # 處理靜態文件,處理鏈接是以/static/開頭的請求。 alias /root/DjangoProject/static/; # 項目靜態文件的絕對路徑。 ---------------修改項目靜態文件路徑 } } }

 


最后

修改uwsgi.ini文件,把http=0.0.0.0:80注釋掉,使用socket=127.0.0.1:8080

輸入:uwsgi -d --ini uwsgi.ini    # 啟動uwsgi服務器。-d表示在后台運行。這樣就不會占用當前窗口了。

輸入:/etc/init.d/nginx start     # 啟動nginx

瀏覽器訪問

重啟命令:

  uwsgi --reload uwsgi.ini

  nginx -s reload

 

查看端口:netstat -ntulp |grep 80

查看進程:ps -aux|grep uwsgi

殺死進程:kill -9 80

 

 

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM