曹阳的博客 仅用于学习和分享

centos7 下通过uwsgi,nginx部署django应用

2020-03-13

centos7 下通过uwsgi,nginx部署django应用

为什么要部署到服务器上

  1. 本地的IP是一个动态分配的IP地址
  2. 数据包转发问题(一个IP可以对应很多实体机)

连接服务器

  1. 如果有两天服务器,它们就可以使用私有IP连接,非常快
  2. 如果有一台的话就用公网IP
  3. Linux ssh命令
  4. Windows系统用xshell工具新建连接

Nginx和uwsgi组合介绍

  1. Nginx和Apache端口都是80,同时安装必须改端口号,Nginx性能更好,底层是异步IO
  2. 浏览器要访问Django,首先要经过Nginx把不同的需求转发uwsgi,uwsgi主要是拉起Django的
  3. Django本身能够运行是因为已经实现了一个简单的运行Django的web容器,但是不建议用它来部署生产环境,因为它不稳定,并发处理能力也很低,而uwsgi是用C语言写的性能更高
  4. web框架一般都不会完成跟Nginx交互的过程,一般都是用第三方的组件,Django只需要实现uwsgi的一些协议就行了
  5. Nginx不完成和Django的通信,它只管做端口的转发,uwsgi会监听端口

一.安装python3.7

  1. 安装依赖包
    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
  2. 下载python源码
    wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
    tar -xzvf Python-3.7.3.tgz -C /tmp
    cd /tmp/Python-3.7.3/
  3. 把Python3.7安装到 /usr/local 目录(Linux源码安装基本都需要这三个命令)
    ./configure –prefix=/usr/local
    make
    make altinstall #这一步比较耗时
  4. 更改/usr/bin/python链接(最近的centos中已经把python3去掉了,需要自己配置python3的全局命令指向python3的可执行文件)
    ln -s /usr/local/bin/python3.7 /usr/bin/python3
    ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

二.maridb 和 redis

  1. 安装
    sudo yum install mariadb-server
  2. 启动, 重启
    sudo systemctl start mariadb
    sudo systemctl restart mariadb
    进程查看 ps aux|grep mysql 设置安全规则 配置mysql的端口
    正常到这里就可以进入mysql,但是我不能,因为需要密码,刚安装完的数据库谁知道密码是啥

MySQL修改root密码的4种方法

linux系统下mysql跳过密码验证登录

  1. 设置bind-ip(就可以所有主机请求了)
    vim /etc/my.cnf
    在 [mysqld]下面加一行 bind-address = 0.0.0.0

E45: ‘readonly’ option is set (add ! to override)

  1. 设置外部ip可以访问
    mysql -uroot
    GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘Mm123456’ WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON . TO ‘root’@’localhost’ IDENTIFIED BY ‘Mm123456’ WITH GRANT OPTION;
    FLUSH PRIVILEGES; #刷新权限
    sudo systemctl restart mariadb #重启
  2. 设置阿里云的防火墙对外开放端口

Duplicate entry ‘%-root’ for key ‘PRIMARY’

MySQL错误:Can’t connect to(10060)

MySQL错误:Can’t connect to(10060)

MySQL错误:Can’t connect to(10060)

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (111)原因是服务器的数据库服务没开

  1. 安装mysqlclient
    centos 7:(前面已经安装过了不用再装了) yum install python-devel mariadb-devel -y ubuntu: sudo apt-get install libmysqlclient-dev 然后: pip install mysqlclient

  2. 安装redis
    yum install redis
    service redis start
    redis-cli

  3. 数据传输,把本地数据库放到服务器上去

三.安装nginx

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时报错:No package nginx available.

安装nginx时报错:No package nginx available.

安装nginx时报错:No package nginx available.

CentOS 7安装nginx方法以及常见nginx命令和安装问题

CentOS EPEL yum源

RHEL/CentOS 7.x/6.x/5.x开启EPEL仓库

CentOS7安装EPEL源

如何在CentOS 7上安装Nginx

最后发现安装不上Nginx可能是因为我之前在宝塔工具里安装了Apache,端口号冲突,虽然我并不知道为什么报找不到包

四.安装virtualenvwrapper

  1. 安装环境
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    yum install python-setuptools python-devel
    pip install virtualenvwrapper
  2. 编辑.bashrc文件
    vim ~/.bashrc export WORKON_HOME=$HOME/.virtualenvs
    source /usr/bin/virtualenvwrapper.sh
  3. 重新加载.bashrc文件
    source ~/.bashrc
    如果提示找不到文件的话就sudo find / -name virtualenvwrapper.sh
    报错:/usr/bin/python: Error while finding module specification for ‘virtualenvwrapper.hook_loader’
  4. 新建虚拟环境
    mkvirtualenv -p python3 mxonline
  5. 进入虚拟环境
    workon mxonline
    退出虚拟环境 deactivate
  6. 把项目上传到服务器,可以用pycharm里的tools->Deployment->Configuration

connection mappings

SSH远程连接不上重装完ubuntu服务器

  1. 安装pip包
    然后将requirements.txt文件上传到服务器之后运行:
    pip install -r requirements.txt

  2. 运行项目
    python.manage.py runserver 0.0.0.0:8000 访问60.205.203.74:8000即可

排除服务器网站无法访问常见办法

五.安装uwsgi

pip install uwsgi

六.测试uwsgi

uwsgi –http :8000 –module MxOnline.wsgi

七.配置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
}
}

八.通过配置文件启动uwsgi

新建uwsgi.ini 配置文件, 内容如下:

#mysite_uwsgi.ini file
[uwsgi]

#Django-related settings
#the base directory (full path)
chdir           = /home/bobby/Projects/MxOnline
#Django's wsgi file
module          = MxOnline.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 = /home/bobby/.virtualenvs/mxonline

logto = /tmp/mylog.log

注:
chdir: 表示需要操作的目录,也就是项目的目录
module: wsgi文件的路径
processes: 进程数
virtualenv:虚拟环境的目录

workon mxonline
uwsgi -i 你的目录/Mxonline/conf/uwsgi.ini &

九.将该配置文件加入到nginx的启动配置文件中

sudo ln -s 你的目录/Mxonline/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/

vim /etc/nginx/nginx.conf
user nginx改成user root

重新启动Nginx
sudo systemctl restart nginx

访问60.205.203.74

安装完NGINX 已经正常启动,用IP访问显示的是Welcome to CentOS?

Centos 7 Nginx安装与配置

nginx安装好后 无法访问主页面

CentOS 7 执行service iptables start出现redirecting to systemctl …Failed to …not loaded.

在浏览器中转到我的服务器时,它显示的是CentOS欢迎页面,而不是nginx。我该如何解决?

十.拉取所有需要的static file 到同一个目录

在django的setting文件中,添加下面一行内容:

STATIC_ROOT = os.path.join(BASE_DIR, "static/") 运行命令

python manage.py collectstatic

十一.运行nginx

sudo /usr/sbin/nginx

这里需要注意 一定是直接用nginx命令启动, 不要用systemctl启动nginx不然会有权限问题

十二.访问

http://你的ip地址/

出现502就是uwsgi挂了


Similar Posts

上一篇 输入法的安装

Content