centos+python+django+uwsgi+mysql

centos7+python3+django2+uwsgi+mysql

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


屏幕快照 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
屏幕快照 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”,如果还是未响应那么查看一下设置防火墙


屏幕快照 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',
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容