使用PythonAnywhere部署Cookiecutter Django项目指南
cookiecutter-django 项目地址: https://gitcode.com/gh_mirrors/coo/cookiecutter-django
概述
本文将详细介绍如何将基于Cookiecutter Django框架开发的项目部署到PythonAnywhere平台。PythonAnywhere是一个流行的Python云端开发环境,特别适合中小型Django项目的部署。
准备工作
在开始部署前,请确保:
- 项目代码已完整提交到代码仓库
- 已准备好所有必要的环境变量和配置信息
- 了解PythonAnywhere的基本操作
部署步骤详解
1. 获取项目代码并设置虚拟环境
在PythonAnywhere的Bash控制台中执行以下命令:
git clone <项目仓库地址>
cd <项目目录>
mkvirtualenv --python=/usr/bin/python3.10 <虚拟环境名称>
pip install -r requirements/production.txt
注意:由于PythonAnywhere目前仅支持Python 3.10,而Cookiecutter Django默认生成的是Python 3.12项目,这里需要特别指定Python版本。如果未来PythonAnywhere支持更高版本,可以相应调整。
2. 配置环境变量
生成一个安全的密钥:
python -c 'import random;import string; print("".join(random.SystemRandom().choice(string.digits + string.ascii_letters + string.punctuation) for _ in range(50)))'
编辑虚拟环境的postactivate脚本:
vi $VIRTUAL_ENV/bin/postactivate
添加以下环境变量:
export WEB_CONCURRENCY=4
export DJANGO_SETTINGS_MODULE='config.settings.production'
export DJANGO_SECRET_KEY='<生成的密钥>'
export DJANGO_ALLOWED_HOSTS='<你的域名>'
export DJANGO_ADMIN_URL='<自定义管理后台路径>'
export MAILGUN_API_KEY='<Mailgun API密钥>'
export MAILGUN_DOMAIN='<Mailgun域名>'
export DJANGO_AWS_ACCESS_KEY_ID=''
export DJANGO_AWS_SECRET_ACCESS_KEY=''
export DJANGO_AWS_STORAGE_BUCKET_NAME=''
export DATABASE_URL='<数据库连接URL>'
export REDIS_URL='<Redis连接URL>'
3. 数据库配置
PythonAnywhere支持多种数据库:
PostgreSQL配置
- 在Databases标签页设置PostgreSQL超级用户密码
- 创建数据库:
CREATE DATABASE my-db-name
- 建议为应用创建专用角色而非使用超级用户
MySQL配置
- 设置密码并创建数据库
- 可能需要安装mysqlclient:
pip install mysqlclient
SQLite配置
仅适用于小型测试项目
设置DATABASE_URL环境变量:
# PostgreSQL示例
export DATABASE_URL='postgres://<用户名>:<密码>@<地址>:<端口>/<数据库名>'
# MySQL示例
export DATABASE_URL='mysql://<用户名>:<密码>@<地址>/<数据库名>'
# SQLite示例
export DATABASE_URL='sqlite:home/<用户名>/path/to/db.sqlite'
4. 执行数据库迁移和静态文件收集
source $VIRTUAL_ENV/bin/postactivate
python manage.py migrate
python manage.py collectstatic
# 如果使用django-compressor
python manage.py compress
# 可选:创建超级用户
python manage.py createsuperuser
5. Redis配置
PythonAnywhere不提供内置Redis服务,建议使用第三方Redis托管服务,如Redis Labs等。
6. 配置Web应用
- 在Web标签页点击"Add new web app"
- 选择"Manual Config"和与虚拟环境匹配的Python版本
- 设置虚拟环境路径
- 编辑WSGI配置文件,添加环境变量:
import os
import sys
path = '/home/<用户名>/<项目目录>'
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.production'
os.environ['DJANGO_SECRET_KEY'] = '<密钥>'
os.environ['DJANGO_ALLOWED_HOSTS'] = '<允许的域名>'
os.environ['DJANGO_ADMIN_URL'] = '<管理后台路径>'
os.environ['MAILGUN_API_KEY'] = '<Mailgun API密钥>'
os.environ['MAILGUN_DOMAIN'] = '<Mailgun域名>'
os.environ['DJANGO_AWS_ACCESS_KEY_ID'] = ''
os.environ['DJANGO_AWS_SECRET_ACCESS_KEY'] = ''
os.environ['DJANGO_AWS_STORAGE_BUCKET_NAME'] = ''
os.environ['DATABASE_URL'] = '<数据库URL>'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
- 点击"Reload"使应用生效
7. 静态文件处理(可选)
如果不想使用Whitenoise或S3,可以使用PythonAnywhere的静态文件服务,需在Web标签页配置与STATIC_URL
和STATIC_ROOT
匹配的路径。
后续部署流程
项目上线后,更新部署变得非常简单:
workon <虚拟环境名称>
cd <项目目录>
git pull
python manage.py migrate
python manage.py collectstatic
# 如果使用django-compressor
python manage.py compress
然后在Web标签页点击"Reload"即可。
常见问题解决
- SSL警告:在设置SSL证书前,可以临时设置
DJANGO_SECURE_SSL_REDIRECT
为空来禁用安全警告 - Python版本问题:如果遇到Python版本兼容性问题,可以尝试调整项目中的Python版本要求
- 静态文件404错误:检查Web标签页中的静态文件配置是否正确
最佳实践建议
- 为生产环境使用专用数据库用户而非超级用户
- 定期备份数据库
- 考虑使用自动化部署脚本简化流程
- 监控应用性能和资源使用情况
通过以上步骤,您应该能够成功将Cookiecutter Django项目部署到PythonAnywhere平台。如果在部署过程中遇到任何问题,可以参考PythonAnywhere的官方文档或社区支持资源。
cookiecutter-django 项目地址: https://gitcode.com/gh_mirrors/coo/cookiecutter-django
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考