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
*打开防火墙:
centOS6:vi /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 服务:
centOS6:systemctl 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