django-nginx-uwsgi安装部署文档-阿里云ECS服务器

部署环境

  • 阿里云ECS服务器,centos8
  • python3.7,django1.11.11
  • nginx,uwsgi

安装 python3.7

#1. 安装依赖包(不仅仅是python的依赖包)
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
#注:提示python-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/python3.7 目录
    ./configure --prefix=/usr/local/python3.7
    make			#这一步比较耗时
    make altinstall   

#4. 更改/usr/bin/python 软链接
    ln -s /usr/local/python3.7/bin/python3.7 /usr/bin/python3
    ln -s /usr/local/python3.7/bin/pip3.7 /usr/bin/pip3

#补充:删除已经存在的软连接(centos8默认安装了python3.6)
    rm python3

maridb 和 redis

如果没有使用这两个数据库可以忽略该部分安装,

如果项目使用的是其他的数据库比如Mysql,需要单独安装MySQL

补充2,提供MySQL安装部署文档

1. 安装
   sudo yum install mariadb-server

2. 启动, 重启

   sudo systemctl start mariadb
   sudo systemctl restart mariadb

   设置安全规则 配置mysql的端口

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;

5. 设置阿里云的对外端口

   视频中有讲解这部分

6. 安装mysqlclient出问题

   centos 7:
       yum install python-devel mariadb-devel -y
       
   ubuntu:
       sudo apt-get install libmysqlclient-dev
       
   然后:
       pip install mysqlclient

7. 安装redis

   yum install redis
   service redis start

上传项目文件

该部分也可以等虚拟环境安装配置后,再上传项目文件

将hello项目文件上传至root家目录下
可以使用pycharm自带的上传工具。
    Tools > Deployment > Configuration(第一次连接远程服务器,需要在Configuration中配置)

安装虚拟环境

#1 下载依赖
   yum install python-setuptools python-devel	(yum安装时提示未找到文件,好像也没影响)

#2 pip3安装 virtualenvwrapper 和 virtualenv
    pip3 install virtualenvwrapper
    pip3 install virtualenv


#3 编辑.bashrc文件
    vim ~/.bashrc
    # 复制以下内容粘贴到文件末尾
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3.7/bin/virtualenv
    source /usr/local/python3.7/bin/virtualenvwrapper.sh
    
#4 重新加载.bashrc文件
    source  ~/.bashrc
    #注意:如果此处提示virtualenvwrapper.sh文件不存在,使用如下命令找到该文件的位置:
    sudo find / -name virtualenvwrapper.sh
    然后将查询得到的路径替换./bashrc文件的source中的地址即可

#5 新建项目的虚拟环境(-p 指明使用python3, hello为项目名称)
    mkvirtualenv -p python3 hello

# 进入虚拟环境 
    workon hello
# 查看虚拟环境
    workon
# 退出虚拟环境 
    deactivate

# 安装pip包(这部分可以在django项目上传到服务器后再下载安装)
然后将requirements.txt文件上传到服务器之后运行:
    pip install -r requirements.txt
安装依赖包
# 补充:所有依赖包都在虚拟环境中下载安装(即进入虚拟环境里面使用pip下载)

安装 nginx

# 参考官方文档
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-8

# 退出虚拟环境,安装nginx
# 直接命令安装
    sudo yum install epel-release
    sudo yum install nginx

# 启动nginx
    sudo systemctl start nginx
    # 查看是否开启nginx
    ps aux | grep nginx
    
# 补充:重启和关闭
    restart stop

配置 nginx

提前说明:配置nginx和配置uwsgi时,是在项目根下新建了一个conf文件夹,这个文件夹下面有两个文件夹:nginxuwsginginx文件夹内放uc_nginx.confuwsgi文件夹放uwsgi.ini

配置nginx
#1 在hello项目根路径下新建并打开 conf/nginx/uc_nginx.conf
    vim conf/nginx/uc_nginx.conf
    
#2 将下面内容复制粘贴到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:8001; # 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 /root/hello/media;  # 指向django的media目录
    }

    location /static {
        alias /root/hello/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
    }
    }
    #############################################内容结束
    
#3 将该uc_nginx.conf配置文件加入到nginx的启动配置文件中,有两种方式:
   # 方式1:直接拷贝uc_nginx.conf到/etc/nginx/conf.d/,缺点,每次修改项目文件都需要再重新拷贝一次
   cp /root/hello/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
    
   # 方式2:软连接,修改项目下的uc_nginx.conf,会实时更新(推荐)
   sudo ln -s /root/hello/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/

#4 修改/etc/nginx/nginx.conf文件,
    uesr nginx  修改为 user root

#5 重启nginx
    sudo systemctl restart nginx

安装 uwsgi

#1 在虚拟环境里面安装uwsgi
   pip install uwsgi

#2 测试uwsgi(在项目的根目录下测试)
   uwsgi --http :8000 --module hello.wsgi

配置 uwsgi

目的: 通过配置文件启动uwsgi

#1 在hello项目根路径下新建 conf/uwsgi/uwsgi.ini 配置文件 
	将以下内容复制粘贴到uwsgi.ini文件
    #############################################内容开始
    # mysite_uwsgi.ini file
    [uwsgi]

    # Django-related settings

    # the base directory (full path)

    chdir           = /root/hello

    # Django's wsgi file

    module          = hello.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:8001
    # 这个端口号和uc_nginx.conf中的server端口号保持一致

    # ... with appropriate permissions - may be needed

    # chmod-socket    = 664

    # clear environment on exit

    vacuum          = true
    virtualenv =    /root/.virtualenvs/hello
    #  cd ~/.virtualenvs/ 进入 hello项目后 pwd显示当前虚拟环境路径


    # logto = /tmp/mylog.log
    #############################################内容结束
    
注:
    uwsgi.ini文件里面的注释要单独写在一行,不能和配置信息放在一行
    chdir: 表示需要操作的目录,也就是项目的目录
    module: wsgi文件的路径
    processes: 进程数
    virtualenv:虚拟环境的目录
        
#2 启动uwsgi
    #2.1进入项目虚拟环境
    workon hello
    # 启动uwsgi
    uwsgi -i uwsgi.ini #一定要进入uwsgi.ini所在文件夹内使用uwsgi命令
    
#3 重启uswgi(补充)
	pkill -f uwsgi
    
# 补充:强制关闭uwsgi
	pkill -f uwsgi -9

ip访问

http://你的ip地址/

补充1

静态文件配置

拉取所有需要的static file 到同一个目录
在django的setting文件中,添加下面一行内容:
	STATIC_ROOT = os.path.join(BASE_DIR, "static/")
运行命令
    python manage.py collectstatic

补充2

centos8安装部署mysql

  • 具体安装参考:网友博客

  • 补充:如果需要自己本地远程登录mysql,除了需要开放阿里云的安全组端口,还需要开放root登录的host,即允许所有ip地址以root身份登录阿里云服务器上的mysql数据库。

    #1 登录mysql使用mysql库
    	use mysql;	
        
    #2 查看host和user信息
    	select host, user from user;	
        
    #3 修改允许外部ip访问
    	update user set host="%" where uesr="root";	
        
    #4 重启mysqld服务
    
posted @ 2020-05-23 18:01  the3times  阅读(185)  评论(0编辑  收藏  举报