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、这下就完成了。其他的可以参考我的另一篇文章

最新文章

  1. github 相关英语
  2. Ruby Gem命令详解
  3. archlinux配置答疑
  4. DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析
  5. Linux之查看文件大小
  6. POJ 3553 Task schedule
  7. jsp页面转发到servlet
  8. hdu_5193_Go to movies Ⅱ(带插入删除的逆序对,块状链表)
  9. pycharm 安装venv的依赖包
  10. asp.net core mvc实现伪静态功能
  11. Spring Boot 2.0 WebFlux 教程 (一) | 入门篇
  12. mysql根据分组和条件查询以后如何统计记录的条数
  13. java 写一个JSON解析的工具类
  14. mongodb使用问题记录
  15. c++创建文件夹以及子文件夹
  16. WinRAR 0day漏洞
  17. centos7 二进制版本安装 mysql8.0.13
  18. Pylons安装苦逼之路
  19. STVD中将现有工程重命名为另一个工程
  20. 【软件分析与挖掘】ELBlocker: Predicting blocking bugs with ensemble imbalance learning

热门文章

  1. JAVA的枚举基本操作,对原码反码补码的理解及为运算的深入理解,浮点数计算的误差分析
  2. Restful与Spring MVC
  3. 【转】webpack4安装过程遇到的问题及处理方法
  4. JS中的函数与对象
  5. Spring事务传播机制与隔离机制
  6. python 笔记二
  7. oracle rpad()和lpad()函数
  8. c# 常见文件夹操作
  9. 加密类型、数据加密解密过程以及CA创建
  10. Xshell 5连接上suse