服務器搭建過程記錄 Nginx + uwsgi + Django

服務器搭建過程記錄 Nginx + uwsgi + Django

本文進行的前提:

在本地已完成Django項目調試,然后向服務器遷移
花了一天時間踩坑完成,可以參考一下流程

第一步 Django已完成項目 設置修改

  • settings.py 文件的修改

    //settings.py
    DEBUG = False
    ALLOWED_HOSTS = ['*']
    
    # STATICFILES_DIRS 是在開發(fā)過程中 使用django自帶服務器時  設置的靜態(tài)文件路徑
    # STATIC_ROOT 這個路徑是 執(zhí)行 ./manage.py collectstatic (將每個app中靜態(tài)文件匯總)  后 那些靜態(tài)文件放的路徑  
    # 當放到nginx服務器上時 保留STATIC_ROOT路徑  以方便以后修改
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    # STATICFILES_DIRS = [
    #     os.path.join(BASE_DIR, 'static')
    # ]   
    
  • 在與manage.py同級目錄下 創(chuàng)建project.conf 文件

  • 在配置前 先看下原理

    #首先客戶端請求服務資源,
    #nginx作為直接對外的服務接口,接收到客戶端發(fā)送過來的http請求,會解包壮韭、分析慢显,
    #如果是靜態(tài)文件請求就根據(jù)nginx配置的靜態(tài)文件目錄,返回請求的資源,
    #如果是動態(tài)的請求,nginx就通過配置文件,將請求傳遞給uWSGI持寄;uWSGI 將接收到的包進行處理召边,并轉發(fā)給  wsgi,
    #wsgi根據(jù)請求調用django工程的某個文件或函數(shù)吉挣,處理完后django將返回值交給wsgi派撕,
    #wsgi將返回值進行打包,轉發(fā)給uWSGI睬魂,
    #uWSGI接收后轉發(fā)給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)终吼。
    #*注:不同的組件之間傳遞信息涉及到數(shù)據(jù)格式和協(xié)議的轉換
    
    # project.conf 
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    
    events {
      worker_connections 768;
      # multi_accept on;
    }
    
    http {
      sendfile on;
      tcp_nopush on;
      tcp_nodelay on;
      keepalive_timeout 65;
      types_hash_max_size 2048;
      include /etc/nginx/mime.types;
      default_type application/octet-stream;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
      ssl_prefer_server_ciphers on;
      access_log /var/log/nginx/access.log;
      error_log /var/log/nginx/error.log;
      gzip on;
      gzip_disable "msie6";
      include /etc/nginx/conf.d/*.conf;
      include /etc/nginx/sites-enabled/*;
      
      # 以下需配置
      server {
          listen         80;
          server_name    www.19950314nina.top;   # 你的服務器的域名地址
          charset UTF-8;
          access_log      /var/log/nginx/myweb_access.log; 
          error_log       /var/log/nginx/myweb_error.log;
      
          client_max_body_size 75M;
      #如果是動態(tài)的請求,nginx將請求傳遞給uWSGI;uWSGI將接收到的包進行處理氯哮,并轉發(fā)wsgi际跪,
          location / {
             include uwsgi_params;
             uwsgi_pass 127.0.0.1:8000;    # 注意  這個8000端口需要和后面的 uwsgi.ini 端口一致
             uwsgi_read_timeout 10;    # 時間建議可以長一些  否則有時會返回504
          }
         #如果是靜態(tài)文件請求 根據(jù)nginx配置的靜態(tài)文件目錄,返回請求的資源蛙粘,
          location /static {
              expires 30d;
              autoindex on;
              add_header Cache-Control private;
              alias /home/mrg/PycharmProjects/myblog/static/; # 你的靜態(tài)文件路徑  即之前在setting.py 設置的 STATIC_ROOT 的路徑
         }
       }
    }
    
  • 在與manage.py同級目錄下 創(chuàng)建projectname_uwsgi.ini文件

    [uwsgi]
    socket = :8000   # 注意 需要和nginx的配置文件端口一致
    chdir=/home/mrg/PycharmProjects/myblog  # django項目目錄絕對路徑
    module= myblog.wsgi       # wsgi.py在項目中的相對路徑 
    master = true         
    processes=2
    threads=2
    max-requests=2000
    chmod-socket=664
    vacuum=true
    daemonize = /home/mrg/PycharmProjects/myblog/uwsgi.log # uwsgi日志存儲路徑 可以不寫  
    
    #簡易版本
    [uwsgi]
    socket= :8000
    chdir = /home/mrg/PycharmProjects/myblog  #django項目目錄絕對路徑
    module = myblog.wsgi
    master = true
    processes = 4
    vacumm = true
    
  • 最后

    • 去nginx配置文件的根目錄拷貝mime.types(/etc/nginx/mime.types),以及uwsgi_params復制到工程目錄和project.conf放在一起垫卤。

第二步 使用git

對我來說 使用git 比較方便

也可以選擇其他方式上傳文件到服務器

  • Github創(chuàng)建一個空倉庫

  • 在項目目錄下執(zhí)行以下步驟

    git init   #初始化項目
    git remote add origin 遠程倉庫地址   # 鏈接遠程倉庫
    source ~/env/bin/activate    # 進入虛擬環(huán)境  這個是寫django項目的環(huán)境
    pip freeze > requirements.txt   # 生成依賴文件
    git add .  # 添加代碼文件
    git commit -m '初始版本'  #代碼提交到本地庫
    git push origin master   # 代碼推送到倉庫
    

    如果出現(xiàn)代碼沖突情況

    #如果希望保留生產(chǎn)服務器上所做的改動,僅僅并入新配置項, 處理方法如下:
    git stash
    git pull
    git stash pop
    
    #如果希望用代碼庫中的文件完全覆蓋本地工作版本. 方法如下:
    git reset --hard
    git pull
    
  • 使用ubuntu自帶的ssh 工具登陸 服務器

    ssh username@10.31.125.165
    

    順利連上之后 創(chuàng)建用戶(如果已經(jīng)有了就不需要重復了)

    # 在 root 用戶下運行這條命令創(chuàng)建一個新用戶,mrg 是用戶名
    # 選擇一個你喜歡的用戶名出牧,不一定非得和我的相同
    root@localhost:~# useradd -m -s /bin/bash mrg
    
    # 把新創(chuàng)建的用戶加入超級權限組
    root@localhost:~# usermod -a -G sudo mrg
    
    # 為新用戶設置密碼
    # 注意在輸密碼的時候不會有字符顯示穴肘,不要以為鍵盤壞了,正常輸入即可
    root@localhost:~# passwd mrg
    
    # 切換到創(chuàng)建的新用戶
    root@localhost:~# su  mrg
    
    # 切換成功舔痕,@符號前面已經(jīng)是新用戶名而不是 root 了
    mrg@localhost:~$
    

第三步 環(huán)境配置

  • 安裝常見的庫
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install man gcc  make sudo lsof ssh openssl tree vim dnsutils iputils-ping net-tools psmisc sysstat curl telnet traceroute wget libbz2-dev libpcre3 libpcre3-dev libreadline-dev libsqlite3-dev libssl-dev zlib1g-dev git mysql-server mysql-client zip  p7zip mycli
  • 創(chuàng)建虛擬環(huán)境

    - sudo apt-get python3-pip
    - sudo pip3 install virtualenv  
    - sudo virtualenv -p python3 env_name  創(chuàng)建虛擬環(huán)境
    - source ~/env_name/bin/active    開啟虛擬環(huán)境
    - pip install uwsgi  安裝uwsgi
    - deactivate  退出虛擬環(huán)境
    - sudo ufw allow 80   開啟80端口
    
    
  • mysql數(shù)據(jù)庫修改字符集

    修改mysql的配置文件
    
    cd /etc/mysql/mysql.conf.d
    
    sudo cp mysql.cnf  mysql.cnf.bak
    
    sudo vim mysql.cnf
    
    在[mysqld]下增加一句:
    
    character_set_server = utf8
    
    保存并重啟服務
    
    sudo systemctl restart mysql.service  #重啟服務
    
  • 安裝Nginx

    sudo apt-get install nginx  #安裝
    sudo /etc/init.d/nginx start[or stop or restart]  #啟動,關閉,重啟
    
  • 從git倉庫拉代碼

git clone  倉庫地址    # 將項目clone下來
# cd 到項目根目錄
source ~/env/bin/activate    # 進入虛擬環(huán)境  這個就是之前創(chuàng)建的虛擬環(huán)境
pip install -r requirements.txt   # 安裝依賴環(huán)境

第四步 一些設置的確認及修改

  • 數(shù)據(jù)庫的一些操作

    # 創(chuàng)建用戶
    grant all on *.* to 'django'@'%' identified by 'djangopwd';
    # 刷新使用戶生效
    flush privileges;
    # 創(chuàng)建對應的表
    create database project
    
  • django數(shù)據(jù)庫遷移,以及靜態(tài)文件夾的生成

    #cd到項目目錄下
    ./manage.py makemigrations  # 生成遷移文件
    ./manage.py migrate  # 遷移
    ./manage.py collectstatic  # 生成靜態(tài)文件夾
    
  • 確認項目目錄下配置文件中的路徑是否和服務器上對應的路徑一致

    • 主要為以下需要確認的配置文件

      1.settings.py 
      
      2.project.conf
      alias /home/mrg/PycharmProjects/myblog/static/; # 你的靜態(tài)文件路徑  即之前在setting.py 設置的 STATIC_ROOT 的路徑
      
      3.projectname_uwsgi.ini
      chdir=/home/mrg/PycharmProjects/myblog  # django項目目錄絕對路徑
      
      主要是2,3 兩個文件中的路徑是否設置正確
      
  • 確認無誤后

    # cd 到項目目錄下
    uwsgi --ini project_uwsgi.ini   
    
    nginx -c /home/mrg/PycharmProjects/myblog/project.conf    # 注意該路徑必須為絕對路徑
    
    

到這里基本上已經(jīng)配置完成了,你也可以在網(wǎng)頁上打開你的頁面了

-----------------------------------------------------------------------------------------------------------------------------

  1. 如果啟動時就報錯评抚,查看終端信息,解決錯誤伯复。
    如果終端沒有報錯慨代,但是瀏覽時出現(xiàn)500、502等錯誤啸如,就去項目目錄查看nginx日志和uWSGI日志侍匙,解決錯誤。
  2. 在本文中叮雳,使用了virtualenv開發(fā)環(huán)境,但只是用單獨的一個conf文件想暗,在nginx上部署了一個工程,沒有說明部署多個工程的問題,也沒有說明使用supervisor來管理進程等帘不。請根據(jù)個人愛好和需要去實踐擴展说莫。

后記

獻給和我一樣懵懂中不斷汲取知識,進步的人們寞焙。


霓虹閃爍储狭,但人們真正需要的互婿,只是一個可以照亮前路的燭光

參考博客:

https://blog.csdn.net/c465869935/article/details/53242126

https://www.cnblogs.com/fnng/p/5268633.html

https://www.zmrenwu.com/post/20/

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辽狈,隨后出現(xiàn)的幾起案子慈参,更是在濱河造成了極大的恐慌,老刑警劉巖稻艰,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懂牧,死亡現(xiàn)場離奇詭異,居然都是意外死亡尊勿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門畜侦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來元扔,“玉大人,你說我怎么就攤上這事旋膳∨煊铮” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵验懊,是天一觀的道長擅羞。 經(jīng)常有香客問我,道長义图,這世上最難降的妖魔是什么减俏? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮碱工,結果婚禮上娃承,老公的妹妹穿的比我還像新娘。我一直安慰自己怕篷,他們只是感情好历筝,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廊谓,像睡著了一般梳猪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒸痹,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天春弥,我揣著相機與錄音,去河邊找鬼电抚。 笑死惕稻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蝙叛。 我是一名探鬼主播俺祠,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜘渣?” 一聲冷哼從身側響起淌铐,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔫缸,沒想到半個月后腿准,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡拾碌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年吐葱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片校翔。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡弟跑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出防症,到底是詐尸還是另有隱情孟辑,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布蔫敲,位于F島的核電站饲嗽,受9級特大地震影響,放射性物質發(fā)生泄漏奈嘿。R本人自食惡果不足惜貌虾,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望指么。 院中可真熱鬧酝惧,春花似錦、人聲如沸伯诬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盗似。三九已至哩陕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赫舒,已是汗流浹背悍及。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留接癌,地道東北人心赶。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像缺猛,于是被迫代替她去往敵國和親缨叫。 傳聞我的和親對象是個殘疾皇子椭符,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容