当前位置: 首页 > news >正文

Vue+Go 自定义打字素材的打字网站

Typing_Key_Board

这是一个基于Vue 3和Go语言的自定义素材打字练习网站,灵感来源于常用字打字练习,解决了大多数网站无法自定义打字素材的问题。在 Typing_Key_Board (简称TKB)中,用户可以自定义打字素材进行练习,在复习代码的同时仍然可以练习打字速度,一举两得。

Github仓库地址

Typing_Key_Board
欢迎大家来练手,贴出在线演示网址:(在线打字)佬们轻点。期待您的star~

项目截图

  • 自定义打字素材:
    请添加图片描述

  • 打字练习
    请添加图片描述

  • 打字历史记录(可以看到自己的进步)
    请添加图片描述

项目结构

项目采用前后端分离架构:

  • frontend: Vue+ Vite实现的前端
  • backend: Go语言实现的后端API,使用SQLite存储数据

功能特点

  • 内置多种编程相关的打字练习素材
  • 用户可以自定义添加练习文本内容
  • 支持英文的打字练习
  • 实时显示打字结果,正确显示绿色,错误显示红色
  • 允许删除错误输入并回滚进度
  • 统计打字错误数量和准确率
  • 打字历史记录功能,记录每次练习的错误数和准确率
  • 素材内容持久化保存到SQLite数据库,不用担心数据丢失。

前端本地启动方法

# 进入前端目录
cd frontend# 安装依赖
npm install# 启动开发服务器
npm run dev

前端会在 http://localhost:3000 启动。

后端本地启动方法

# 进入后端目录
cd backend# 下载依赖
go mod tidy# 启动服务器
go run main.go

后端API会在 http://localhost:8080 启动。

技术栈

前端

  • Vue
  • Vue Router
  • Vite
  • Axios

后端

  • Go
  • Gin框架
  • SQLite

使用Docker部署到云服务器

  • 修改文件列表

    • main.js
    • main.go(修改TODO的位置的IP)
  • 利用文件上传工具上传到云服务器的自建目录下,项目结构如下:

   typing-app/├── frontend/│   ├── src/│   ├── public/│   ├── package.json│   ├── Dockerfile│   └── docker/│       └── nginx.conf├── backend/│   ├── main.go│   ├── go.mod│   ├── go.sum│   └── Dockerfile├── docker-compose.yml└── data/
  • 进入项目目录

cd /xxx/typing-app

  • 使用 Docker Compose 构建镜像

docker-compose build

  • 等待成功后启动容器

docker-compose up -d

  • 检查容器是否正常运行

docker-compose ps

应该显示 frontend 和 backend 两个容器的状态为 up。

  • 查看容器日志确保没有出现错误

docker-compose logs

  • 在服务器安全组打开8000和9000端口

  • 访问应用

http://服务器公网IP:8000进入即可访问~

如果在使用过程中遇到问题可以参看下方的解决方案。

可能会遇到的问题

Ubuntu系统安装Docker-compose

sudo apt install -y docker-compose

​ 验证安装:

docker-compose --version

拉取镜像遇到报错
ERROR: Service 'backend' failed to build: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

这个报错通常是需要配置国内镜像源:(/etc/docker/daemon.json)

{"registry-mirrors" : ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/" ],"insecure-registries" : ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": true,"experimental": false
}

重启Docker服务

sudo systemctl daemon-reload

sudo systemctl restart docker

可以使用 docker pull golang:1.23.0 尝试一下是否能成功,如果不成功则需要检查DNS配置。

cat /etc/resolv.conf

修改配置文件为:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.# nameserver 127.0.0.53
nameserver 114.114.114.114
nameserver 8.8.8.8
options timeout:10 attempts:3 rotate single-request-reopen
  • 延长尝试的时间,确保能够连接上并且下载,在这里我设置为10秒,也可以设置为更长的时间。
  • 设置nameserver
启动之后如果又修改了代码怎么办?

比如现在修改了Nginx的配置文件

尝试直接重启容器:

docker restart typingapp_frontend_1

如果不成功,就重建前端容器:

# 停止前端容器
docker stop typingapp_frontend_1
# 删除前端容器
docker rm typingapp_frontend_1
# 重新创建并启动前端容器
docker-compose up -d frontend

检查是否正常运行:

docker ps

又比如修改了docker-compose文件

需要重新构建并启动容器

docker-compose down
# docker-compose build backend
docker-compose build --no-cache backend
docker-compose up -d
总结:

​ 修改了前后端的代码之后,只需要先down掉容器,重新构建并上线即可。

进入前后端容器的方法

docker exec -it 容器name sh

相关文章:

  • 海盗王改60帧时有关树木抖动的问题
  • Leetcode 3551. Minimum Swaps to Sort by Digit Sum
  • Protect Your Digital Privacy: Obfuscate, Don’t Hide
  • C语言指针深入详解(二):const修饰指针、野指针、assert断言、指针的使用和传址调用
  • 用 UniApp 构建习惯打卡 App —— HabitLoop 开发记
  • 报告精读:华为2024年知行合一通信行业数据治理实践指南报告【附全文阅读】
  • leetcodehot100刷题——排序算法总结
  • python中http.cookiejar和http.cookie的区别
  • React 19版本refs也支持清理函数了。
  • 【每天一个知识点】湖仓一体(Data Lakehouse)
  • 规则联动引擎GoRules初探
  • 牛客网NC21989:牛牛学取余
  • 新电脑软件配置二:安装python,git, pycharm
  • UnLua源码分析(一)初始化流程
  • 【关联git本地仓库,上传项目到github】
  • 四品种交易策略
  • 模型评估与调优(PyTorch)
  • 02 K8s双主安装
  • MoodDrop:打造一款温柔的心情打卡单页应用
  • 黑马k8s(十一)
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 大风+暴雨,中央气象台双预警齐发
  • 土耳其、美国、乌克兰三边会议开始
  • 2025年中国网络文明大会将于6月10日在安徽合肥举办
  • 我的科学观|梅彦昌:科技创新关键在于能否跑得快,而不是有没有钱
  • 上海首发经济“卷”到会展业,浦东签约三个年度“首展”