CentOS 6.5部署Django+Xadmin在线教育系统实战 1. 项目背景与核心需求在线教育平台作为当前互联网教育的主流形态对系统稳定性、可维护性和安全性有着极高要求。这次我们要在CentOS 6.5生产环境中部署基于DjangoXadmin的在线教育系统这是一个典型的Python Web项目实战案例。选择CentOS 6.5作为生产环境主要考虑企业级服务器的长期稳定支持而Python 3.5.1则是当时Django 1.11.x系列推荐使用的版本组合。这个部署方案需要解决几个关键问题在老旧系统上安装新版Python的兼容性问题生产环境与开发环境的配置差异Xadmin后台管理系统的依赖处理高并发场景下的性能优化2. 环境准备与Python安装2.1 CentOS 6.5基础配置首先确保系统已经更新到最新补丁yum update -y yum groupinstall Development Tools -y yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y注意CentOS 6.5默认的openssl版本较旧需要先升级到1.0.2以上版本才能支持Python 3.5的ssl模块。2.2 Python 3.5.1源码编译安装下载并编译Python源码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 make altinstall关键配置参数说明--enable-optimizations启用PGO优化提升约10%性能--prefix指定自定义安装目录避免污染系统Pythonmake altinstall防止替换系统默认python命令创建软链接ln -s /usr/local/python3.5/bin/python3.5 /usr/bin/python3 ln -s /usr/local/python3.5/bin/pip3.5 /usr/bin/pip3验证安装python3 -V # 应显示Python 3.5.1 pip3 -V # 应显示对应版本3. 项目依赖与环境隔离3.1 创建虚拟环境使用virtualenv创建隔离环境pip3 install virtualenv virtualenv -p /usr/bin/python3 /opt/venv_edu source /opt/venv_edu/bin/activate3.2 安装项目依赖准备requirements.txt文件Django1.11.29 django-xadmin0.6.1 mysqlclient1.4.6 pillow6.2.2 uwsgi2.0.19.1安装依赖pip install -r requirements.txt常见问题mysqlclient安装失败通常是因为缺少MySQL开发库需先执行yum install mysql-devel4. 生产环境部署配置4.1 Django项目设置调整修改settings.py关键配置DEBUG False ALLOWED_HOSTS [yourdomain.com, 服务器IP] # 数据库配置 DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: edu_platform, USER: edu_user, PASSWORD: 复杂密码, HOST: localhost, PORT: 3306, OPTIONS: { init_command: SET sql_modeSTRICT_TRANS_TABLES, } } } # 静态文件配置 STATIC_ROOT /var/www/edu_static/ STATIC_URL /static/4.2 Xadmin特殊配置处理Xadmin需要额外静态文件收集python manage.py collectstaticurls.py配置示例from django.conf.urls import url, include import xadmin urlpatterns [ url(r^xadmin/, xadmin.site.urls), # 其他URL配置... ]5. uWSGINginx高可用部署5.1 uWSGI配置创建/etc/edu_uwsgi.ini[uwsgi] chdir /opt/edu_project module edu_platform.wsgi:application master true processes 4 threads 2 socket /tmp/edu.sock chmod-socket 660 vacuum true daemonize /var/log/uwsgi/edu.log pidfile /tmp/edu.pid启动命令uwsgi --ini /etc/edu_uwsgi.ini5.2 Nginx配置/etc/nginx/conf.d/edu.confupstream django { server unix:///tmp/edu.sock; } server { listen 80; server_name yourdomain.com; charset utf-8; location /static { alias /var/www/edu_static; } location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; } }重启Nginxservice nginx restart6. 安全加固与性能优化6.1 基础安全措施关闭不必要的服务chkconfig bluetooth off chkconfig cups off配置防火墙规则iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -j DROP service iptables save6.2 Django安全配置settings.py增加SECURE_BROWSER_XSS_FILTER True SECURE_CONTENT_TYPE_NOSNIFF True SESSION_COOKIE_SECURE True CSRF_COOKIE_SECURE True X_FRAME_OPTIONS DENY6.3 性能优化建议数据库优化DATABASES { default: { # ... CONN_MAX_AGE: 60, # 启用持久连接 } }缓存配置CACHES { default: { BACKEND: django.core.cache.backends.memcached.MemcachedCache, LOCATION: 127.0.0.1:11211, } }7. 运维监控与日志管理7.1 系统监控设置安装基础监控工具yum install sysstat -y配置crontab定期任务*/5 * * * * /usr/lib64/sa/sa1 1 1 */10 * * * * /usr/lib64/sa/sa2 -A7.2 Django日志配置settings.py示例LOGGING { version: 1, disable_existing_loggers: False, handlers: { file: { level: DEBUG, class: logging.FileHandler, filename: /var/log/django/edu.log, }, }, loggers: { django: { handlers: [file], level: INFO, propagate: True, }, }, }8. 常见问题排查指南502 Bad Gateway错误检查uWSGI进程是否运行ps aux | grep uwsgi检查socket文件权限确保nginx用户有访问权限查看uWSGI日志tail -f /var/log/uwsgi/edu.log静态文件加载失败确认执行了collectstatic检查Nginx配置中的alias路径确保static目录有正确权限chown -R nginx:nginx /var/www/edu_static数据库连接问题检查MySQL用户权限确认数据库服务正常运行测试直接连接mysql -u edu_user -p edu_platformXadmin界面样式异常确认所有静态文件已收集检查浏览器控制台是否有404错误尝试清除浏览器缓存在实际部署中遇到最多的问题是CentOS 6.5的旧版openssl与Python 3.5的兼容性问题。我的经验是先升级openssl到1.0.2以上版本再编译Python可以避免后续各种ssl相关的模块导入错误。另一个坑是uWSGI的socket文件权限生产环境中一定要确保nginx用户和uWSGI用户在同一个组并设置适当的chmod权限。