配置docker、git环境与项目创建
配置好环境的网址:
http://124.71.40.45:8000/
我的项目地址:
https://git.acwing.com/spideymen/django_acapp
配置云服务器和docker
- 去云平台租一个云服务器(可以在平台设置和重置密码,也可以进入云服务器后通过
passwd
设置密码 -
通过本地终端或AC Terminal登录云服务器
bash ssh root(或ubuntu,看平台分配的根用户名)@xxx.xx.xx.xx(IP)
-
创建用户(不在根用户下开发)
bash adduser acs # 这里取名为acs usermod -aG sudo acs # 给用户添加sudo权限
-
配置免密登录(这里展示的仅适用于Linux环境的本地终端)
进入家目录
vim .ssh/config
在config文件中按如下格式添加内容:
Host django_server # 这里取名django_server
HostName xxx.xx.xx.xx
User acs # 填要登录的用户名
ssh-copy-id django_server # 配置密钥
- 配置vim tmux
ssh django_server # 免密登录云服务器acs用户
sudo apt-get update # 更新配置
sudo apt-get install tmux # 安装tmux
# 以下配置命令是将 AC Terminal配置迁移至自己的服务器
Ctrl+d 退回到AC Terminal家目录
scp .bashrc .vimrc .tmux.config server1: # 将配置文件传到云服务器里
ssh server1 # 这时在打开tmux就可以看到熟悉的配置了
- 安装docker(有些服务器官方会装好docker,就不用重复装了)
在django_server里
tmux # 在tmux里工作
# 安装docker
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 将当前用户添加到docker用户组
sudo groupadd docker # 创建docker用户组(可以不执行)
sudo usermod -aG docker $USER # 将当前用户加入到docker用户组里
newgrp docker # 重启docker用户组(重开一个tmux会话或重启服务器也能达到相同效果)
docker --version # 能看到版本号就说明装好了
- 配置Django环境的docker容器(只适用于AC Terminal用户)
进入AC Terminal
scp /var/lib/acwing/docker/images/django_lesson_1_0.tar server1: # 将镜像文件传入云服务器
docker load -i django_lesson_1_0.tar # 将文件解析为镜像
docker images # 查看所有镜像
docker run -p 20000:22 -p 8000:8000 --name django_server -itd django_lesson:1.0 # 创建该镜像的容器并启动
# -p是将服务器端口映射到容器端口。20000用于登录容器,8000用于调试
docker attach django_server # 进入容器
# 创建用户acs
adduser acs # 这里取名为acs
usermod -aG sudo acs # 给用户添加sudo权限
apt-get update
apt-get install sudo # 容器里没有sudo命令话要装一下
# 配置免密登录
回到AC Terminal家目录
vim .ssh/config
在config文件中按如下格式添加内容:
Host django # 这里取名django
HostName xxx.xx.xx.xx
User acs # 填要登录的用户名
Port 20000 # 登录端口20000
ssh-copy-id django # 配置密钥
ssh django # 免密登录
# 容器里已下载tmux,可以直接把配置文件传过来
回到AC Terminal家目录
scp .bashrc .vimrc .tmux.config django:
ssh django # 进入容器
tmux # 看看熟悉的配置
django-admin --version # 查看django版本号
项目创建 & 配置git环境
创建项目和git仓库
在django容器内
django-admin startproject acapp # 创建django项目
cd acapp
git init # 将文件夹配置成git仓库,便于代码保管和回稳
创建云端git仓库并上传
- 进入云代码托管平台(github或acgit),创建一个新的仓库repository(acgit里是项目project),注意不要使用任何自述文件或格式,服务器里的git仓库是有格式的,我们只需要将它上传到云端即可
- 回到终端,为git设置全局信息
git config --global user.name xxx # 设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email xxx@xxx.com # 设置全局邮箱地址,信息记录在~/.gitconfig文件中
- 按照平台的提示,输入“推送已有仓库”下的代码,就可以将服务器git仓库上传到云端托管了
- 注意,云平台尽可能只维护代码而不保存代码运行时产生的文件,如预编译文件、二进制文件等
- python代码运行时为了提高效率,会生成一些预编译文件
.pyc
,存在__pycache__
文件夹里。为了方便过滤掉这些文件,可以在仓库根目录下创建文件.gitignore
,在里面加上*/__pycache__
(这是正则表达式) - 打开vim后没有关闭时,会产生一个
.swp
文件,这个也要过滤掉
- python代码运行时为了提高效率,会生成一些预编译文件
项目运行
启动项目
python3 manage.py runserver 0.0.0.0:8000 # 运行django项目
打开浏览器新标签页,输入地址:xxx.xx.xx.xx(换成服务器IP):8000 # 访问项目
# 这是会返回一个报错页面,提示要把IP加入到ALLOWED_HOSTS里。
返回终端
ag ALLOWED_HOSTS # 找ALLOWED_HOSTS在哪个文件里
将服务器IP地址写到ALLOWED_HOSTS里,保存退出
回到浏览器,刷新页面。这是项目就成功启动了
# 将代码更新至云平台(注意不要把预编译文件上传,只传代码)
git add .
git commit -m "modify allowed hosts"
git push
创建django app并编写自己的页面
Ctrl+a d # 将当前session挂起
tmux # 创建一个新的session用来写项目。另一个用来维护
cd /acapp
python3 manage.py startapp game # 创建app,写游戏,所以命名game
把代码上传至云端
game内常用文件作用
admin.py
:存储管理员可以看到哪些数据库的信息models.py
:定义网站里各种数据存储结构(Class)views.py
:写网站函数(视图),供前端调用urls
(自己创建):路由。Uniform Resource Locator统一资源定位符,简称网址。前端每次返回一个调用请求都是返回一个URL网址,而urls
文件负责把前端返回的网址定位到对应的函数templates
:存HTML页面
进入管理员页面
- 在浏览器输入
http://xxx.xx.xx.xx:8000/admin
,一般会报错,这是因为没有同步数据库 Ctrl+a s
选择维护项目的tmux页面,进入后关掉运行的项目在打开,发现会报错。输入提示的指令同步数据库,再打开项目- 回到浏览器刷新界面,便可以看到管理员登录界面
- 创建管理员账号
- 回到终端写代码的session里,输入命令
python3 manage.py createsuperuser
按照指令创建管理员用户
- 回到浏览器登录页面,登录即可看到管理员页面
创建自己的页面
回到终端
cd /acapp/game # 在自己的app里创建页面
touch urls.py
mkdir templates
以后常用的文件(夹)就是 models
, views
, urls
,templates
。当项目逐渐扩大时,文件就要切分成文件夹,文件夹就要细分为几个文件夹,整体会发展为一个树的结构
简单的交互逻辑
- 用户登录网址
- 网址发送给
acapp
里的urls
并进行解析,找到对应的资源(url,函数,文件) - 我们自己的页面是一个url,所以会进入到
game/urls
中,找到对应对应页面,调用对应的函数返回页面 - 对应的函数在
game/views.py
里