centos+python+django+uwsgi+mysql

centos7+python3+django2+uwsgi+mysql

python断断续续的学习了一段时间,一直是在Mac上面跑跑,最近阿里云打折便买了一个便宜的服务器来玩,在阿里云网站的控制台中找到自己购买的实例,打开远程连接进入终端输入账号密码就可以开始配置环境了

《centos+python+django+uwsgi+mysql》 屏幕快照 2018-01-29 13.36.42.png

经历了将近10次环境配置,总算是配置好了–从1月28号直到2月2号
下篇文章记录一下git下的自动部署Django

1、安装Python3.6.4

目前centos中默认的python是2.7版本,现在需要升级到3.6.4版本,首先下载,解压后配置并安装

下载
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

解压
tar xf Python-3.6.4.tgz

进入到解压得到的文件夹中
cd Python-3.6.4

依次键入或者复制命令输入
./configure --prefix=/opt/python3 

make && make install 

安装完毕后查看python版本

默认python版本 --> 2.7
python --version

python3版本 --> 3.6.4
python3 --version

如果版本为3.6.4则说明安装成功,有强迫症的可以把python3.6.4的压缩包和解压包都删除

2、安装Django

Django已经进入2.0版本了,如果直接用“pip install django”会安装失败,因为pip默认的是python2.7,Django2不支持python2,下面命令可以直接安装Django版本

pip3 install django

进入到“/home”路径中,使用下面命令测试是否安装Django成功,同时也是在新建项目”mysite”

django-admin.py startproject mysite
cd mysite/mysite

编辑项目settings.py文件,在ALLOWED_HOSTS中添加自己的公网IP

vim settings.py

《centos+python+django+uwsgi+mysql》 屏幕快照 2018-01-29 14.01.03.png

执行项目

cd ../
python3 manage.py runserver 0.0.0.0:80

退出
control + C

在浏览器中输入“http://公网ip”一般情况下会展示Django启动成功的画面,如果展示的是服务器未响应,在ip地址无误的情况下首先查看是否为自己的无服务实例设置安全组端口范围为“80/80”,如果还是未响应那么查看一下设置防火墙

《centos+python+django+uwsgi+mysql》 屏幕快照 2018-01-29 14.08.41.png

3、安装uwsgi

使用pip安装

pip3 install uwsgi

安装结束后回到根目录下,创建test.py文件,并编辑

cd (或者 cd ~)

touch test.py

vi test.py

内容为下,最好是使用sublime创建一个test.py然后通过filezilla传到服务器根目录下,防止因为格式导致的问题

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]#python3
    return b"Hello World"#python2

在终端运行下面命令,需要保证安全组里面有8000端口

uwsgi --http :8000 --wsgi-file test.py

然后在浏览器中输入“http://公网ip:8000”,如果看到“Hello World”则表示成功

启动项目
uwsgi --http :8000 --chdir /home/mysite/ -w mysite.wsgi --static-map=/static=static

uwsgi常用命令,uWSGI官方文档

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # 可以ip地址,也可以是文件 
    --processes=5 \                 # 进程数量
    --uid=1000 --gid=2000 \         # 如果是root用户,uwsgi可以有删除权限
    --harakiri=20 \                 # 一个请求超时时间
    --max-requests=5000 \           # 一个工作进程最大请求数
    --vacuum \                      # 退出时清楚环境
    --home=/path/to/virtual/env \   # virtualenv的路径
    -- static                       # 做一个映射,指定静态文件
    --http                          # 这个就和runserver一样指定IP 端口
    --daemonize=/var/log/uwsgi/yourproject.log      # 日志

启动配置,在项目的根目录下新建script文件夹,并新建uwsgi.ini,uwsgi.pid文件

cd /home/mysite/script
$ uwsgi --ini uwsgi.ini   # 启动uwsgi配置
[uwsgi-static] added mapping for /static => /home/trunk/static    # 启动成功

$ uwsgi --stop uwsgi.pid  # 关闭uwsgi
signal_pidfile()/kill(): Operation not permitted [core/uwsgi.c line 1659]

$ uwsgi --reload uwsgi.pid  #重新加载配置

4、安装Nginx

返回到根目录,下载,解压,配置,安装

wget http://nginx.org/download/nginx-1.13.9.tar.gz

tar xf nginx-1.13.9.tar.gz

cd nginx-1.13.9

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module

make && make install

改“nginx.conf”里面的监听端口,如果不知道某些文件的路径可以通过下面命令查找

find / -name nginx.conf

会列出所有“nginx.conf”所存在的位置,修改“/usr/local/nginx/conf/nginx.conf”里面的内容

server {
        listen       80;
        server_name  localhost;

        #charset utf-8,gbk;

        #access_log  logs/host.access.log  main;

        location / {
            include uwsgi_params;
            uwsgi_pass 39.106.117.80:8088;
            uwsgi_param UWSGI_SCRIPT mysite.wsgi;
            uwsgi_param UWSGI_CHDIR /home/mysite;
            uwsgi_read_timeout 2;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    
    }

我使用了ssl所以我的配置相对上面有所改变

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  www.liyong.work;
        return      301 https://$server_name$request_uri;
    }

    server {
       listen       443 ssl;
       server_name  www.liyong.work;

       charset utf-8,gbk;

       ssl_certificate      cert/214523997420739.pem;
       ssl_certificate_key  cert/214523997420739.key;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers  on;

       location /static/ {
            alias  /home/NeverGU/static/;
            index  index.html index.htm;
        }

       location / {
          include uwsgi_params;
            uwsgi_pass 127.0.0.1:8088;
            uwsgi_param UWSGI_SCRIPT NeverGU.wsgi;
            uwsgi_param UWSGI_CHDIR /home/NeverGU;
            uwsgi_read_timeout 2;
           root   html;
           index  index.html index.htm;
       }

       error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

在‘/etc/nginx/conf.d’下面新建“mysite.conf”

server {   # 这个server标识我要配置了
        listen 80;  # 80 是http默认的端口, 443 是https默认的端口(网页一般使用这两个端口)
        server_name 39.106.117.80 ;  # 你访问的路径前面的url名称
        access_log  /var/log/nginx/access.log;  # Nginx日志配置
        error_log  /var/log/nginx/error.log;    # Nginx错误日志配置
        charset  utf-8; # Nginx编码
        gzip on;  # 启用压缩,这个的作用就是给用户一个网页,比如3M压缩后1M这样传输速度就会提高很多
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;  # 支持压缩的类型

        error_page  404           /404.html;  # 错误页面
        error_page   500 502 503 504  /50x.html;  # 错误页面

        # 指定项目路径uwsgi
        location / {        # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
            include etc/nginx/uwsgi_params;  # 导入一个Nginx模块他是用来和uWSGI进行通讯的
            uwsgi_connect_timeout 30;  # 设置连接uWSGI超时时间
            # 指定uwsgi的sock文件所有动态请求就会直接丢给他
            uwsgi_pass unix:/home/mysite/script/uwsgi.sock;  
        }

        # 指定静态文件路径
        location /static/ {
            alias  /home/mysite/static/;
            index  index.html index.htm;
        }

        location /media/ {
            alias /home/mysite/static/media;
        }

        location = /50x.html{
            root /usr/share/nginx/html;
        } 
    }

5、配置uwsgi启动项目

首先项目“mysite”中创建“uwsgi.ini”文件,如果有则不用创建

cd /home/mysite/script
touch uwsgi.ini

复制下面代码入“uwsgi.ini”

#uwsgi.ini file
[uwsgi]
# 项目目录
chdir=/home/mysite
# 指定项目的application
module= mysite.wsgi:application
# 指定sock的文件路径
socket=127.0.0.1:8088
# Django's wsgi file
wsgi-file =mysite/wsgi.py
# 进程个数
workers=5
pidfile=/home/mysite/script/uwsgi.pid
# 指定IP端口
#http=:8000
# 指定静态文件
static-map=/static=/home/mysite/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/mysite/script/uwsgi.log

执行命令后能够查看网页并且按“control + C”后依然可以访问说明成功

uwsgi --ini /home/mysite/script/uwsgi.ini && /usr/local/nginx/sbin/nginx

如果报错误可查看文中*.log所在的路径(/home/mysite/script/uwsgi.log),查看错误原因
遇到端口冲突问题时可通过下面命令查看所有进程

netstat -tlnp

输入进程的pid就能够关闭进程

kill pid

如果切换项目运行需要使用同一个端口,使用kill + pid不能直接杀死uwsgi对应的进程,需要使用“uwsgi –stop /home/mysite/script/uwsgi.pid”才能直接杀死

6、安装Mysql

回到根目录
下载,安装

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

yum install mysql-community-server

初次安装无需密码即可登录

mysql -u root 

设置密码

mysql> set password for 'root'@'localhost' =password('password');

在mysite的settings.py中配置数据库连接

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'root',
        'PASSWORD': '11111111',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
    原文作者:勇不言弃92
    原文地址: https://www.jianshu.com/p/92ee1ba5f2c9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞