1、下载项目

git clone https://github.com/wangyitao/MyBlogs.git

2、进入Myblogs目录

cd MyBlogs

3、创建虚拟环境并且安装依赖

pipenv install

4、搭建mysql环境,以及创建数据库和用户

wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm  # 下载rpm源
rpm -ivh mysql80-community-release-el7-1.noarch.rpm # 添加rpm源到系统
yum update # 更新源,替换掉原来的源
yum install mysql-server # 安装mysql
service mysqld start # 启动mysql
service mysqld status # 查看mysql是否启动
grep 'temporary password' /var/log/mysqld.log # 查找mysql给我们设置的初始密码
mysql -uroot -p # 登录mysql,密码输入上面查到的初始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';(注意要切换到mysql数据库,使用use mysql)修改root密码
flush privileges; # 直接生效修改之后的密码,不用重启mysql
CREATE DATABASE myblogs DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci; # 创建一张给网站用的表,表名自定,我的叫myblogs
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码!'; # 创建新用户来管理这个网站
GRANT ALL PRIVILEGES ON myblogs.* TO '用户名'@'localhost'; # 给用户创建操作表的权限
FLUSH PRIVILEGES; # 刷新

5、修改代码,符合自己的需求

修改settings/production.py文件

from .base import *

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ['SECRET_KEY'] # 从环境变量中读取,增加安全性 # SECURITY WARNING: don't run with debug turned on in production!2.
DEBUG = False ALLOWED_HOSTS = ['*'] # Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASE_PASSSWORD = os.environ['DATABASE_PASSSWORD']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myblogs', # 要连接的数据库,连接前需要创建好
'USER': 'root', # 连接数据库的用户名
'PASSWORD': DATABASE_PASSSWORD, # 连接数据库的密码
'HOST': '127.0.0.1', # 连接主机,默认本级
'PORT': 3306 # 端口 默认3306
}
} ADMINS = [ # 配置管理员,出错发送给管理员
('felix', 'felix@example.com'),
]
# 邮件相关配置,用来发邮件
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = '1403179190@qq.com' # 这里部署的时候改成自己的qq邮箱
EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD'] # 授权码
EMAIL_SUBJECT_PREFIX = u'[FCBlog]'
EMAIL_USE_SSL = True # 与SMTP服务器通信时,是否启动TLS链接(安全链接)
EMAIL_TIMEOUT = 60
FROM_EMAIL = 'FCBlog<1403179190@qq.com>' # 日志配置
LOGGING_FILE_PATH = os.environ['LOGGING_FILE_PATH'] # 配置日志文件位置
# 日志文件
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': LOGGING_FILE_PATH,
},
'mail_admins': { # 出错发送邮件给管理员
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
},
} # 配置django的session引擎改成redis
SESSION_ENGINE = 'redis_sessions.session'
# redis服务器地址
SESSION_REDIS_HOST = 'localhost'
# redis端口
SESSION_REDIS_PORT = 6379
# 选择那个redis库
SESSION_REDIS_DB = 2
# 密码
SESSION_REDIS_PASSWORD = ''
# 前缀的键名
SESSION_REDIS_PREFIX = 'myblogs_django_session'

production.py

修改production.py中的邮箱配置,数据库配置等。

6、将production.py中需要从环境变量读取的数据写入环境变量,在/etc/profile下添加如下信息。

# django关键信息变量
export SECRET_KEY="" # 写入自己的django的secret_key
export DATABASE_PASSSWORD="" # 写入自己的数据库密码
export EMAIL_HOST_PASSWORD="" # 写入自己的qq邮箱的key
export LOGGING_FILE_PATH="" # 写入自己的日志存放目录绝对路径 比如我的/home/myblogs_log/mylog.log

a、django的SECRET_KEY重新生成方式如下:

(MyBlogs) [root@localhost MyBlogs]# django-admin shell
Python 3.7.2 (default, Jan 3 2019, 16:25:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.management import utils
>>> utils.get_random_secret_key()
'yqk27s&bi(11te&8dgl=-r1&638re&)3bj=ozzb1h+72p-ra53'
>>>

b、EMAIL_HOST_PASSWORD 可以从qq邮箱官网获取

7、配置好之后生成表结构

python manage.py makemigrations
python manage.py migrate

8、生成缓存表,并且收集静态资源

python3 manage.py createcachetable # 生成缓存表
python3 manage.py collectstatic # 收集静态资源

9、给mysql配置时区信息,默认为空

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p "密码" mysql

10、第一阶段测试

[root@localhost MyBlogs]# pipenv run python3 FCBlogs/manage.py runserver 0.0.0.0:80
Performing system checks... System check identified no issues (0 silenced).
January 04, 2019 - 22:30:52
Django version 2.1.4, using settings 'myblog.settings.development'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.

然后使用ip访问如果成功就表示第一阶段配置完成。

11、安装uwsgi

pip3 install uwsgi

12、配置uwsgi启动文件

新建一个uwsgi.ini文件,内容如下

[uwsgi]
chdir=/root/myblogs/MyBlogs/FCBlogs
home=/root/.local/share/virtualenvs/MyBlogs-7hihB8Gz/
module=myblog.wsgi
master=true
processes=4
socket=0.0.0.0:8001
vacuum=true
max-requests=5000
enable-threads=true
harakiri=20
uid=1000
pid=2000
daemonize=/root/myblogs/MyBlogs/myblogs_uwsgi/myblogs.log
pidfile=/root/myblogs/MyBlogs/myblogs_uwsgi/master.pid

uwsgi参数详解

master = true
#启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。 chdir = /web/www/mysite
#在app加载前切换到当前目录, 指定运行目录 module = mysite.wsgi
# 加载一个WSGI模块,这里加载mysite/wsgi.py这个模块 py-autoreload=1
#监控python模块mtime来触发重载 (只在开发时使用) lazy-apps=true
#在每个worker而不是master中加载应用 socket = /test/myapp.sock
#指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字 processes = 2 #启动2个工作进程,生成指定数目的worker/进程 buffer-size = 32768
#设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。 daemonize = /var/log/myapp_uwsgi.log
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器 log-maxsize = 5000000 #设置最大日志文件大小 disable-logging = true #禁用请求日志记录 vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件。 listen = 120 #设置socket的监听队列大小(默认:100) pidfile = /var/run/uwsgi.pid #指定pid文件 enable-threads = true
#允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程 reload-mercy = 8
#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束) max-requests = 5000
#为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏 limit-as = 256
#通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。 harakiri = 60
#一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)

uwsgi参数详解

13、配置nginx参数

配置文件如下,nginx.conf

user  root;
worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; # 支持图片 gif等等压缩,减少网络带宽
gzip on; server {
listen 80;
server_name myblog; # substitute your machine's IP address or FQDN
charset utf-8; client_max_body_size 75M; # adjust to taste location /favicon.ico {
alias /root/myblogs/MyBlogs/myicon.ico;
} location /media {
alias /root/myblogs/MyBlogs/FCBlogs/media; # your Django project's media files - amend as required
} location /static {
alias /root/myblogs/MyBlogs/FCBlogs/static_collection; # your Django project's static files - amend as required
} location / {
uwsgi_pass 0.0.0.0:8001;
include uwsgi_params; # the uwsgi_params file you installed
}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }

14、启动redis

redis-server

15、启动uwsgi

uwsgi -i uwsgi.ini

当uwsgi启动时如果想要停止可以执行下面代码

uwsgi --stop master.pid

# master.pid 为 uwsgi.ini文件中pidfile指定的文件

16、nginx的启动

启动:nginx

如果停止,可以pkill nginx,然后再启动nginx

17、这下就完成了。其他的可以参考我的另一篇文章

nginx+uwsgi+python3+pipenv+mysql+redis部署django程序的更多相关文章

  1. 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目

    0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...

  2. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  3. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  4. 使用Nginx+uWSGI+Django方法部署Django程序(下)

    在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...

  5. 使用Nginx+uWSGI+Django方法部署Django程序(上)

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  6. centos7下部署Django(nginx+uwsgi+python3+django)

    系统版本 centos7 python版本 使用官方python3.6.3正式版 django版本 使用本文发布时最新的1.11.7 uwsgi版本 使用本文发布时最新的2.0.15 nginx版本 ...

  7. 使用Nginx+uWSGI+Django方法部署Django程序

    第一步先解决uwsgi与django的桥接.解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的WEB服务器. 第二步解决uwsgi与Nginx的桥接.通过nginx与uws ...

  8. Centos7.3+uwsgi+Nginx部署Django程序

    1. 安装Python,这里我用的是阿里云的centos7.3,自带python2,所以,此步略过,具体安装Python可Google. 2. 安装uwsgi,如果安装失败的话首先,我的Python解 ...

  9. 一个适合变化的产品部署集成包(nginx+jdk+tomcat+nodejs+mysql+redis+mongo+MYSQL主主(读写分离)集群建立+代码包+持续上线+备份)

    一.前言 最近公司做了一套新产品,需要发布到不确定的硬件环境中(不同使用单位规模,使用人数,服务器提供的资源不同)若每次进行人工部署耗时费力,周期过长. 二.分析 具体的部署流程如下: 由上图流程进行 ...

随机推荐

  1. Linux进程间通信—使用共享内存

    Linux进程间通信-使用共享内存 转自: https://blog.csdn.net/ljianhui/article/details/10253345 下面将讲解进程间通信的另一种方式,使用共享内 ...

  2. ubuntu配置Selenium+Chromedriver

    1.下载并安装最新的Google Chrome版本执行如下命令: wget https://dl.google.com/linux/direct/google-chrome-stable_curren ...

  3. c# 异步( Async ) 不是多线程

    c# 异步( Async ) 不是多线程   误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...

  4. git add提交时关于 LF will be replaced by CRLF in 问题出现的原因以及解决方式

    最近在新创建的github项目中add新框架代码时,出现了LF will be replaced by CRLF in的问题,以下为问题截图 查阅资料才知道,LF和FRLF是两种不同的换行格式,这个警 ...

  5. 记redis一次Could not get a resource from the pool 异常的解决过程

    最近有个项目中的redis每天都会报 "Could not get a resource from the pool"的错误,而这套代码在另一地方部署又没有问题.一直找不到错误原因 ...

  6. dubbo源码阅读之服务引入

    服务引入 服务引入使用reference标签来对要引入的服务进行配置,包括服务的接口 ,名称,init,check等等配置属性. 在DubboNamespaceHandler中,我们可以看到refer ...

  7. 平衡二叉树详解——PHP代码实现

    一.什么是平衡二叉树 平衡二叉树(Self-Balancing Binary Search Tree 或者 Height-Balancing Binary Search Tree)译为 自平衡的二叉查 ...

  8. iview carousel 图片不显示;iview 轮播图 图片无法显示(转载)

    转载来源:https://segmentfault.com/q/1010000016778108 相关代码 <Carousel autoplay v-model="value2&quo ...

  9. Centos7安装Openresty和orange

    1.说明 以下全部操作均已root用户执行 2.安装 2.1 安装依赖 yum install readline-devel pcre-devel openssl-devel gcc 2.2 下载op ...

  10. Vue检测当前是否处于mock模式

    Vue检测当前是否处于mock模式 1.在main.js中声明全局变量: import Vue from 'vue' /* 全局变量 */ var GLOBAL_VARIABLE = { isMock ...