前置环境:购买云服务器安装好 Docker,详细笔记 https://www.acwing.com/blog/content/18517/
配置服务器 SSH 免密登录
创建公钥密钥:ssh-keygen
,一路回车。
在 ~/.ssh
目录下创建 config 文件,定义服务器别名,下次直接使用别名登录 ssh 别名
。
Host django_server
HostName IP地址
User root
使用 root 用户创建一个普通用户,之后在普通用户上进行操作会比较安全,需要管理员权限时 sudo 提权。
adduser tonngw # 创建用户
usermod -aG sudo tonngw # 为用户分配 sudo 权限
修改 config 文件的 root 用户为普通用户
将本地的 ssh 公钥上传到服务器上就可以使用 ssh 免密登录了。
ssh-copy-id 服务器别名
配置 Docker 容器环境及远程登录
进入 cd /var/lib/acwing/docker/images/
上传 Django 镜像到服务器家目录下
scp django_lesson_1_0.tar django_server:
将 Django 镜像导入到 docker 容器中
docker load -i django_lesson_1_0.tar
使用镜像创建并启动容器,其中 -p 表示端口映射,将服务器的 20000 端口映射到容器的 22,这样远程使用 20000 端口就可以登录到 Django 容器了,8000 是 Django 运行的端口,–name 是给容器起名字,-itd(i-interactive 交互、t-tty 设备相关、d-detach 后台启动)
注意:容器创建之后端口不能动态修改,想修改只能将容器 commit 成镜像后再使用镜像重新创建容器的时候指定端口。
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0
进入容器(可以把容器理解成是一个服务器),创建一个普通用户,之后就在普通用户上操作
docker attach django_server
adduser tonngw # 创建用户
usermod -aG sudo tonngw # 为用户分配 sudo 权限
挂起容器(不是关闭容器):Ctrl + P Ctrl + Q
现在到云服务器的控制台安全组中开启我们需要用到的两个端口 20000
和 8000
。
回到 AC Terminal 的 config 文件中配置 ssh 别名登录 Django 容器
Host django
HostName IP地址
User tonngw
Port 20000
再次配置 Django 容器免密登录,这里不重复了
此时就可以用 ssh django
远程登录到我们的 Django 容器了(或者叫 Django 服务器)
上传我们需要用到的工具的配置文件(初恋的感觉hhh):
scp .bashrc .vimrc .tmux.conf django:
每次打开终端都会提示拥有 sudo 权限,只要使用一次就不会再提示了,比如:sudo ls
。
创建 Django 项目
查看 Django 版本 django-admin --version
创建项目:django-admin startproject acapp
,创建名字为 acapp 的 Django 项目
良好的开发习惯:使用 Git 维护项目,方便后期维护和回滚,使用 Tmux 编写代码工作任务不会丢失。
在远程代码管理仓库(GitHub、Gitee、AC Git 等)中创建一个项目,最好和本地项目同名。
初始化 Git,配置用户名和邮箱,具体 Git 笔记看这里 https://www.acwing.com/blog/content/18328/
在当前项目根目录下初始化本地仓库 git init
,创建 README.md 文件(规范,为了方便别人快速了解你的项目)
提交到 Git 本地仓库
git add .
git commit -m "first commit"
配置远程仓库与本地仓库进行关联,并将本地项目推送到远程仓库中
git remote add origin git@git.acwing.com:tonngw/acapp.git # 配置远程关联
git push --set-upstream origin master # 下次 git push 默认推送到远程的 master 分支上
提示输入密码完成推送,每次都要输入密码太麻烦了,为了方便配置 ssh 免密推送
- 将本地的 ssh 公钥添加到 AC Git 中,如果本地还没有生成密钥,使用
ssh-keygen
一路回车生成。 - 再次推送
git push --set-upstream origin master
到这我们项目的第一个版本就上传到 AC Git 上了。
运行项目
运行项目
python3 manage.py runserver 0.0.0.0:8000
使用 IP 访问后发现报错了,需要将 IP 添加到 settings.py 文件中的 ALLOWED_HOSTS 中
小妙招:使用 ag 命令全局搜索内容所在的文件位置,
ag ALLOWED_HOSTS
配置完之后再次打开看到小火箭,恭喜你!你的项目已经成功跑起来了。
每完成一步使用 Git 维护起来,Git 只维护我们有用的代码,我们要排除掉缓存文件等其他没用的内容。
在项目根目录下创建一个 .gitignore
文件,里面存储我们不希望传到 Git 上的文件 / 目录
vim .gitignore
i
*/__pycache__ # ** 可以过滤多层目录
:wq
创建 Django app
创建一个名为 game 的 app,我们在 app 里开发自己的项目
python3 manage.py startapp game
app 的目录结构,一般只会操作 models.py、views.py、urls.py、templates.py,如果一个文件的内容太多,可以改成目录,目录里放多个文件加以区分。
|-- game
| |-- __init__.py
| |-- __pycache__
| | |-- __init__.cpython-38.pyc
| | |-- urls.cpython-38.pyc
| | `-- views.cpython-38.pyc
| |-- admin.py # 后台页面配置
| |-- apps.py # app 的配置
| |-- migrations # 和数据库相关的目录,会自动更新,不需要操作
| | `-- __init__.py
| |-- models.py # 数据库实体配置
| |-- templates # 页面模板
| |-- tests.py # 测试
| |-- urls.py # 路由配置,url 地址到 views 中函数的映射
| `-- views.py # 视图,逻辑处理函数
打开后台页面
关掉服务,同步 Django 自带的表到数据库中
python3 manage.py migrate
启动服务,打开 https://IP:8000/admin
进入后台页面
创建一个超级用户,输入用户名密码,进行登录
python3 manage.py createsuperuser
编写 view.py,创建一个函数,返回一个 HttpResponse。
现在是直接把 HTML 写道 views.py 中了,后面应该会独立到 html 文件中,函数只负责逻辑处理和页面返回。
from django.http import HttpResponse
# Create your views here.
def index(request):
line1 = '<h1 style="text-align: center;">术士之战<h1>'
line2 = '<p style="text-align:center"><img src="https://thumbs.dreamstime.com/b/amazing-misty-autumn-scenery-lake-sorapis-dolomites-italy-beautiful-mountains-colorful-yellow-larches-shore-193683774.jpg"></p>'
return HttpResponse(line1 + line2)
def play(request):
line1 = '<h1>游戏人生</h1>'
return HttpResponse(line1)
打开 urls.py 配置路由
from django.urls import path
from game.views import index, play
urlpatterns = [
path("", index, name="index"), # 根目录映射到 index 函数处理
path("play/", play, name="play")
]
将 game.url 配置到 acapp 里面的总 url 中
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('game.urls')), # 这里进行添加
path('admin/', admin.site.urls),
]
现在访问就可以了。
大佬可以分享一下django课程使用的docker镜像吗?我云服务器过期了,想使用实验室的服务器,但是没做内网穿透,没法scp到服务器上,谢谢大佬
不好意思,我本地也没有,当时按照教程直接传到服务器上了