CentOS 6.5部署Django+Xadmin在线教育平台实战

1. 项目背景与核心挑战

在CentOS 6.5生产环境中部署基于Django+Xadmin的在线教育平台,面临着几个关键的技术挑战。首先,CentOS 6.5默认搭载的是Python 2.6版本,而现代Django项目通常需要Python 3.x环境。其次,Xadmin作为Django的优秀后台管理替代方案,对Python和Django版本有特定要求。最后,生产环境部署需要考虑系统稳定性、安全性和性能优化等关键因素。

这个部署方案的核心价值在于:

  • 解决了老旧系统(CentOS 6.5)与现代Python框架的兼容性问题
  • 提供了从开发到生产环境的完整迁移路径
  • 确保了在线教育平台在高并发场景下的稳定运行
  • 通过Xadmin实现了强大的后台管理功能

提示:虽然CentOS 6.5已经EOL(生命周期结束),但很多企业的生产环境仍在使用,这种部署方案对遗留系统升级有重要参考价值。

2. 环境准备与Python 3.5.1编译安装

2.1 系统基础环境配置

在开始安装前,需要确保系统具备编译Python所需的基础开发环境:

yum groupinstall "Development Tools" yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

这些依赖包的作用分别是:

  • zlib/bzip2:压缩解压支持
  • openssl:HTTPS/SSL支持
  • sqlite:轻量级数据库支持
  • readline:交互式命令行编辑功能
  • tk:GUI界面支持

2.2 Python 3.5.1源码编译安装

下载Python 3.5.1源码并编译:

wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz tar xzf Python-3.5.1.tgz cd Python-3.5.1 ./configure --prefix=/usr/local/python3.5 --enable-optimizations make -j$(nproc) make altinstall

关键参数说明:

  • --prefix:指定安装目录,避免与系统Python冲突
  • --enable-optimizations:启用PGO优化,提升性能约10-20%
  • make altinstall:防止覆盖系统默认Python命令

2.3 环境变量配置

创建Python 3.5的软链接并更新PATH:

ln -s /usr/local/python3.5/bin/python3.5 /usr/local/bin/python3 ln -s /usr/local/python3.5/bin/pip3.5 /usr/local/bin/pip3 echo 'export PATH=/usr/local/python3.5/bin:$PATH' >> /etc/profile source /etc/profile

验证安装:

python3 -V # 应显示Python 3.5.1 pip3 -V # 应显示对应版本

3. Django与Xadmin环境配置

3.1 虚拟环境创建与激活

使用virtualenv创建隔离环境:

pip3 install virtualenv virtualenv -p /usr/local/bin/python3 /opt/eduplatform source /opt/eduplatform/bin/activate

3.2 Django与依赖安装

在虚拟环境中安装Django及必要依赖:

pip install django==1.11.29 # 与Python 3.5兼容的稳定版本 pip install pytz # 时区支持 pip install six # 兼容性库

注意:Django 1.11是最后一个支持Python 3.5的LTS版本,新项目建议使用更高版本Python和Django

3.3 Xadmin安装与配置

安装兼容版本的Xadmin:

pip install https://github.com/sshwsfc/xadmin/archive/django1.11.zip

在settings.py中添加配置:

INSTALLED_APPS = [ ... 'xadmin', 'crispy_forms', 'reversion', ] # 设置中文界面 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True

配置URL路由:

import xadmin urlpatterns = [ path('xadmin/', xadmin.site.urls), ... ]

4. 生产环境部署优化

4.1 数据库配置优化

对于在线教育平台,建议使用MySQL或PostgreSQL:

yum install mysql-devel # MySQL开发包 pip install mysqlclient # MySQL Python驱动

settings.py数据库配置示例:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'eduplatform', 'USER': 'edu_user', 'PASSWORD': 'complex_password', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4', } } }

4.2 静态文件处理

配置Nginx处理静态文件:

server { listen 80; server_name edu.example.com; location /static/ { alias /opt/eduplatform/static/; expires 30d; } location /media/ { alias /opt/eduplatform/media/; expires 30d; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

Django静态文件收集:

python manage.py collectstatic

4.3 Gunicorn+Supervisor部署

安装Gunicorn:

pip install gunicorn

Supervisor配置示例:

[program:eduplatform] command=/opt/eduplatform/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 eduplatform.wsgi:application directory=/opt/eduplatform/src user=www-data autostart=true autorestart=true redirect_stderr=true

启动服务:

supervisorctl reread supervisorctl update supervisorctl start eduplatform

5. 安全加固与性能调优

5.1 基础安全配置

settings.py关键安全设置:

SECRET_KEY = '生成一个强密钥' # 实际使用中应从环境变量读取 DEBUG = False ALLOWED_HOSTS = ['edu.example.com', 'localhost'] CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True # 如果使用HTTPS

5.2 缓存优化

配置Redis缓存:

CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }

5.3 异步任务处理

对于在线教育平台的异步任务(如视频转码、邮件发送等),配置Celery:

# settings.py CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

启动Celery worker:

celery -A eduplatform worker -l info

6. 监控与维护

6.1 日志配置

settings.py日志配置:

LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/var/log/django/eduplatform.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }

6.2 性能监控

安装django-debug-toolbar(仅开发环境):

pip install django-debug-toolbar

配置:

if DEBUG: INSTALLED_APPS += ['debug_toolbar'] MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware'] INTERNAL_IPS = ['127.0.0.1']

生产环境推荐使用Prometheus+Grafana监控方案。

7. 常见问题排查

7.1 Python版本冲突

症状:yum命令无法使用 解决方案:

vim /usr/bin/yum

将第一行改为:

#!/usr/bin/python2.6

7.2 静态文件404错误

可能原因:

  1. Nginx配置路径不正确
  2. 未执行collectstatic
  3. 文件权限问题

检查步骤:

ls -l /opt/eduplatform/static/ nginx -t # 检查Nginx配置 sudo chown -R www-data:www-data /opt/eduplatform/static/

7.3 数据库连接问题

常见错误:

  • MySQL "Access denied":检查用户权限
  • "Can't connect to local MySQL server":确保MySQL服务运行
  • "Unknown character set":确保使用utf8mb4

测试连接:

mysql -u edu_user -p -h localhost eduplatform

8. 项目迁移与备份策略

8.1 数据库备份

设置定时备份任务:

# /etc/cron.d/db-backup 0 3 * * * root mysqldump -u edu_user -p'password' eduplatform | gzip > /backup/eduplatform_$(date +\%Y\%m\%d).sql.gz

8.2 代码备份

使用git进行版本控制,并设置远程仓库:

cd /opt/eduplatform/src git init git remote add origin git@example.com:yourrepo/eduplatform.git git add . git commit -m "Initial commit" git push -u origin master

8.3 完整迁移流程

  1. 在新服务器上重复上述安装步骤
  2. 恢复数据库备份
  3. 拉取代码仓库
  4. 迁移媒体文件
  5. 更新DNS记录

我在实际部署中发现,使用Ansible可以自动化整个迁移过程,特别是当需要部署到多台服务器时。以下是一个简单的playbook示例:

- hosts: edu_servers tasks: - name: Install Python 3.5 yum: name: "{{ item }}" state: present with_items: - zlib-devel - openssl-devel - sqlite-devel - name: Clone repository git: repo: git@example.com:yourrepo/eduplatform.git dest: /opt/eduplatform/src - name: Restore database command: > mysql -u edu_user -p'password' eduplatform < /backup/latest.sql