# say3 **Repository Path**: sliio/say3 ## Basic Information - **Project Name**: say3 - **Description**: 一款罕见的乡村牌类小游戏。 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-03 - **Last Updated**: 2026-06-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Say3 三三棋 项目包含: - `frontend/`:Vue 3 + Vite + Element Plus 前端 - `backend/`:FastAPI + SQLite 后端 - `nginx/`:host nginx 反向代理配置 - Docker / Ubuntu 部署脚本 ## 本地开发 ### 后端 ```bash cd backend pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 3033 ``` Windows 下也可以直接运行: ```powershell cd backend .\start-uvicorn.ps1 ``` 日志会写到: - `backend/logs/uvicorn.out.log` - `backend/logs/uvicorn.err.log` ### 前端 ```bash cd frontend npm install npm run dev ``` 访问: - [http://localhost:5173](http://localhost:5173) ## Docker 镜像说明 `Dockerfile` 现在支持两个运行目标: - `frontend-runtime` - 只包含前端静态文件 - 基于 `nginx` - 暴露端口 `80` - `backend-runtime` - 只包含 FastAPI 后端 - 基于 `python:3.12-slim` - 暴露端口 `8000` ## Ubuntu 部署脚本 项目根目录提供: - `deploy-ubuntu.sh` ### 部署目标 只部署前端: ```bash chmod +x deploy-ubuntu.sh ./deploy-ubuntu.sh frontend ``` 只部署后端: ```bash ./deploy-ubuntu.sh backend ``` ### nginx 配置 **默认不会安装或更新 nginx 配置。** 只有你明确指定时才执行: ```bash INSTALL_NGINX=1 DOMAIN=say3.yoso.cool ./deploy-ubuntu.sh frontend INSTALL_NGINX=1 DOMAIN=say3.yoso.cool ./deploy-ubuntu.sh backend ``` 这通常只需要第一次部署,或者你主动修改 nginx 配置时执行一次。 ### 端口 默认端口: - 前端:`3030` - 后端:`3033` ### 数据是否会丢失 正常情况下,**多次部署后端不会丢数据**。 原因是后端部署时会把 SQLite 数据目录挂载到 Docker volume: - volume 默认名:`apps-data` - 容器内挂载到:`/app/data` 后端数据库路径由环境变量控制: - `SAY3_DB_PATH=/app/data/say3/say3.sqlite3` 所以只要你: 1. 不手动删除 Docker volume 2. 不修改 `DATA_VOLUME` 成新的名字 3. 不执行 `docker volume rm apps-data` 那么即使你多次执行: ```bash ./deploy-ubuntu.sh backend ``` 数据库也会继续保留。 ### 什么情况下会丢数据 以下情况会导致你看到“像是新数据库”: - 手动删除了 volume - 部署时把 `DATA_VOLUME` 改成了另一个新名字 - 直接运行了不带 volume 挂载的自定义 `docker run` ### 建议 生产环境建议固定使用同一个 volume 名,例如默认值: ```bash DATA_VOLUME=apps-data ./deploy-ubuntu.sh backend ``` 如果你想查看当前 volume: ```bash docker volume ls docker volume inspect apps-data ``` ## 启用 nginx/say3.conf 如果你要让 Ubuntu host 上的 nginx 正式引用仓库里的 `nginx/say3.conf`,可以按下面步骤操作: ```bash sudo cp nginx/say3.conf /etc/nginx/sites-available/say3.conf sudo ln -sf /etc/nginx/sites-available/say3.conf /etc/nginx/sites-enabled/say3.conf sudo nginx -t sudo systemctl reload nginx ``` 如果 `/etc/nginx/sites-enabled/default` 会和当前站点冲突,可以先移除默认站点: ```bash sudo rm -f /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl reload nginx ``` 当前这份配置默认把: - `127.0.0.1:3030` 当作前端 - `127.0.0.1:3033` 当作后端 所以请先确认 Docker 或本地服务已经把这两个端口启动起来。 ## HTTPS / Let’s Encrypt ### 重要说明 **证书申请和证书安装请直接使用 root 账号执行。** 不要混用普通用户和 `sudo` 来申请 / 安装证书,否则很容易出现: - 证书续签失败 - 安装目录权限错误 - nginx 无法读取证书 推荐先切到 root: ```bash sudo -i ``` 然后再运行下面这些脚本。 ### 单域名 如果你只需要类似 `say3.yoso.cool` 这样的单域名证书,可使用: - `setup-letsencrypt.sh` 示例: ```bash sudo -i cd /path/to/say3 ./setup-letsencrypt.sh ``` ### 腾讯云 DNS 通配符证书 如果你需要: - `yoso.cool` - `*.yoso.cool` 请使用: - `setup-letsencrypt-tencent.sh` 先准备腾讯云 DNS API 凭证: ```bash export Tencent_SecretId="AKID..." export Tencent_SecretKey="..." ``` 然后运行: ```bash sudo -i cd /path/to/say3 ./setup-letsencrypt-tencent.sh ``` 证书会默认安装到: - `/etc/nginx/ssl/yoso.cool/fullchain.pem` - `/etc/nginx/ssl/yoso.cool/privkey.pem` ### 只安装已经申请好的证书 如果证书已经申请成功,只需要把已有证书安装到 nginx 目录,可以执行: ```bash sudo -i /root/.acme.sh/acme.sh \ --install-cert \ --ecc \ -d yoso.cool \ --key-file /etc/nginx/ssl/yoso.cool/privkey.pem \ --fullchain-file /etc/nginx/ssl/yoso.cool/fullchain.pem \ --reloadcmd "systemctl reload nginx" ``` 如果你的 `acme.sh` 不在 `/root/.acme.sh/acme.sh`,请替换成实际路径。 ## 技术支持 - `yoso2020@foxmail.com`