项目上线部署步骤

第一步:安装虚拟机

安装VMware,地址filehippo.com/download_vm… 而后安装Ubuntu,Ubuntu本身下载html

第二步:建立root用户

安装好Ubuntu以后建立一个root用户,这是超级管理员用户,拥有最大权限。python

sudo passwd root //建立root用户
//而后终端显示Enter new unix password,输入密码按enter再次输入密码便建立了
复制代码

而后更新系统android

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以后须要修改文件,安装vimnginx

sudo apt-get install vim-gtk
复制代码

安装以后web

sudo vim /user/bin/pip
//将原来的
from pip import main
//改为
from pip._internal import main
复制代码

而后安装虚拟环境shell

//安装
sudo pip install virtualenv
//建立虚拟环境目录
mkdir python27env
//进入目录
cd python27env
//建立虚拟环境
virtualenv envName
//进入虚拟环境
cd envName
//激活虚拟环境
source bin/activate
复制代码

这样咱们就能够在虚拟环境中安装相关依赖,若是咱们某个项目须要用到这个虚拟环境,咱们就能够进入这个虚拟环境来执行python manage.py runserverdjango

//进入虚拟环境以后安装相关依赖
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/下建立了启动脚本nginxvim

  • 能够在项目目录同目录下或者项目目录下建立一个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 //须要运行的虚拟环境
touch-reload    = /opt/web/miniboard/reload

master		= true
processes	= 4

chmod-socket 	= 666

env = LANG=en_US.UTF-8
复制代码

uwsgi_params文件参考bash

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就是刚才咱们本身建立的那个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配置文件,咱们在此目录下建立一个projectName.conf进程配置文件:

[program:projectName]
command=/opt/web/sh_project.sh //这个是sh文件的位置,须要你本身建立配置,这里只需保证路径正确就行
user=root
autorestart=true
redirect_stderr=true
startsecs=0
stopwaitsecs=0
autostart=true
stdout_logfile=/var/log/supervisor/androidSync.log
复制代码

在刚才配置supervisor时建立的conf指定的路径下建立一个sh_project.sh文件 里面写入shell命令

#!/bin/sh
ps aux | grep "uwsgi" | grep -v grep| cut -c 9-15|xargs kill -9 //筛选并杀死该进程
cd /opt/py2env/project  //进入项目的虚拟环境
. bin/activate //激活虚拟环境
cd /opt/web/project //在虚拟环境下进入项目目录
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 //重启项目
复制代码