centos + uwsgi+nginx部署django项目

阿里云服务器部署django项目

一:购买云服务器并连接

1.购买阿里云服务器(centos)后,给的一个公共IP

2.XShell连接此IP—>用户名root—>public key

此时不使用public key,而使用密码的方式,应该做如下操作:
1. 回到阿里云界面,点击更多,找到密码/密钥,点击修改远程连接密码
2. 点击重置密码,重置后,重启阿里云服务,强制重启	

3.回到XShell,输入密码,连接阿里云服务

Welcome to Alibaba Cloud Elastic Compute Service!
显示上述即成功连接

二:部署项目代码

centos + uwsgi+nginx部署django项目

1.安装python3.6
提前安装好系统依赖包:
centos: 
    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++  openssl-devel libffi-devel python-devel mariadb-devel
ubuntu:
   sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libmysqlclient-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

1. 获取
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar -xzvf Python-3.6.2.tgz -C  /tmp
cd  /tmp/Python-3.6.2/

2. 把Python3.6安装到 /usr/local 目录
./configure --prefix=/usr/local
make
make altinstall

3. 更改/usr/bin/python链接
ln -s /usr/local/bin/python3.6 /usr/bin/python3
2.安装maridb和redis
注:maridb即MySQL
1. 安装
    sudo yum install mariadb-server
    
2. 启动, 重启
    sudo systemctl start mariadb
    sudo systemctl restart mariadb

3. 设置bind-ip
    vim /etc/my.cnf
    在 [mysqld]:
        下面加一行
        bind-address = 0.0.0.0

4. 设置外部ip可以访问
    先进入mysql才能运行下面命令:
        mysql 直接进入就行
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    刷新权限后,再次访问。---->mysql -uroot -p
    				  ----->Enter Password:123456
    重新启动maridb   ----->sudo systemctl restart mariadb
    
    

5. 设置阿里云的对外端口
    注意:此时主机的navicat还连接不了该数据库。
    原因:阿里云好多端口并未对外开放,可以在阿里云实力列表中设置。
    设置:打开实例列表,点击更多,找到网络和安全组,点击安全组配置,点击配置规则,
    	进去后点击快速创建规则,此时在弹出的界面中选中所有的常用端口。
    	最下方有个授权对象,点击教我设置,直接选中案例四(只允许实例访问外部特定IP地址)
    	中的授权对象,复制过去。同时也可以自定义端口:8000/8000,点击保存。
    	此时在点击navicat的连接测试,显示成功!

6. 安装mysqlclient出问题
    centos 7:(依赖中安装过python-devel mariadb-devel等)
        yum install python-devel mariadb-devel -y
        
    ubuntu:
        sudo apt-get install libmysqlclient-dev

    然后:(执行此条命令)
        pip install mysqlclient
7.安装redis
       yum install redis
       启动redis:service redis start
       查看进程:ps aux|grep redis
       进入redis:redis-cli
3.安装nignx
官网:  https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7
1.sudo yum install epel-release
2.sudo yum install nginx
3.sudo systemctl start nginx
此时可以查看一下进程是否启动了nginx:ps aux|grep nginx
4.安装virtualenvwrapper虚拟环境
1.yum install python-setuptools python-devel
2.pip install virtualenvwrapper
3.编辑.bashrc文件: vim ~/.bashrc
	将以下两行代码,复制到文件最末尾(虚拟环境放在哪?激活virtualenvwrapper.sh)
	export WORKON_HOME=$HOME/.virtualenvs
	source /usr/local/bin/virtualenvwrapper.sh
	然后wq保存退出。
	激活.bashrc文件:source ~/.bashrc
	注意此时可能会说找不到该文件(/usr/local/bin/virtualenvwrapper.sh)
	不同系统,这个文件的安装路径可能不同,此时应该查询当前系统该文件的所在位置。
	查询/usr/local/bin/virtualenvwrapper.sh文件位置:sudo find / -name virtualenvwrapper.sh
	查找到该文件的路径后复制到.bashrc文件的最后一行(source /usr/local/bin/virtualenvwrapper.sh)
	保存后,重新激活该文件:source ~/.bashrc
4.新建虚拟环境
	mkvirtualenv -p  python3 venv
5.进入虚拟环境 
	workon venv
  退出虚拟环境:deactivate
6.上传本地文件(代码或文件)到云服务器
   在Linux或mac系统中直接使用scp命令即可
   在windows中,1.使用filezilla或Winscp工具拖拽文件到云服务器(使用步骤百度)
                2.在pycharm专业版中,Tools-->Deployment-->Configuration-->
              	 点击'+'号,选择SFTP后命名-->在Connection中配置(Advanced中的不用管)
              	 -->点击Mappings(本地文件夹和线上文件夹进行映射)-->选择一个线上目录(Deployment path)
              	 -->可以选择线上的root目录,新建文件夹(文件夹名和项目名称一致)-->点击OK
                 ***怎么上传文件到线上呢?
                 选中某个目录文件-->Tools-->Deployment-->Upload to 文件名(时间会很长建议使用2方式)
7.安装依赖包(前提:项目文件已经上传到云服务器)
  ***进入虚拟环境中安装依赖包(workon venv)
  安装项目中所需要的依赖包--->可以将项目中的依赖包写入到requirements.txt中,此文件放到根目录同级。
					  --->使用pip install -r requirements.txt
					  只要项目中所有的依赖包都安装完毕即可!
8.可以同步MySQL数据库中的数据到云服务器,navicat中云服务器新建数据库,在本机数据库中进行数据传递即可。
返回至settings.py中,修改:ALLOWED_HOSTS = ['*'];修改数据库配置,之后使用:选中settings.py-->Tools-->Deployment-->Upload to 文件名
9.启动服务
python manage.py runserver 0.0.0.0:8000
注意:此时可能会报错,查看以下哪些包没有安装
启动成功后,即可在本机输入ip地址:8000进行访问
5.安装uwsgi
pip install uwsgi
6. 测试uwsgi
uwsgi --http :8000 --module 和项目同名的文件.wsgi
注意:此条命令必须在项目根目录下执行
pwd查看当前目录
和项目同名的文件.wsgi,此文件包含:__init__.py,settings.py,urls.py,wsgi.py
注意:此时强制刷新页面,静态文件将失效
7. 配置nginx
可以先在项目中新建一个conf文件夹(根目录下一级),conf中再新建nginx,uwsgi文件夹,在nginx文件夹中新建
uc_nginx.conf文件,将以下内容复制进去。

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 你的ip地址 ; # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias 你的目录/Mxonline/media;  # 指向django的media目录
}

location /static {
    alias 你的目录/Mxonline/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}:
  server_name 你的IP地址:即云服务器IP
  location /media 你的目录:pwd查看项目目录,即/root/项目名/media
  
解释:
  后续nginx关于url中含有media的,nginx都会自己去读取该文件并返回,不在使用django去代理

修改完毕后,将该配置文件上传到云服务器。
8.通过配置文件启动uwsgi
步骤如上。

新建uwsgi.ini 配置文件

	# mysite_uwsgi.ini file
    [uwsgi]

    # Django-related settings
    # the base directory (full path)
    chdir           = 项目根目录 
    # Django's wsgi file
    module          = 和项目名同名文件.wsgi
    # the virtualenv (full path)

    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 10
    # the socket (use the full path to be safe
    socket          = 127.0.0.1:8000
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    virtualenv = 虚拟环境路径

    logto = /tmp/mylog.log
    
注意:
	修改上边代码中的文字部分
	
    chdir: 表示需要操作的目录,也就是项目的目录
    module: wsgi文件的路径
    processes: 进程数
    virtualenv:虚拟环境的目录
    
 启动:(在配置文件目录下执行)
 uwsgi -i uwsgi.ini 
9.将uc_nginx.conf配置文件加入到nginx的启动配置文件中
1.建立软连接
sudo ln -s 项目根目录/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
2.将配置文件复制/etc/nginx/conf.d/
cp uc_nginx.conf /etc/nginx/conf.d/
3.修改/etc/nginx/nginx.conf配置文件中的user
vim /etc/nginx/nginx.conf

将顶部user nginx;修改为user root;
4.重启nginx
sudo systcmctl restart nginx
5.查看nginx进程
ps aux|grep nginx
6.直接强制刷新本机IP地址栏,把8000端口去掉后回车

注意:
	此时nginx只会查找到根目录下的static静态文件,其他文件夹中的单独static是找不到的
如何解决:
	见标题10
10.拉取所有需要的static file 到同一个目录
在django的setting文件中,添加下面一行内容:
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    
(添加完毕后,别忘记将settings.py上传到云服务)

在项目根目录下,运行命令
    python manage.py collectstatic
 
收集完毕后,刷新页面,如果出现502,即uwsgi服务挂了,重启即可
此时,所有的静态资源都能够正确加载出来。

uwsgi,nginx是在后台运行的,如果想要重启uwsgi服务,使用:pkill -f uwsgi

三:使用域名访问

1.去万网购买域名
购买过后去配置域名,还需要去备案,备案过程可百度,解析域名

注意:
	使用域名后,还需要将uc_nginx.conf中的server_name 改为域名地址,然后上传云服务器,
	上传过后,将此配置文件拷贝只/etc/nginx/conf.d,重启nginx服务即可。

注意

部署到生产环境前,务必要将DEBUG = True改为False!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值