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',
}
}