項目部署(ubuntu+uwsgi+nginx+supervisor+django)

1、在開發機上的準備工做java

 

一、 確認項目沒有bugpython

二、設置`ALLOW_HOST`爲你的域名,以及ip地址。mysql

四、設置`DEBUG=False`,避免若是你的網站產生錯誤,而將錯誤信息暴漏給用戶。nginx

四、用 cmd 進入項目所在的虛擬環境目錄下,用`pip freeze > requirements.txt`命令將當前環境的包導出到`requirements.txt`文件中,方便在部署的時候安裝。git

五、安裝 git 後,在項目文件所在的目錄下右鍵,打開 「Git Bash Here,再使用 git 命令將項目上傳到 GitHub上(在GitHub上新建一個項目);web

git 命令:https://gitee.com/liaoxuefeng/learn-java/raw/master/teach/git-cheatsheet.pdfsql

1 git init                         # 把這個文件夾變成Git可管理的倉庫;
2 git remote add origin xxx.git        # 關聯遠程的項目,xxx.git爲GitHub新建項目的倉庫地址(HTTPS);
3 git add .                        # 將本地代碼添加到git管理的倉庫中;
4 git commit -m 'first commit'        # 再把項目提交到倉庫;
5 git pull origin master --allow-unrelated-histories    # 將遠程代碼拉到本地進行合併;
6 git push origin master             # 將本地庫的代碼推送到遠程倉庫(即GitHub上)。

 參考博客:http://www.javashuo.com/article/p-orbpxlnn-es.htmlshell

 

 

 2、使用Xshell鏈接虛擬機上的ubuntu_server服務器(安裝服務器:http://www.javashuo.com/article/p-evhumaun-cb.html數據庫

 

一、ubuntu_server配置:django

  • 網絡模式:NET模式;
  • 刷新網絡:/etc/init.d/networking restart;
  • 安裝openssh:apt install openssh-server openssh-client;       
  • 重啓:service ssh restart;
  • 查看IP:ifconfig;

二、在Xshell新建鏈接,IP爲服務器IP地址,在用戶身份驗證中填寫服務器的用戶與密碼,鏈接後在Xshell上操做ubuntu_server;

 

三、修改 apt 源,先複製 cources.list 文件,再使用  vi sources.list  編輯內容,刪除其餘內容,再添加阿里雲的 apt 源;

 1 # 阿里雲源;
 2 deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
 3 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
 4 deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
 5 deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
 6 deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
 7 deb http://mirrors.aliyun.com/ubuntu/ xenial universe
 8 deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
 9 deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
10 deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
11 deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
12 deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
13 deb http://archive.canonical.com/ubuntu xenial partner
14 deb-src http://archive.canonical.com/ubuntu xenial partner
15 deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
16 deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
17 deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
18 deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

 

最後更新源:apt update

 

 

3、在服務器上的準備工做

 

一、安裝好 python :pip install python *(*:版本號)   &   sudo apt install python-pip --reinstall(卸載pip: sudo python -m pip uninstall pip

二、安裝 「virtualenv」 和 「virtualenvwrapper」:

  • pip install virtualenv 
  • pip install virtualenvwrapper
  • 再使用  vim ~/.bashrc  進入文件中,填入如下兩行代碼,保存退出後再運行 source ~/.bashrc 將其添加到環境變量中
    1 export WORKON_HOME=$HOME/.virtualenvs
    2 source /usr/local/bin/virtualenvwrapper.sh
  • 建立虛擬環境:mkvirtualenv django-env(虛擬環境名稱) 

三、安裝`OpenSSH`,方便XShell或者CRT鏈接服務器:

  • sudo apt install openssh-server openssh-client
  • service ssh restart

四、安裝 「MySQL」數據庫和客戶端:apt install mysql-server mysql-client ,

  • apt-get install libmysqld-dev 
  • apt-get install libmysqlclient-dev 

五、安裝時會一塊兒建立 mysql ,而後使用帳號密碼登陸:mysql -uroot -proot,建立相應的數據庫:create database *** charset utf8;(*:與項目的數據庫名一致);而後退出並在虛擬環境中運行:python manage.py migrate , 將遷移文件映射到數據庫中;

而後編輯 mysql.cnf 文件,找到 bind-address = 127.0.0.1 並將其註釋掉;

再登陸進入 mysql 中,使用如下命令受權其它機器能夠鏈接,以便在本地使用 navicate 鏈接服務器端的數據庫,進行數據傳輸,再重啓mysql ;

1 # user 與 password 與數據庫的信息一致;
2 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
3 FLUSH   PRIVILEGES;

 

六、在 navicate 中進行數據傳輸,新建與服務器一致的 MySQL ,再進行數據傳輸;

 

七、安裝 「memcached」:apt install memcached ,

  • 測試:telent 127.0.0.1 11211 

 

八、在Xshell上將項目拉到服務器上:

 

 

 

九、運行服務器查看項目:python manage.py runserver 0.0.0.0:8000

十、在虛擬環境下收集靜態文件:python manage.py collectstatic (後面的 nginx 需用到)

十一、更改項目內容時,先在 git 運行:

  • git add . 
  • git commit -m "修改的內容"
  • git push origin master

  而後在 Xshell 運行:git pull origin master

 

4、安裝uwsgi

1.、uwsgi:是一個應用服務器,用來完成非靜態文件的網絡請求,也可充當靜態文件服務器,但不是強項。uwsgi 是使用python編寫的。安裝: pip install uwsgi ( uwsgi 必須安裝在系統級別的Python環境中,不要安裝到虛擬環境中)。

二、啓動項目uwsgi --http :8000 --module ***.wsgi --vritualenv /root/.virtualenvs/虛擬環境名稱*:當前項目名稱)。如在瀏覽器中訪問到這個頁面,說明`uwsgi`能夠加載項目。

三、可在當前項目的路徑下面,建立一個文件:`項目名+_uwsgi.ini`的文件,並編輯該文件

 

 1 [uwsgi]
 2 
 3 # Django相關的配置
 4 # 必須所有爲絕對路徑
 5 # 項目的路徑
 6 chdir = /srv/zhiliaoketang
 7 # Django的wsgi文件
 8 module = zhiliaoketang.wsgi
 9 # Python虛擬環境的路徑
10 home = /root/.virtualenvs/django-env-py2
11 
12 # 進程相關的設置
13 # 主進程
14 master = true
15 # 最大數量的工做進程
16 processes = 10
17 # socket文件路徑,絕對路徑
18 socket = /srv/zhiliaoketang/zhiliaoketang.sock
19 # 設置socket的權限
20 chmod-socket = 666
21 # 退出的時候是否清理環境
22 vacuum = true

 

而後使用命令 uwsgi --ini zhiliaoketang.ini ,用來啓動項目。

 

 

5、安裝nginx


一、 nginx:是一個 web 服務器。用來加載靜態文件和接收 http 請求。安裝:sudo apt install nginx
二、經常使用命令:

  • 啓動:service nginx start
  • 關閉:service nginx stop
  • 重啓:service nginx restart

三、收集靜態文件:
  靜態文件由 nginx 來服務,而不是django。首先確保在項目的`settings.py`文件中有一個`STATIC_ROOT`配置,該配置指定靜態文件存放在哪一個目錄下。

執行命令: python manage.py collectstatic 來收集全部靜態文件,將這些靜態文件放在指定的目錄下。

1 # 在項目目錄的虛擬環境下運行
2 (django-env-py3) root@li:/srv/xfz# python manage.py collectstatic
1 # settings.py 文件下靜態文件存放路徑;
2 
3 STATIC_URL = '/static/'
4 STATIC_ROOT = os.path.join(BASE_DIR,'front','static_dist')
5 STATICFILES_DIRS = [
6     os.path.join(BASE_DIR,'front','dist'),
7 ]

 

四、在`/etc/nginx/conf.d`目錄下,新建一個文件`touch + 項目名.conf`,而後編輯該文件:

 1 # xfz:我的項目名
 2 upstream xfz{
 3         server unix:///srv/xfz/xfz.sock;
 4 }
 5 
 6 # 配置服務器
 7 server{
 8         # 監聽的端口號
 9         listen 80;
10 
11         # 我的域名
12         server_name 192.168.164.128;
13         charset utf-8;
14 
15         # 文件最大上傳限度
16         client_max_body_size 75M;
17 
18         # 靜態文件訪問的url
19         location /static{
20                 # 靜態文件地址
21                 alias /srv/xfz/front/static_dist;
22         }
23 
24         # 訪問圖片
25         location /image/{
26                 root /usr/xfz/media/;
27                 autoindex on;
28         }
29 
30         # 發送非靜態文件請求到django服務器
31         location / {
32                 uwsgi_pass xfz;
33                 # uwsgi_params 文件地址
34                 include /etc/nginx/uwsgi_params;
35         }
36 }

 

 

 

五、寫完配置文件後,測試配置文件是否設置成功: service nginx configtest 不報錯,說明成功。
六、每次修改完了配置文件,運行: service nginx restart 

 

6、supervisor配置


supervisor:用來管理 uwsgi,能夠在 uwsgi 發生意外的狀況下,會自動的重啓。(nginx:自己是守護進程,會自動重啓)
一、 安裝:pip install supervisor(系統級別的python環境下)
二、 在項目的根目錄下建立一個文件 :`touch + 項目名 + _supervisor.conf`,再建立一個文件夾 「log」;

三、而後編輯新建文件內容:

 1 # supervisor的程序名字
 2 [program:mysite]
 3 # supervisor執行的命令
 4 command=uwsgi --ini zlkt_uwsgi.ini
 5 # 項目的目錄
 6 directory = /srv/zhiliaoketang 
 7 # 開始的時候等待多少秒
 8 startsecs=0
 9 # 中止的時候等待多少秒
10 stopwaitsecs=0 
11 # 自動開始
12 autostart=true
13 # 程序掛了後自動重啓
14 autorestart=true
15 # 輸出的log文件
16 stdout_logfile=/srv/zhiliaoketang/log/supervisord.log
17 # 輸出的錯誤文件
18 stderr_logfile=/srv/zhiliaoketang/log/supervisord.err
19 
20 [supervisord]
21 # log的級別
22 loglevel=info
23 
24 # 使用supervisorctl的配置
25 [supervisorctl]
26 # 使用supervisorctl登陸的地址和端口號
27 serverurl = http://127.0.0.1:9001
28 
29 # 登陸supervisorctl的用戶名和密碼
30 username = admin
31 password = 123
32 
33 [inet_http_server]
34 # supervisor的服務器
35 port = :9001
36 # 用戶名和密碼
37 username = admin
38 password = 123
39 
40 [rpcinterface:supervisor]
41 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

 

四、編輯退出後的運行命令:supervisord -c xfz_supervisor.conf (xfz:我的項目名)
五、如想啓動`uwsgi`,可以使用命令 supervisorctl -c supervisor.conf 進入到管理控制檯,而後執行相關的命令進行管理:

  • status: 查看狀態
  • start program_name:啓動程序
  • restart program_name:從新啓動程序
  • stop program_name:關閉程序
  • reload: 從新加載配置文件
  • quit:退出控制檯

 

 

大概流程圖:

相關文章
相關標籤/搜索