第一步:安裝虛擬機
安裝VMware,地址https://filehippo.com/download_vmware-workstation-pro/
然后安裝Ubuntu,Ubuntu自己下載
第二步:創(chuàng)建root用戶
安裝好Ubuntu之后創(chuàng)建一個root用戶,這是超級管理員用戶,擁有最大權限。
sudo passwd root //創(chuàng)建root用戶
//然后終端顯示Enter new unix password,輸入密碼按enter再次輸入密碼便創(chuàng)建了
然后更新系統(tǒng)
sudo apt-get update
第三步:配置ssh
- 首先安裝ssh服務器
$ sudo apt-get install openssh-server - 修改配置文件
$ su - - 然后
vim /etc/ssh/sshd_config - 修改一下內容
#Authentication:
LoginGraceTime 120
#PermitRootLogin without-password
PermitRootLogin yes
StrictModes yes
- 重啟ssh服務
service ssh restart - 通過ifconfig查看ip地址
- 下載bitvise ssh client就可以通過ip地址連接到虛擬機
第四步:下載安裝python以及相關依賴
sudo apt-get -y install libxml2 libxml2-dev python-dev
sudo apt-get install python-pip
//升級pip
pip install --upgrade pip
升級pip之后需要修改文件,安裝vim
sudo apt-get install vim-gtk
安裝之后
sudo vim /user/bin/pip
//將原來的
from pip import main
//改成
from pip._internal import main
然后安裝虛擬環(huán)境
//安裝
sudo pip install virtualenv
//創(chuàng)建虛擬環(huán)境目錄
mkdir python27env
//進入目錄
cd python27env
//創(chuàng)建虛擬環(huán)境
virtualenv envName
//進入虛擬環(huán)境
cd envName
//激活虛擬環(huán)境
source bin/activate
這樣我們就可以在虛擬環(huán)境中安裝相關依賴,如果我們某個項目需要用到這個虛擬環(huán)境,我們就可以進入這個虛擬環(huán)境來執(zhí)行python manage.py runserver
//進入虛擬環(huán)境之后安裝相關依賴
pip install django==1.11.13 .......
pip install uwsgi
第五步: 安裝nginx
//安裝依賴
sudo apt-get -y install libpcre3 libpcre3-dev zlib1g-dev software-properties-common
sudo apt-get -y install nginx
注:下面是nginx相關說明,僅供參考。
所有的配置文件都在/etc/nginx下,并且每個虛擬主機已經安排在了/etc/nginx/sites-available下
啟動程序文件在/usr/sbin/nginx
日志放在了/var/log/nginx中,分別是access.log和error.log
并已經在/etc/init.d/下創(chuàng)建了啟動腳本nginx
- 可以在項目目錄同目錄下或者項目目錄下創(chuàng)建一個conf文件,文件內容參考
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /opt/web/miniboard/miniboard/static;
}
location / {
uwsgi_pass unix:///var/run/miniboard.sock;
include /opt/web/miniboard/uwsgi_params; //確定項目根目錄下有這個文件
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 確保我們的項目目錄下有uwsgi_params 和uwsgi.ini文件
uwsgi.ini文件參考
[uwsgi]
socket = /var/run/miniboard.sock
chdir = /opt/web/miniboard //項目目錄
module = miniboard.wsgi:application
home = /opt/py2env/miniboard //需要運行的虛擬環(huán)境
touch-reload = /opt/web/miniboard/reload
master = true
processes = 4
chmod-socket = 666
env = LANG=en_US.UTF-8
uwsgi_params文件參考
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
- 這樣我們就可以將項目跟nginx軟連接了
sudo ln -s /opt/web/nginx.conf /etc/nginx/sites-enabled/
// /opt/web/nginx.conf就是剛才我們自己創(chuàng)建的那個conf文件,不是nginx目錄下的conf
//檢查一下無誤
sudo nginx -t
這樣我們就可以通過 uwsgi --ini uwsgi.ini來運行服務器而不是python manage.py runserver
最后一步: 通過supervisor來進行進程管理
- 安裝
apt- get install supervisor
安裝成功后,會在/etc/supervisor目錄下,生成supervisord.conf配置文件。
conf基本不用修改
進程配置會讀取/etc/supervisor/conf.d目錄下的*.conf配置文件,我們在此目錄下創(chuàng)建一個projectName.conf進程配置文件:
[program:projectName]
command=/opt/web/sh_project.sh //這個是sh文件的位置,需要你自己創(chuàng)建配置,這里只需保證路徑正確就行
user=root
autorestart=true
redirect_stderr=true
startsecs=0
stopwaitsecs=0
autostart=true
stdout_logfile=/var/log/supervisor/androidSync.log
在剛才配置supervisor時創(chuàng)建的conf指定的路徑下創(chuàng)建一個sh_project.sh文件
里面寫入shell命令
#!/bin/sh
ps aux | grep "uwsgi" | grep -v grep| cut -c 9-15|xargs kill -9 //篩選并殺死該進程
cd /opt/py2env/project //進入項目的虛擬環(huán)境
. bin/activate //激活虛擬環(huán)境
cd /opt/web/project //在虛擬環(huán)境下進入項目目錄
uwsgi --ini uwsgi.ini //啟動項目
給文件賦予權限
chmod +x /opt/web/sh_projectname.sh
更新一下
supervisorctl update projectName
//這里的projectName要跟剛才的配置文件里面的[program:projectName]一致
- 配置好之后,我們便可以通過supervisor來進行進程管理
supervisorctl start project //啟動項目
supervisorctl stop project //暫停目錄
supervisorctl restart project //重啟項目