个人网站设计
- 放置博客信息
- 放置个人信息页
- 个人主页仅修改了html,其他可以保持不变
- 放crm系统
- 更新博客信息及个人信息页面,布局、版式更改
- 博客将不同的页面分开,相互无法查看(IT教学、IT笔记、生活日记)
- 增加照片页面,仅个人或给予账号的可以查看
- 新增一个插入照片功能,将照片放置到腾讯云图床中
- 建立一个MySQL数据库,放置照片拍摄时间、照片创建时间、照片的图床url地址、照片标题、照片描述等信息
- 可以以时间顺序的方式来网页上展示照片
- 路径为/life/photo
可以做的方式
- [ ] 让现有van-blog单独成一个体系,进行小修改
- [x] 页面着色修改
- [ ] 各分栏内容隔开,相互不可见
- [ ] 阅读栏,reading
- [ ] IT记录栏,it
- [ ] 教学栏,teching
- [ ] 日常生活栏,life
- [ ] 单独设计首页,然后将van-blog链接进去,网址链接均保持不变
- [x] 重新设计个人网站
- [x] 关于我| 联系我
- [x] 疑问,域名访问如何解决?
- 考虑用blog.liufeisheng.cn这个域名
- 然后www.liufeisheng.cn首页,链接进去
- [ ] 增加照片、视频页面
- [x] 将原来的域名链接全放进去/post/id保持不变
目前想法
- 用django设计网站,docker容器封闭,放进服务器使用
- 使用一级域名www.liufeisheng.cn
- 将van-blog、crm系统之类链接进去,原链接保持不变
- 参考https://www.kuangstudy.com/course建立课程、项目
- [ ] 个人介绍原先的保留不变,新增 www.liufeisheng.cn/me链接,内容一致,但放到django项目中
整体框架思路
要在Windows上使用Django开发个人网站,并最终在Ubuntu系统上通过Docker进行封闭部署,你可以按照以下步骤进行:
1. 在Windows系统上进行Django开发
-
安装依赖工具 - 确保安装了Python(推荐使用最新版本)。 - 安装
pip包管理工具。 - 使用pip安装virtualenv,以便在虚拟环境中隔离你的项目依赖。 -
创建虚拟环境并安装Django
bash python -m venv page_env page_env\Scripts\activate pip install django激活虚拟环境后,使用pip安装Django。 -
创建Django项目
bash django-admin startproject mysite cd mysite python manage.py startapp myapp -
使用VSCode进行开发
- 打开VSCode并加载你的Django项目目录。
- 安装VSCode的Python扩展,以获得语法高亮、代码提示等功能。
- 配置
.vscode文件夹中的settings.json文件,使VSCode可以正确识别和使用虚拟环境。
- 在Windows上进行测试运行
bash python manage.py runserver确保在Windows环境中可以成功运行Django项目。
网站基本设置
静态文件设计
1. 设计Django项目的静态目录
在Django项目中,通常会有一个专门的目录用于存放静态文件(如CSS、JavaScript、图像等)。为了设计一个静态目录,可以按以下步骤操作:
-
创建静态目录结构 在Django项目的根目录下创建一个名为
static的文件夹。可以按如下结构进行组织:mysite/ ├── manage.py ├── mysite/ │ ├── settings.py │ ├── urls.py │ └── ... ├── myapp/ │ ├── views.py │ └── ... └── static/ ├── css/ ├── js/ └── images/-css/用于存放所有的CSS文件。 -js/用于存放所有的JavaScript文件。 -images/用于存放所有的图像文件。 -
在Django设置中配置静态目录 打开
settings.py文件,添加或修改以下配置:python STATIC_URL = '/static/' STATICFILES_DIRS = [ BASE_DIR / "static", ]这样,Django将能够正确地识别和使用你定义的静态目录。
2. 设计一个简洁的首页
接下来,设计一个简单的首页模板,介绍网站的基本信息。假设你的网站主要介绍个人信息和一些项目经历,可以按以下步骤进行:
-
创建一个HTML模板文件 在
myapp/templates/myapp/目录下创建一个名为index.html的文件。目录结构应如下:mysite/ ├── myapp/ │ ├── templates/ │ │ └── myapp/ │ │ └── index.html └── ... -
编写HTML代码
index.html文件可以设计为如下的简单介绍页面:
编辑个人主页,注意在要前面加{% load static %} 加载静态文件
```html {% load static %}
Welcome to My Personal Website
Explore my projects and learn more about me.
About Me
This is a brief introduction about myself. You can include your background, education, and current work here.
My Projects
Here is a list of my projects. Each project can have a brief description and a link to more details.
```
- 创建对应的CSS文件
在
static/css/目录下创建一个名为style.css的文件,编写一些基本样式: ```css body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; }
header { background-color: #333; color: #fff; padding: 20px; text-align: center; }
section { padding: 20px; margin: 10px; background-color: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }
footer { text-align: center; padding: 10px; background-color: #333; color: #fff; } ```
- 配置视图和路由
最后,在
views.py文件中创建一个视图函数来渲染首页,并在urls.py中配置路由: ```python # views.py from django.shortcuts import render
def index(request): return render(request, 'myapp/index.html')
# urls.py from django.urls import path from . import views
urlpatterns = [ path('', views.index, name='index'), ] ```
通过以上步骤,你将拥有一个基本的静态目录结构,并且首页设计也已完成。你可以根据需要进一步扩展和美化网站。
确保myapp已经在settings.py中的INSTALLED_APPS列表里注册。如果没有注册,Django将无法识别和使用该应用。
pythonCopy codeINSTALLED_APPS = [
...
'myapp', # 确保 myapp 在这里
]
myapp/urls.py 的作用
myapp/urls.py 是你在myapp应用内的路由配置文件。它专门处理由mysite/urls.py分发过来的请求。通过这种方式,你可以将不同的应用模块化管理。通常你会在myapp/urls.py中定义与这个应用相关的URL和视图对应关系。例如:
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index,name='index')
]
- HTML 与 CSS 基本设计基础: 学习网页的基本结构和样式布局,掌握响应式设计技巧。
- JavaScript 动态网页设计: 通过 JavaScript 实现网页的动态交互功能,提升用户体验。
- 前端开发框架: 使用 jQuery、Vue 等前端框架,开发模块化和高效的前端应用。
- 数据库管理: 学习数据库的基本操作与管理,为网站提供数据支持。
- Linux 操作系统与服务器配置: 了解 Linux 系统的基本操作,以及服务器的配置与管理。
- Web 安全: 掌握常见的 Web 安全漏洞与防护措施,确保网站的安全性。
- Docker 容器技术: 通过 Docker 容器化技术,实现应用的快速部署与管理。
- Git 版本管理: 学习 Git 的使用方法,进行项目的版本控制与协作开发。
上传至Ubuntu的Docker容器部署
网站大致设计好之后 ,通过git上传至服务器,然后放到Docker容器中实现
- 编写Dockerfile
在Django项目的根目录下创建一个
Dockerfile,内容如下:
```dockerfile # 使用官方Python镜像 FROM python:3.x
# 设置工作目录 WORKDIR /usr/src/app
# 复制项目的requirements.txt文件 COPY requirements.txt ./
# 安装项目依赖 RUN pip install --no-cache-dir -r requirements.txt
# 复制项目文件到工作目录 COPY . .
# 运行Django服务器 CMD ["python", "manage.py", "runserver", "0.0.0.0:8002"] ```
- 编写
requirements.txt文件 使用以下命令生成依赖文件:
bash
pip freeze > requirements.txt
- 编写
docker-compose.yml文件(可选) 如果需要使用数据库等服务,可以编写docker-compose.yml文件。
代码上传和同步
- 使用Git进行版本控制和上传
-
在本地Windows系统上使用Git管理代码,并将代码推送到GitHub、GitLab等远程代码仓库。
-
在Ubuntu系统上通过Git拉取代码并进行Docker构建和部署。
因为上传至githubb会出现网络问题,后续出现故障,帮上传至gitee
git init
git add .
git commit -m '首次上传'
git remote add gitee https://gitee.com/xiaofei90/flynn-page.git
git push -u gitee main
然后在ubuntu服务器用git 下拉仓库信息
git clone https://gitee.com/xiaofei90/flynn-page.git
打开项目目录,
2. Docker化并部署到Ubuntu系统
- 在Ubuntu系统上构建和运行Docker容器
-
将你的Django项目代码上传到Ubuntu系统。
-
创建了docker-compose.yaml文件
bash docker-compose up -d
-
配置Nginx和Docker(可选) 如果需要使用Nginx作为反向代理,还需要编写Nginx配置文件并将其与Docker容器集成。
3.
现有Flynn_page的docker容器与mongo容器连接
vanblog-mongo-1和vanblog-vanblog-1两个容器已经位于同一个网络vanblog_default中。这表明他们可以通过此网络相互通信,使用容器名称作为主机名进行通信。
如果您想让flynn-page-web-1容器也能访问MongoDB,您可以将它连接到vanblog_default网络。这样,所有的容器都在同一个网络中,能够更简单地进行数据共享和通信。以下是如何操作的步骤:
- 连接
flynn-page-web-1到vanblog_default网络:
bash
docker network connect vanblog_default flynn-page-web-1
- 确认连接是否成功:
您可以再次检查
flynn-page-web-1的网络配置来确认它是否已经加入到vanblog_default网络:bash docker inspect --format='{{.NetworkSettings.Networks}}' flynn-page-web-1
完成这些步骤后,flynn-page-web-1就可以使用vanblog-mongo-1容器名来访问MongoDB数据库了。确保在flynn-page-web-1的数据库配置中使用正确的容器名称和端口。例如:
DATABASE_URL="mongodb://vanblog-mongo-1:27017/vanBlog"
vanBlog为实际使用的数据库名称。这样设置后,flynn_page应用应能正确连接到MongoDB数据库。
项目与mongo数据库连接
要在 Django 项目中连接到 Docker 容器中的 MongoDB 数据库,需要使用 Django 的第三方库,因为 Django 默认不支持 MongoDB。一个常用的解决方案是使用 djongo,这是一个允许 Django 使用 MongoDB 作为数据库后端的适配器。
安装 Djongo
首先,确保安装了 djongo。在您的项目环境中运行以下命令:
bash
Copy code
pip install djongo
配置 Django settings.py
然后,您需要修改 settings.py 中的 DATABASES 设置,以使用 djongo 并指定 MongoDB 的连接字符串。
pythonCopy codeDATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'vanBlog', # 数据库名
'ENFORCE_SCHEMA': False,
'CLIENT': {
'host': 'mongodb://vanblog-mongo-1:27017/vanBlog' # MongoDB URI
}
}
}
注意事项
- Djongo 版本兼容性:请确保
djongo的版本与您使用的 Django 和 MongoDB 版本兼容。 - MongoDB URI:请确保您的 MongoDB URI 是正确的,特别是 Docker 容器的名称
vanblog-mongo-1是 MongoDB 服务容器的名称,并且两者在同一个 Docker 网络中,以确保可以相互通信。 - 测试连接:在应用这些设置后,尝试运行 Django 的迁移或访问数据库以测试连接是否成功。
使用 Djongo 连接到 MongoDB 会使 Django 能够通过其 ORM 系统操作 MongoDB,但要注意这种方法可能不支持 Django 的所有特性,如某些类型的查询和迁移。如果您的项目对数据库的要求比较复杂,建议评估是否真的适合使用 MongoDB 作为后端。如果需要更传统的关系数据库支持,可能需要考虑 PostgreSQL 或 MySQL 等选项。
在网页中将markdown文本渲染成网页文本
将 Markdown 转换为 HTML: 为了将 Markdown 转换为 HTML,可以使用 markdown 模块。
实现步骤
- 安装 Markdown 模块:
如果您还没有安装 markdown 模块,可以通过以下命令进行安装:
pip install markdown
- 更新 Django 视图: 在视图中,将文章内容从 Markdown 转换为 HTML。
``` pythonCopy codeimport markdown from django.shortcuts import render, get_object_or_404 from .models import Article
def article_detail(request, article_id): article = get_object_or_404(Article, id=article_id) # 将 Markdown 转换为 HTML article_content_html = markdown.markdown(article.content, extensions=['extra']) return render(request, 'article_detail.html', {'article': article, 'article_content_html': article_content_html}) ```
- 更新 HTML 模板: 在模板中渲染经过 Markdown 转换的 HTML 内容,并确保显示动态的图片 URL。
```
<h1>{{ article.title }}</h1>
<div class="content">
<!-- 渲染 Markdown 转换后的 HTML 内容 -->
{{ article_content_html|safe }}
</div>
```
在网页中渲染图床图片
项目启动及持久化运行
项目启动,找到项目目录所在位置,然后
python manage.py runserver便可运行,但当终端关闭时会停止运行
如果希望你的 Django 项目在生产环境中稳定运行,要经过以下设置
具体的gunicorn配置文件和systemd服务文件的示例,以帮助您在Ubuntu服务器上持久化运行您的Django项目。
1. gunicorn配置文件
首先创建一个gunicorn配置文件,比如命名为gunicorn.conf.py,可以放在您的项目根目录/var/www/FlynnPage/flynn-page/下面:
pythonCopy code# /var/www/FlynnPage/flynn-page/gunicorn.conf.py
import multiprocessing
bind = "0.0.0.0:8000" # 绑定的IP和端口
workers = multiprocessing.cpu_count() * 2 + 1 # 根据CPU核心数设定工作进程数
loglevel = 'info' # 日志级别
errorlog = '/var/www/FlynnPage/flynn-page/logs/gunicorn-error.log' # 错误日志文件
accesslog = '/var/www/FlynnPage/flynn-page/logs/gunicorn-access.log' # 访问日志文件
确保日志目录存在,或者修改为已存在的目录。
2. systemd服务文件
接着创建一个systemd服务文件,比如命名为flynnpage.service,放在/etc/systemd/system/目录下:
iniCopy code# /etc/systemd/system/flynnpage.service
[Unit]
Description=Gunicorn instance to serve FlynnPage
After=network.target
[Service]
User=fei
Group=www-data
WorkingDirectory=/var/www/FlynnPage/flynn-page
Environment="PATH=/var/www/FlynnPage/venv/bin"
ExecStart=/var/www/FlynnPage/venv/bin/gunicorn --config /var/www/FlynnPage/flynn-page/gunicorn.conf.py mysite.wsgi:application
[Install]
WantedBy=multi-user.target
这里,ExecStart指令中使用了之前创建的gunicorn配置文件,并指定了WSGI应用程序的位置。
3. 确保日志目录存在且权限正确
首先,检查 logs 目录是否存在。如果不存在,创建该目录:
bash
Copy code
mkdir -p /var/www/FlynnPage/flynn-page/logs
确保 Gunicorn 和系统服务有权限在日志目录中创建文件并写入日志。你可以将该目录的所有者设置为 fei 用户,或者将其权限设置为适当的值。
sudo chown -R fei:fei /var/www/FlynnPage/flynn-page/logs
sudo chmod -R 755 /var/www/FlynnPage/flynn-page/logs
启动和管理服务
创建好服务文件后,您需要重新加载systemd管理器配置,使新的服务文件生效,然后启动服务:
sudo systemctl daemon-reload
sudo systemctl start flynnpage.service
sudo systemctl enable flynnpage.service
检查服务状态
您可以通过以下命令检查服务的状态:
sudo systemctl status flynnpage.service
这样设置之后,您的Django项目将会作为一个系统服务运行,可以实现自动启动、重启和管理。如果出现任何错误,可以查看gunicorn的日志文件或使用上述状态命令进行诊断。
本地代码与远程代码git同步
要将本地代码更新为远程仓库的最新代码,可以按照以下步骤进行操作:
- 获取远程仓库的更新:
首先,你需要从远程仓库拉取最新的代码。在终端中进入你的项目目录,执行以下命令:
bash
git fetch origin
这会从远程仓库获取更新,但不会自动合并到你的本地分支。
- 检查分支状态(可选):
如果你想查看远程和本地分支的差异,可以使用以下命令:
bash
git status
- 合并远程更新到本地分支:
如果你想直接将远程分支的更新合并到本地分支,可以使用以下命令:
bash
git pull origin <your-branch-name>
例如,如果你在 main 分支上,则执行以下命令:
bash
git pull origin main
这会将远程仓库中 main 分支的最新代码合并到本地 main 分支。
- 处理冲突(如果有的话):
如果你的本地代码与远程仓库的代码有冲突,git 会提示你解决冲突。此时需要手动编辑有冲突的文件,并在解决冲突后执行以下命令:
bash
git add <conflicted-file>
git commit
然后就可以继续工作了。
通过这些步骤,你可以将本地代码更新为远程仓库的最新代码。
20241105 部署到本地Linux系统
首先直接从github下载项目代码 ,然后打开项目目录
这个时候不需要创建本地虚拟环境,因为 Dockerfile 中已经指定了使用 Python 3.10.12 的镜像。Docker 的优势就是可以独立于本地环境运行。让我们直接使用这个 Dockerfile:
- 确保项目文件准备完整:
# 确保在 /usr/local/mysite 目录下有:
- Dockerfile
- requirements.txt
- manage.py
- 其他项目文件
- 构建 Docker 镜像:
# 在 Dockerfile 所在目录执行
docker build -t mysite .
- 使用 docker-compose.yaml配置:
version: '2' # 适配您的旧版本 docker-compose
services:
web:
build: . # 添加 build 指令,使用当前目录的 Dockerfile
image: mysite # 改用与 docker build 相同的镜像名
ports:
- "82:82" # 改用与您的 Dockerfile 相同的端口
volumes:
- /usr/local/mysite:/usr/local/mysite # 改用正确的路径
使用 docker-compose 命令:
# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
这个修改后的 docker-compose.yaml 完全可以替代docker run 命令,它们实现的是相同的功能。
- 检查容器状态:
# 查看容器是否正常运行
docker ps
# 查看容器日志
docker logs mysite_web
- 如果需要进入容器:
docker exec -it mysite_web bash
- 如果需要停止和删除容器:
docker stop mysite_web
docker rm mysite_web
注意事项:
- 本地 Python 版本(2.7.16)不会影响 Docker 容器的运行
- Docker 会使用 Dockerfile 中指定的 Python 3.10.12
- 确保 requirements.txt 文件包含了所有必要的依赖
- 如果是 Django 项目,可能需要在 settings.py 中修改 ALLOWED_HOSTS 设置
新增照片上传功能
主要包含以下几个部分:
- 创建模型存储图片信息
- 实现图片上传视图
- 添加模板显示上传界面
- 配置腾讯云 COS 作为图床
20241209部署到阿里云服务器
因为阿里云服务器无法访问docker hub,所以用之前的docker容器部署会出错
直接部署反而容易些
先创建虚拟python运行环境,然后pip安装requirements.txt的库,
最后直接python manage.py runserver 0.0.0.0:82就能运行
但需要注意的是requirements.txt有一些库的版本不对,或者冲突 ,可以根据实际情况调整
最后创建systemctl服务来运行这个网站
20241224
- 调整了网页的整体布局,看起来美观一些
- 通过caddy添加了https访问信息