【Web应用开发笔记】Django笔记3-2:部署我的简陋网页

1. 上库

将我本地的 学习项目 推送到 github 仓库

  • 先在 github 上创建一个空项目(不带 README.md
  • 本地项目进行 git 初始化
bash 复制代码
cd /path/to/your/project
git init
  • 项目中新增 .gitignore 文件,内容如下
text 复制代码
.venv
*__pycache__
  • 提交到:缓存区 & 本地仓库
bash 复制代码
git add .
git commit -m 'xxx'
  • 连接远程仓库(ssh)
bash 复制代码
git remote add origin git@github.com:XXX/learn_django.git
  • 推到远程仓库
bash 复制代码
git push origin master

2. 部署

2.1 PythonAnywhere

  • 网址:https://www.pythonanywhere.com/
  • 额度:可以免费创建一个 web 应用,为期一个月
    • 我的目的是学习过程中进行一些实践,所以目前来看够用。
    • 如果超过一个月我还需要进行学习实践,那我再看看如何续费,又或者找国内的云服务器。
  • 页面

在左侧Consoles里面可以打开终端,从而可以输入 cmd 命令。

在右侧点击 Web apps 可以创建新的 web app。

2.1.1 终端下载git项目

    1. 如果需要免密下载,则需要配置 ssh 相关内容。
bash 复制代码
ssh-keygen -t ed25519 -C "your_email@example.com"

然后查看 ~/.ssh/id_ed25519.pub 文件内容

bash 复制代码
cat ~/.ssh/id_ed25519.pub

将内容拷贝并填写到 github 的 new ssh key 里面(具体操作我不赘述,可以直接问 AI)

    1. 然后下载自己的git项目
    • 注意,这里的项目名字定义成临时的,是为了防止和后面创建服务的过程相冲突。
bash 复制代码
git clone git@github.com:XXX/learn_django.git learn_django_tmp

2.1.2 创建 web 服务

2.1.2.1 初次创建

在 PythonAnywhere 的仪表板中点击 web apps,进入页面后可以创建web应用

由于我已经创建过一个web应用了(达到额度上限),现在没法展示新的创建过程。不过我记住如下注意点:

  • 项目路径我是放在 /home/xxx/project 下面
  • 项目名称我起名为 learn_django
    实际创建完成后,可以在终端中进行显示,看到类似于这样的结构
text 复制代码
/home/xxx/project/learn_django # <=== 1.
├── learn_django/ # <=== 2.
├── media/
├── static/
└── manage.py

这里用 "<===" 标注了需要注意的文件

    1. 外层整个项目的名字是 learn_django
    1. 内部 django 项目主体文件夹的名字也是 learn_django
      上面这些都是需要我在替换个人项目时需要注意的。
2.1.2.2 拷贝 & 修改项目代码
  • 文件拷贝
    首先到我们的项目的上层文件夹
bash 复制代码
cd ~/project

现在里面有 learn_django(这是创建 web 应用时生成的)和 learn_django_tmp(我克隆的 git 项目)

先备份 learn_django

bash 复制代码
mv learn_django learn_django_new 

然后改名我们的 git 项目

bash 复制代码
mv learn_django_tmp learn_django

现在 ~/project 下有 learn_django_new(这是创建 web 应用时生成的)和 learn_django(我克隆的 git 项目)

  • 接下来补充 python 环境
bash 复制代码
cd learn_django

python3.11 -m venv .venv

source .venv/bin/activate
pip install -r requirements.txt

这里的 requirements.txt 是我项目里面有的,在我的博客《Django笔记2:一个Hello World网页》里面有提到如何生成,或者问AI也可以,很简单。

  • 接下来可能需要修改代码
    这取决于git中的项目名称 与 使用 PythonAnywhere 创建web应用 时采用的名称是否一致
    比如我的项目虽然叫 learn_django,但我的目录里面实际是这样
text 复制代码
├── .venv/
├── django_project/ # 看这里 <===
├── pages/
├── templates/
├── db.sqlite3
└── manage.py

这意味着我需要将 django_project 文件夹名称改成 learn_django

然后还需要修改所有相关的代码,我在我个人电脑上的项目里搜索了一下(因为用了 git 管理项目,所以本地文件和库是一致的),包括这些文件:

  • 总结
    其实就是为了:将我个人的 git 项目嫁接到 PythonAnywhere创建web应用生成的项目中。
    我采用的方法是在我的git项目中进行修改,把不正确的名称进行修改、补充。

2.1.3 重启服务

  • 在这个页面上你可以进行 reload 重作

点击reload进行重启之后,点击上面的蓝色链接 即可访问

2.1.4 访问

我在手机上进行了网页访问,是成功的:

目前很简陋,因为仍在学习基础知识。这里仅验证部署上线。

2.1.5 上库 & 修改

  • 我在PythonAnywhere的终端创建了一个dev_change_folder_name分支把代码推上去(过程不赘述)
    • 注意可能需要进行git 的 email 和 user name 相关的设置,根据实际情况来操作即可
  • 然后我在我自己的电脑上拉下这个分支
    • 进行测试发现了新问题:localhost的url访问不了了,排查后发现是PythonAnywhere时指定了ALLOWED_HOSTS
    • 进行修复如下(新增两个字符串) '127.0.0.1', 'localhost'):
  • 没问题后,我进行如下操作:
    • dev_change_folder_name 分支:提交改动
    • 切换到 master 分支,合并 dev_change_folder_name 分支
    • master 分支:提交到远程仓库
    • 删除 dev_change_folder_name 分支(远程和本地的)

2.2 失败尝试fly.io:银行卡类型不支持(不建议尝试,仅记录)

我尝试按照书里的方式使用 https://fly.io/dashboard 进行操作,但最后失败了,原因是:

  • Fly配置需要关联银行卡
  • 境内银行卡类型为"银联"
  • Fly不支持银联的银行卡:应该是由于zz因素影响。它还支持使用 "link 支付",不过该支付应用 不支持中国地区。

具体过程如下:

bash 复制代码
curl -L https://fly.io/install.sh | sh

会提示你是否需要将软件路径添加到 .bashrc 中,选择 Y 即可,效果就是在 ~/.bashrc 中添加了如下内容:

bash 复制代码
# 由 flyctl 安装程序添加
export FLYCTL_INSTALL = "/home/xxx/.fly" 
export PATH = " $FLYCTL_INSTALL /bin: $PATH " 

其实就是让 ~/.fly/bin/ 路径添加到 PATH 中,这样就补充输入 ~/.fly/bin/flyctl 而直接输入 flyctl 就可以使用了

需要执行如下命令使令生效

bash 复制代码
source ~/.bashrc
  • 登录
bash 复制代码
flyctl auth login
相关推荐
山岚的运维笔记2 小时前
SQL Server笔记 -- 第86章:查询存储
笔记·python·sql·microsoft·sqlserver·flask
两万五千个小时2 小时前
构建mini Claude Code:11 - 从「被动等待」到「主动找活」
人工智能·python·架构
xhyu612 小时前
【学习笔记】推荐系统 (5.排序:多目标模型、MMoE、融合预估分数、视频播放建模)
笔记·学习·音视频
小鸡吃米…2 小时前
TensorFlow 实现梯度下降优化
人工智能·python·tensorflow·neo4j
悠哉悠哉愿意2 小时前
【物联网学习笔记】中断
笔记·单片机·嵌入式硬件·物联网·学习
njsgcs2 小时前
py不等于python
开发语言·python
掘金者阿豪2 小时前
从MongoDB到金仓数据库:文档数据库国产化替代的实战路径与价值重构
后端
敲敲了个代码2 小时前
构建工具的第三次革命:从 Rollup 到 Rust Bundler,我是如何设计 robuild 的
开发语言·前端·javascript·后端·rust
Penge6662 小时前
Go反射练习:从复杂结构体中提取统一接口实例
后端