Linux下配置Django_Apache_Mysql环境(CentOS 7.5)

本文将介绍如何在Linux上部署Django + Mysql + Apache环境。我们知道,Django内置的http服务器只能工作在单线程下,做开发和调试时候是可以的,但是生产环境通常都会有多用户并发,而且django的simple HTTP server处理大量静态文件的性能太差,所以要用apache做前端。Django自带的SQLite数据库权限只依赖于文件系统,没有用户帐户的概念,这里我们使用典型的关系型数据库Mysql。看似简单的环境搭建,在实际操作过程中还是遇到了不少的大坑,所以特地将过程记录下来,也希望对大家有小小的帮助。

CentOS 7.5  +  python 2.7.5  + Django 1.11.14  +  Apache 2.4.6  +  Mysql 5.7.23

1. 安装Django

Linux上我们可以直接使用pip安装Django

1.1  安装python(使用CentOS 7.5自带的python即可)

1[root@localhost ~]# python --version 2Python 2.7.5

1.2  网上下载get-pip.py文件安装pip:

wget https://bootstrap.pypa.io/get-pip.py

1.3  pip安装django

1[root@localhost ~]# pip install django 2[root@localhost ~]# python 3Python 2.7.5 (default, Jul 13 2018, 13:06:57) 4[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2 5Type "help", "copyright", "credits" or "license" for more information. 6>>> import django 7>>> django.get_version() 8'1.11.14'

2. 安装Apache

Linux上使用yum安装Apache即可

1[root@localhost ~]# yum install httpd 2[root@localhost ~]# httpd -V 3[Thu Aug 16 20:57:04.487586 2018] [so:warn] [pid 1605] AH01574: module wsgi_module is already loaded, skipping 4Server version: Apache/2.4.6 (CentOS) 5Server built: Jun 27 2018 13:48:59 6Server's Module Magic Number: 20120211:24 7Server loaded: APR 1.4.8, APR-UTIL 1.5.2 8Compiled using: APR 1.4.8, APR-UTIL 1.5.2 9Architecture: 64-bit 10Server MPM: prefork 11 threaded: no 12 forked: yes (variable process count)

注意:使用yum安装的httpd,其安装目录位于/etc/httpd/,我们只需要配置/etc/httpd/conf/httpd.conf即可

3. 安装Mysql

我们使用yum安装Mysql,需要先更新yum源

1[root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 2[root@localhost ~]# rpm -ivh mysql57-community-release-el7-8.noarch.rpm 3[root@localhost ~]# yum install mysql-community-server[root@localhost ~]# yum install mysql-community-devel

注意:yum安装的Mysql其文件目录如下

  • 配置文件:/etc/my.cnf
  • 日志文件:/var/log/mysqld.log
  • 服务启动脚本:/usr/lib/systemd/system/mysqld.service
  • socket文件:/var/run/mysqld/mysqld.pid

4. 配置(重点)

以上三步都非常容易,但是将这三个环境配置好,还是费了我不少的时间...

4.1  配置Mysql

1[root@localhost ~]# systemctl start mysqld 2# 开启Mysql服务后,会为root设置一个默认密码,我们首先重置密码 3# 获得默认密码 4[root@localhost ~]# cat /var/log/mysqld.log | grep -i password 5[root@localhost ~]# mysql -uroot -p 6Enter password: 7Welcome to the MySQL monitor. Commands end with ; or \g. 8Your MySQL connection id is 8 9Server version: 5.7.23 MySQL Community Server (GPL) 10 11mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'Sam_tech_0912'; 12 13# 重置密码后,我们创建一个数据库,因为后续django连接Mysql时需要输入数据库名称 14mysql> create database Platform default charset=utf8; 15Query OK, 1 row affected (0.00 sec) 16 17mysql> quit 18Bye

4.2  django中配置Mysql

django中关于Mysql的配置:

1DATABASES = { 2 'default': { 3 # 'ENGINE': 'django.db.backends.sqlite3', 4 # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 5 'ENGINE': 'django.db.backends.mysql', 6 'NAME': 'Platform', 7 'HOST': '127.0.0.1', 8 'PORT': '3306', 9 'USER': 'root', 10 'PASSWORD': 'Sam_tech_0912', 11 } 12}

django中其他的部分的配置:

1DEBUG = True 2 3ALLOWED_HOSTS = ["*",] 4 5TEMPLATES = [ 6 { 7 'BACKEND': 'django.template.backends.django.DjangoTemplates', 8 'DIRS': [os.path.join(BASE_DIR, "templates"),], 9 'APP_DIRS': True, 10 'OPTIONS': { 11 'context_processors': [ 12 'django.template.context_processors.debug', 13 'django.template.context_processors.request', 14 'django.contrib.auth.context_processors.auth', 15 'django.contrib.messages.context_processors.messages', 16 ], 17 }, 18 }, 19] 20 21LANGUAGE_CODE = 'zh-hans' 22 23TIME_ZONE = 'Asia/Shanghai' 24 25USE_I18N = True 26 27USE_L10N = True 28 29USE_TZ = True 30 31STATIC_URL = '/static/' 32STATICFILES_DIRS = [ 33 os.path.join(BASE_DIR, "static"), 34] 35 36MEDIA_URL = "/media/" 37MEDIA_ROOT = os.path.join(BASE_DIR, "media")

补充:

关于 Error loading MySQLdb module: No module named MySQLdb

--> yum install MySQL-python

4.3  配置Apache

重点:安装mod_wsgi

1[root@localhost ~]# yum install mod_wsgi 2[root@localhost ~]# rpm -qa | grep wsgi 3mod_wsgi-3.4-12.el7_0.x86_64

编辑配置文件 /etc/httpd/conf/httpd.conf

1ServerRoot "/etc/httpd" 2 3# 设定Apache监听的端口号,可以设定多个 4Listen 80 5 6# 重点:这句是加载刚刚安装的wsgi模块,有了它django才能部署到Apache上,切记!!! 7LoadModule wsgi_module modules/mod_wsgi.so 8 9 10Include conf.modules.d/*.conf 11 12User apache 13Group apache 14 15ServerAdmin root@localhost 16 17ServerName localhost:80 18 19<Directory /> 20 AllowOverride none 21 Require all denied 22</Directory> 23 24 DocumentRoot "/var/www/html" 25 26<Directory "/var/www"> 27 AllowOverride None 28 Require all granted 29</Directory> 30 31<Directory "/var/www/html"> 32 Options Indexes FollowSymLinks 33 34 AllowOverride None 35 36 Require all granted 37</Directory> 38 39<IfModule dir_module> 40 DirectoryIndex index.html 41</IfModule> 42 43<Files ".ht*"> 44 Require all denied 45</Files> 46 47ErrorLog "logs/error_log" 48 49LogLevel warn 50 51<IfModule log_config_module> 52 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 53 LogFormat "%h %l %u %t \"%r\" %>s %b" common 54 55 <IfModule logio_module> 56 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 57 </IfModule> 58 59 CustomLog "logs/access_log" combined 60</IfModule> 61 62<IfModule alias_module> 63 64 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 65 66</IfModule> 67 68<Directory "/var/www/cgi-bin"> 69 AllowOverride None 70 Options None 71 Require all granted 72</Directory> 73 74<IfModule mime_module> 75 TypesConfig /etc/mime.types 76 77 AddType application/x-compress .Z 78 AddType application/x-gzip .gz .tgz 79 80 81 82 AddType text/html .shtml 83 AddOutputFilter INCLUDES .shtml 84</IfModule> 85 86AddDefaultCharset UTF-8 87 88<IfModule mime_magic_module> 89 MIMEMagicFile conf/magic 90</IfModule> 91 92 93EnableSendfile on 94 95IncludeOptional conf.d/*.conf 96 97# 我们在/etc/httpd/conf/下新建httpd-vhosts.conf虚拟主机配置文件,完成对80端口的配置 98# 这句是告诉Apache去调用httpd-vhosts.conf 99# 虚拟主机中的配置参数将覆盖httpd.conf主配置文件中的设定 100Include conf/httpd-vhosts.conf

虚拟主机配置文件(关键一步

1<VirtualHost *:80> 2 ServerAdmin samliuming@aliyun.com 3 DocumentRoot "/home/python_projects/Platform" 4 ServerName samlinux01-platform.com 5 ServerAlias sam-platform.com 6 ErrorLog "logs/platform_error.log" 7 CustomLog "logs/platform_access.log" common 8 9 10 WSGIScriptAlias / "/home/python_projects/Platform/Platform/wsgi.py" 11 # 一定要定义python-path到项目目录,否则会报出相关模块无法找到的错误,切记!!! 12 WSGIDaemonProcess samlinux01-platform.com python-path=/home/python_projects/Platform:/usr/lib64/python2.7/site-packages 13 WSGIProcessGroup samlinux01-platform.com 14 WSGIScriptReloading On 15 16 # 设定Apache访问django的项目目录 17 18 Alias /static /home/python_projects/Platform/static 19 Alias /media /home/python_projects/Platform/media  # 注意:将python中django admin的静态文件链接到static目录下,否则会出现登录django admin静态文件404的问题  # ln -s /usr/lib64/python2.7/site-packages/django/contrib/admin/static/admin admin 20 21 <Directory /home/python_projects/Platform/media> 22 AllowOverride None 23 Options Indexes FollowSymLinks 24 Require all granted 25 </Directory> 26 <Directory /home/python_projects/Platform/static> 27 AllowOverride None 28 Options Indexes FollowSymLinks 29 Require all granted 30 </Directory> 31 <Directory /home/python_projects/Platform/Platform> 32 <Files wsgi.py> 33 AllowOverride None 34 Require all granted 35 </Files> 36 </Directory> 37</VirtualHost>

注意:每次编辑完成后都需要重启httpd服务使配置生效

1[root@localhost ~]# httpd -t 2[Thu Aug 16 20:35:06.439115 2018] [so:warn] [pid 1520] AH01574: module wsgi_module is already loaded, skipping 3Syntax OK 4[root@localhost ~]# systemctl restart httpd.service

编辑django中的 wsgi.py文件

1""" 2WSGI config for Platform project. 3 4It exposes the WSGI callable as a module-level variable named ``application``. 5 6For more information on this file, see 7https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ 8""" 9 10import os 11 12from django.core.wsgi import get_wsgi_application 13 14os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Platform.settings") 15 16application = get_wsgi_application() 17 18# 添加项目路径到python的环境变量中 19# For Apache server 20import sys 21project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 22sys.path.insert(0, project_dir)

至此,大功告成,我们直接可以通过80端口访问我们的项目,虽然上面的步骤简单,但是网上查的资料并没有特别详细完整的,中间还是走了不少的弯路,所以特意将配置步骤记录下来,方便后续再次配置!

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Linux下配置Django_Apache_Mysql环境(CentOS 7.5) - HelloWorld