# Starlight **Repository Path**: devaper/starlight ## Basic Information - **Project Name**: Starlight - **Description**: 星光(Starlight),在线一起看~ - **Primary Language**: Unknown - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: http://starlight.devlop.icu - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-07 - **Last Updated**: 2023-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 星光(Starlight) ![Static Badge](https://img.shields.io/badge/kotlin-1.8.20-red) ![Static Badge](https://img.shields.io/badge/java-17%20LTS-chocolate) ![Static Badge](https://img.shields.io/badge/vue-3-green) > 制作的初衷就是那些一起看电影的平台由于版权等问题片源过少,又不支持直链的方式... > 同时学习一下WebSocket~ ## 项目说明 项目目前只适合于单机部署,视频完全采用直链的方式进行播放(可以上传到服务器,也可以采用OSS),采用WS同步进度、聊天,对于WS目前没有过多进行消息可靠性的保证。持续完善中... 目前该项目主要用到的技术: - 数据库:MySQL - 前端:Vue3-TypeScript、Vue-Router、Pinia、Naive-UI、Axios、WebSocket、Artplayer - 后端:Kotlin、Gradle、SpringBoot3、SpringSecurity、SpringWebSocket - 缓存:Redis ## 已知问题 - 移动端在房间内浏览器进入后台会导致断开连接 > 这个是由于浏览器节省资源导致的,浏览器进入后台后所有页面进入“冻结”,JS暂停执行,WebSocket也被断开连接 - 用户被挤掉线后,可以直接进入房间绕过并发会话限制 > 已解决,重写RememberMeServices并使用Redis存储用户当前有效的RememberMeTokenID(也可以使用本地缓存解决) ## 项目部署 这里只介绍一下我的部署方式,采用的Nginx进行了动静分离,并且用到了Jenkins来自动构建部署 ### 数据库 使用MySQL8.0,执行 `database/struct.sql` 创建数据库及表即可 ### 前端 clone项目,进入web目录,使用如下命令打包并将其移动至nginx的html目录即可 ```shell npm run build # 或 yarn build ``` ### 后端 clone项目,进入server目录,首先使用如下命令打包 > 首次使用Gradle Wrapper打包会比较慢,请耐心等待(或使用代理) ```shell ./gradlew clean build --no-daemon ``` 完成后前往 `starlight-starter/build/libs/starlight.jar` 获得SpringBoot打包工件 使用如下命令运行即可(只列出建议或必须的参数, 更多配置项查看项目中的配置文件及其注释) ```shell java -jar \ -Dspring.datasource.url={jdbc_url} \ # JDBC连接字符串,建议设置时区 -Dspring.datasource.username={jdbc_username} \ # 数据库用户名 -Dspring.datasource.password={jdbc_password} \ # 数据库密码 -Dstarlight.security.remember.secret={secret_string} \ # RememberMe功能的Signature所需要的key(HmacSHA256), 建议提供同时避免外泄, 默认每次启动项目都随机生成一个 -Duser.timezone={timezone} \ # 用户时区,建议设置 starlight.jar ``` ### Nginx ```conf location / { root /xxxx/html; } location /api { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; } location /ws { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ``` ### Redis 可以使用Docker直接拉取并启动Redis镜像,项目默认采用单节点连接