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/activate3.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 collectstatic4.3 Gunicorn+Supervisor部署
安装Gunicorn:
pip install gunicornSupervisor配置示例:
[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 eduplatform5. 安全加固与性能调优
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 # 如果使用HTTPS5.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 info6. 监控与维护
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.67.2 静态文件404错误
可能原因:
- Nginx配置路径不正确
- 未执行collectstatic
- 文件权限问题
检查步骤:
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 eduplatform8. 项目迁移与备份策略
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.gz8.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 master8.3 完整迁移流程
- 在新服务器上重复上述安装步骤
- 恢复数据库备份
- 拉取代码仓库
- 迁移媒体文件
- 更新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