python3.4.5+django2.0.4+centOS6.9+mod_wsgi4.5.7+apache2.2

     django是python比较流行的一个web框架,通过近一周的学习,打算把项目搬到centOS服务器上,却遇到了各种问题,网上的教程多是只言片语,因此在此记录一下详细的搭建步骤,由于本人也是第一次接触linux系统,所以有什么不对的地方还烦请指出,不胜感激。

查看centOS版本:cat  /etc/redhat-release  
 

2、安装python3

提示:可以根据自己的系统版本决定,推荐3.4.5较为稳定,高版本的系统自带的有python3,所以无需安装,直接跳过

*查看已安装的python版本:可见执行文件在 /usr/bin/ 目录下,切换到该目录下执行 ll python* 命令查看 

建议安装python3.6版本,可以参考后面的链接

*安装python3的相关依赖包:yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
*安装wegt:yum -y install wget
*下载安装包:wget https://www.python.org/ftp/python/3.4.5/Python-3.4.5.tar.xz

*解压:tar -xvJf  Python-3.4.5.tar.xz
*切换进入:cd Python-3.4.5
*编译安装:./configure prefix=/usr/local/python3   
                make && make install
*添加软链到执行目录下:ln -s /usr/local/python3/bin/python3 /usr/bin/python
*查看是否安装:python3 -V

最重要的一步要安装python的工具集,曾为了这个问题浪费了我整整10个多小时的时间
yum install python3-devel

参考文章:https://www.cnblogs.com/JahanGu/p/7452527.html

 

3、安装apache

提示:以下是centOS的示例,如果出现  command not found  说明我们centOS版本不一致,具体的命令可以自行百度

*安装:yum install httpd 
            yum install httpd-devel   这个必须要装否则后面找不到apxs的
*开启Apache:systemctl start httpd.service
*查看Apache 服务的运行状态:systemctl status httpd.service

*重启服务器自动开启Apache:systemctl enable httpd.service
*更改站点根目录:vim /etc/httpd/conf/httpd.conf

*打开防火墙:

    centOS6vi /etc/sysconfig/iptables 按i键进入编辑模式,在文件里追加如下一行代码:-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
     centOS7:firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

*重启下 iptables 服务:
     centOS6systemctl restart iptables.service 
     centOS7:firewall-cmd --reload
 service httpd start     启动
 service httpd restart   重新启动
 service httpd stop       停止服务

参考文章:https://blog.csdn.net/aerchi/article/details/72830535
             https://blog.csdn.net/c233728461/article/details/52679558

             https://www.cnblogs.com/hltswd/p/6929904.html

 

4、创建python3虚拟环境3.4.5

*安装pip:yum -y install epel-release
               yum -y install python-pip

*安装插件:pip install virtualenv
*进入存放目录:cd var/www
*新建环境:virtualenv -p /usr/bin/python3.4 py3

*激活停用:source py3/bin/activate   
                source py3/bin/deactivate

参考文章:https://www.cnblogs.com/highfly2012/p/7634480.html

 

5、安装mod_wsgi

注意:这里是是一个巨坑,我就是一不小心就掉进这个坑里了,通过官方源的方式来安装,其实是基于python2的,而我的开发环境是python3的,所以在连接启动Apache,查看错误日志

[Wed May 23 10:33:59 2018] [notice] Apache/2.2.15 (Unix) DAV/2 mod_wsgi/4.5.7 Python/2.6.6 configured -- resuming normal operations
......
lru_cache not Module

我明明配置了python3的虚拟环境了呀,并且在config 指定了使用python3,说是找不到lru_cache,后来百度说lru_cache是python3的内置模块,python2不支持,辛苦研究了两天,原来是  mod_wsgi 是运行在python2上的,虽然它使用的是你指定的python3的虚拟环境,解决方案如下:

 

centos系统
*如果项目使用的Python2,可以直接使用:yum install mod_wsgi
*如果使用了python3,则需要手动编译安装

# 建议替换最新包
wget https://pypi.python.org/packages/28/a7/de0dd1f4fae5b2ace921042071ae8563ce47dac475b332e288bc1d773e8d/mod_wsgi-4.5.7.tar.gz
# 解压并进入目录
tar -zxvf mod_wsgi-4.5.7.tar.gz && cd mod_wsgi-4.5.7
# 配置路径
./configure --with-apxs=/[Your path]/apxs --with-python=/[Your path]/python
make && make install

Ubuntu系统:
python2:sudo apt-get install libapache2-mod-wsgi-py

 

python3:  sudo apt-get install libapache2-mod-wsgi-py3

 


参考文章:https://www.jianshu.com/p/d209897663c9

 

6、安装django 开发插件

pip install django  //django
pip install django-cors-headers   //处理跨域
pip install mysqlclient   //mysql中间件需要先安装mysql

 

7、安装mysql数据库

yum list | grep mysql 或 yum -y list mysql*
如果没有(一般在centos7下没有)
      wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
      rpm -ivh mysql-community-release-el7-5.noarch.rpm

      然后安装mysql
      yum install mysql-server
      yum install mysql-devel

如果有mysql-server,则按下面步骤
      yum install mysql 
      安装mysql 服务器端:
      yum install mysql-server
      yum install mysql-devel

      然后在mysql配置文件/etc/my.cnf的[mysqld]中加入character-set-server=utf8
然后启动mysql服务  service mysqld start
登录mysql  mysql -u root -p  刚安装密码为空,直接按回车
切换到mysql数据库:use mysql;
然后修改密码  UPDATE user SET password=password("你的密码") WHERE user='root';
刷新权限   FLUSH PRIVILEGES;

之后采用 mysql -h 127.0.0.1 -u root -p  登录然后输入密码
创建数据库   create database if not  exists 数据库名
开启远程访问:grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
重启mysql:service mysqld restartservice 

参考文章:https://blog.csdn.net/wz1226864411/article/details/76146180

             https://www.cnblogs.com/luoluo520/p/7016110.html

 

8、测试django开发模式是否正常运行

*更新数据库:python manage.py migrate
*修改settings.py,配置数据库信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',               #数据库名称
        'USER': '',              #用户名
        'PASSWORD': '',  #密码
        'HOST': '',      #HOST
        'PORT': '',              #端口
    }
}

*运行:python manage.py runserver    如果有报错,就按照提示安装缺少的模块

 

9、配置django与wsgi的连接

*修改文件wsgi.py

import os
from os.path import join,dirname,abspath
 
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys 
sys.path.insert(0,PROJECT_DIR) 
 
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" 
 
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

*修改/mysite/mysite下面的__init__.py 添加如下内容

import pymysql
pymysql.install_as_MySQLdb()

至于原因,请参考https://www.cnblogs.com/TaleG/p/6735099.html

10、配置apache

 

<VirtualHost *:80>

ServerName 116.62.140.207:80

# 改为你自己的域名

# ServerAlias otherdomain.com

# ServerAdmin youremail@gmail.com

# 存放用户上传图片等文件的位置,注意去掉#号

Alias /media/ /var/www/mysite/media/ 

# 静态文件(js/css/images)

Alias /static/ /var/www/mysite/myapp/templates/static/                

# 允许通过网络获取static的内容

<Directory /var/www/mysite/myapp/templates/static/>    

    Require all granted

</Directory>

# 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /

WSGIDaemonProcess http://127.0.0.1:80 python-path=/var/www/mysite:/var/www/py3/lib/python3.4/site-packages
WSGIProcessGroup http://127.0.0.1:80
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py  

# wsgi.py文件的父级目录,第一个ProjectName为Django工程目录

# 第二个ProjectName为Django自建的与工程同名的目录

<Directory /var/www/mysite/mysite/>              

<Files wsgi.py>

    Require all granted

</Files>

</Directory>

</VirtualHost>

重启Apache服务,然后根据 vi /var/log/httpd/error_log 中的报错进行处理

 

因为要分操作系统,版本以及本人接触时间短等原因,不能保证以上的内容全部正确,如有错误或者需要补充的,欢迎指出。不胜感激!在Ubuntu系统上的部署可以参考下面的文章

https://blog.csdn.net/unlimited_aki/article/details/77997256

如果出现了没有权限访问数据库的情况可以运行一下命令

因SELinux阻止apache访问,另一个问题就是需要为apache授权:

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

https://my.oschina.net/crazyharry/blog/337418

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值