从零开始:在欧拉 Linux(openEuler)上部署 SkyReels-V2 短视频系统
作为一款开源的短视频 / 直播解决方案,SkyReels-V2 凭借轻量化架构、丰富的功能模块(如视频上传、直播推流、用户互动等),成为不少开发者搭建短视频平台的首选。而欧拉 Linux(openEuler)作为国产主流服务器操作系统,以高稳定性、强兼容性适配企业级部署场景。本文将以Docker Compose 容器化部署(生产环境推荐)为核心,带您一步步完成 SkyReels-V2 在欧拉 Linux 上的部署,同时覆盖环境验证、问题排查与生产优化,确保方案可落地、易维护。
一、前置准备:明确环境要求与核心依赖
在开始部署前,需先确认系统环境与基础工具是否满足需求,避免后续出现兼容性问题。
1.1 系统版本要求
- 欧拉 Linux(openEuler):20.03 LTS 及以上版本(推荐 22.03 LTS,稳定性更优)
- 内核版本:3.10.0 及以上(可通过
uname -r查看) - 硬件配置:至少 2 核 4G 内存(生产环境建议 4 核 8G 以上,视频存储需额外挂载硬盘)
1.2 核心依赖说明
SkyReels-V2 运行需依赖三大组件:Java 运行环境(项目基于 Java 开发)、MySQL 数据库(存储业务数据)、Redis 缓存(提升并发访问性能)。考虑到部署效率与环境隔离性,本文采用 Docker Compose 一键编排,无需手动安装组件,仅需确保 Docker 环境正常。
二、Step 1:搭建 Docker 基础环境
欧拉 Linux 默认未预装 Docker,需手动配置仓库并安装,同时优化镜像拉取速度(国内网络必备)。
2.1 安装 Docker 与 Compose
-
先更新系统源并安装依赖工具:
# 切换root用户(或所有命令前加sudo) su root # 更新yum缓存 yum clean all && yum makecache # 安装基础工具(wget用于下载,git用于拉取源码) yum install -y wget git vim net-tools -
配置 Docker 官方仓库(欧拉 Linux 兼容 CentOS 仓库):
# 安装yum-utils(用于管理yum仓库) yum install -y yum-utils # 添加Docker稳定版仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装 Docker Engine 与 Compose 插件:
# 安装Docker核心组件 yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 启动Docker服务并设置开机自启 systemctl start docker systemctl enable docker # 验证安装结果(出现版本号即正常) docker --version # 示例:Docker version 26.0.0, build 2ae903e docker compose version # 示例:Docker Compose version v2.25.0
2.2 配置 Docker 镜像加速(国内必做)
默认从 Docker Hub 拉取镜像速度较慢,配置国内镜像源(如阿里云、中科大)可大幅提升效率:
# 创建Docker配置目录
mkdir -p /etc/docker
# 写入镜像加速配置(中科大+163镜像源)
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
# 重启Docker使配置生效
systemctl daemon-reload
systemctl restart docker
# 验证加速是否生效(出现配置的镜像源即成功)
docker info | grep "Registry Mirrors" -A 3
2.3 临时关闭防火墙与 SELinux(测试环境)
若为测试环境,可临时关闭防火墙与 SELinux(避免端口拦截或权限问题);生产环境需按需开放端口(而非直接关闭):
# 关闭防火墙并禁用开机启动
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux(立即生效,重启后失效)
setenforce 0
# 永久关闭SELinux(需重启系统,生产环境建议谨慎操作)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
三、Step 2:Docker Compose 一键部署 SkyReels-V2
容器化部署的核心是通过docker-compose.yml编排 MySQL、Redis 与 SkyReels-V2 应用,无需手动配置组件间的依赖关系,步骤更简洁。
3.1 拉取 SkyReels-V2 源码
首先创建统一的部署目录,避免文件分散,并拉取官方源码(若 git 克隆失败,可手动下载压缩包):
# 创建部署根目录(/opt/skyreels便于管理)
mkdir -p /opt/skyreels && cd /opt/skyreels
# 克隆SkyReels-V2源码(若官方仓库地址变更,需替换为最新地址)
git clone https://github.com/skyReels/SkyReels-V2.git .
# 若git克隆失败,用wget下载压缩包(示例为v2.0版本,需确认最新版)
# wget https://github.com/skyReels/SkyReels-V2/archive/refs/tags/v2.0.tar.gz
# tar -zxvf v2.0.tar.gz && mv SkyReels-V2-2.0/* ./ && rm -rf v2.0.tar.gz SkyReels-V2-2.0
3.2 配置环境变量(.env 文件)
创建.env文件存储敏感信息(如数据库密码、端口号),避免直接写在docker-compose.yml中,便于后续修改与维护:
# 在/opt/skyreels目录下创建.env文件
vim .env
将以下内容复制到文件中,根据实际需求修改密码与端口(建议密码包含大小写 + 数字 + 特殊字符):
# -------------------------- 数据库配置 --------------------------
# MySQL root用户密码(最高权限,用于管理数据库)
MYSQL_ROOT_PASSWORD=SkyReels@2024Root
# SkyReels-V2专用数据库名(会自动创建)
MYSQL_DATABASE=skyreels_v2
# SkyReels-V2专用数据库用户(仅访问上述数据库,权限最小化)
MYSQL_USER=skyreels_app
# 专用用户密码
MYSQL_PASSWORD=SkyReels@2024App
# MySQL对外暴露端口(避免冲突可修改,如3307)
MYSQL_PORT=3306
# -------------------------- Redis配置 --------------------------
# Redis访问密码
REDIS_PASSWORD=SkyReels@2024Redis
# Redis对外暴露端口
REDIS_PORT=6379
# -------------------------- 应用配置 --------------------------
# 应用对外访问端口(用户通过该端口访问SkyReels-V2)
APP_PORT=8080
# 应用运行环境(prod=生产环境,dev=开发环境)
SPRING_PROFILES_ACTIVE=prod
# 应用内部端口(与容器内配置一致,无需修改)
SERVER_PORT=8080
# 时区配置(避免日志时间与本地不一致)
TZ=Asia/Shanghai
3.3 编写 docker-compose.yml 编排文件
docker-compose.yml是容器化部署的核心,定义了 MySQL、Redis、SkyReels-V2 三个服务的依赖关系、挂载目录、环境变量等。在/opt/skyreels目录下创建该文件:
vim docker-compose.yml
复制以下内容(已适配欧拉 Linux 与 SkyReels-V2 需求):
version: '3.8' # 兼容Docker Compose V2版本
services:
# 1. MySQL数据库服务(存储业务数据)
skyreels-mysql:
image: mysql:8.0 # 使用MySQL 8.0(SkyReels-V2推荐版本)
container_name: skyreels-mysql # 容器名(便于管理)
restart: always # 容器异常退出时自动重启
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # 引用.env中的变量
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- TZ=${TZ} # 时区同步
ports:
- "${MYSQL_PORT}:3306" # 宿主机端口:容器内端口
volumes:
# 挂载数据目录(确保数据持久化,容器删除后数据不丢失)
- ./mysql/data:/var/lib/mysql
# 挂载配置目录(可自定义MySQL配置)
- ./mysql/conf:/etc/mysql/conf.d
# 挂载初始化SQL脚本(项目自带的数据库脚本会自动执行)
- ./sql:/docker-entrypoint-initdb.d
# MySQL启动参数(解决编码问题与密码认证方式)
command: >
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max_connections=1000 # 调整最大连接数(应对高并发)
# 2. Redis缓存服务(提升读取性能,存储会话信息)
skyreels-redis:
image: redis:7.0 # 使用Redis 7.0(稳定性与性能更优)
container_name: skyreels-redis
restart: always
environment:
- TZ=${TZ}
ports:
- "${REDIS_PORT}:6379"
volumes:
- ./redis/data:/data # 持久化Redis数据
- ./redis/conf/redis.conf:/etc/redis/redis.conf # 自定义配置
# 启动Redis并加载配置、启用密码
command: redis-server /etc/redis/redis.conf --requirepass ${REDIS_PASSWORD}
# 3. SkyReels-V2应用服务(核心业务服务)
skyreels-app:
# 若官方提供镜像,直接使用;若无,需本地构建(见3.4节)
image: skyreels/skyreels-v2:latest
container_name: skyreels-app
restart: always
depends_on:
# 依赖MySQL与Redis,确保先启动数据库与缓存
- skyreels-mysql
- skyreels-redis
environment:
- TZ=${TZ}
- SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE}
- SERVER_PORT=${SERVER_PORT}
# 数据库连接配置(容器内用服务名访问MySQL,无需IP)
- SPRING_DATASOURCE_URL=jdbc:mysql://skyreels-mysql:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=${TZ}
- SPRING_DATASOURCE_USERNAME=${MYSQL_USER}
- SPRING_DATASOURCE_PASSWORD=${MYSQL_PASSWORD}
# Redis连接配置(容器内用服务名访问Redis)
- SPRING_REDIS_HOST=skyreels-redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_PASSWORD=${REDIS_PASSWORD}
ports:
- "${APP_PORT}:${SERVER_PORT}"
volumes:
# 挂载日志目录(便于查看应用日志)
- ./app/logs:/app/logs
# 挂载视频上传目录(用户上传的视频持久化存储)
- ./app/upload:/app/upload
# 健康检查(确保应用正常运行,失败时自动重启)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${SERVER_PORT}/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
3.4 本地构建 SkyReels-V2 镜像(若官方无镜像)
若skyreels/skyreels-v2:latest官方镜像不存在,需手动编译项目并构建 Docker 镜像(前提是已安装 Maven):
-
安装 Maven(用于编译 Java 项目):
yum install -y maven # 验证Maven安装(出现版本号即正常) mvn -v -
编写 Dockerfile(用于构建应用镜像):
# 在/opt/skyreels目录下创建Dockerfile vim Dockerfile复制以下内容(适配 SkyReels-V2 的 Java 项目结构):
# 基础镜像:使用轻量级的OpenJDK 17(SkyReels-V2基于Java 17开发) FROM openjdk:17-jdk-slim # 设置工作目录 WORKDIR /app # 将编译后的Jar包复制到容器内(需确认Jar包名称与路径) COPY target/skyreels-v2-2.0.jar app.jar # 暴露应用端口(与.env中的SERVER_PORT一致) EXPOSE 8080 # 启动命令(指定生产环境配置) ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"] -
编译项目并构建镜像:
# 编译SkyReels-V2(-DskipTests跳过测试,加速编译) mvn clean package -DskipTests # 构建Docker镜像(-t指定镜像名与标签) docker build -t skyreels/skyreels-v2:latest . # 验证镜像是否创建成功(出现skyreels/skyreels-v2即正常) docker images | grep skyreels-v2
3.5 启动所有服务
完成上述配置后,执行以下命令一键启动 MySQL、Redis 与 SkyReels-V2 应用:
# 进入部署目录
cd /opt/skyreels
# 启动服务(-d表示后台运行)
docker compose up -d
# 查看服务状态(所有服务状态为Up即正常)
docker compose ps
# 查看应用日志(实时跟踪启动过程,确认无报错)
docker compose logs -f skyreels-app
启动成功的日志示例(出现 “Started SkyReelsApplication” 即表示应用启动完成):
skyreels-app | 2024-05-20 15:30:00.123 INFO 1 --- [ main] com.skyreels.SkyReelsApplication : Started SkyReelsApplication in 15.678 seconds (JVM running for 16.345)
四、Step 3:验证部署结果
应用启动后,需通过端口访问、接口测试等方式确认部署成功,避免 “启动但不可用” 的问题。
4.1 端口与服务状态检查
-
检查端口是否正常监听(确保
APP_PORT、MYSQL_PORT、REDIS_PORT已开放):# 查看8080端口(应用端口)监听情况 netstat -tulnp | grep 8080 # 示例输出(表示8080端口已被docker-proxy监听): # tcp6 0 0 :::8080 :::* LISTEN 12345/docker-proxy -
测试数据库与 Redis 连接(确保组件正常):
# 测试MySQL连接(替换为.env中的MYSQL_PORT与MYSQL_ROOT_PASSWORD) mysql -h localhost -P 3306 -u root -pSkyReels@2024Root # 若连接成功,输入exit退出 # 测试Redis连接(替换为.env中的REDIS_PORT与REDIS_PASSWORD) redis-cli -h localhost -p 6379 -a SkyReels@2024Redis # 输入ping,返回PONG即正常,输入exit退出
4.2 访问 SkyReels-V2 应用
-
浏览器访问:打开浏览器,输入
http://服务器IP:APP_PORT(如http://192.168.1.100:8080),若出现 SkyReels-V2 的登录页或首页,即表示前端正常。 -
接口测试(用 curl 或 Postman):若项目提供健康检查接口,可通过以下命令验证后端接口:
# 访问健康检查接口(返回UP即正常) curl http://服务器IP:8080/actuator/health # 示例成功响应: # {"status":"UP","components":{"db":{"status":"UP"},"redis":{"status":"UP"}}}
五、生产环境优化建议
测试环境部署完成后,若要用于生产,需从安全性、性能、可维护性三个维度进行优化,避免线上故障。
5.1 安全性优化
-
最小化权限:
- 不使用 root 用户启动容器,在
docker-compose.yml中添加user: "1000:1000"(指定普通用户 ID)。 - MySQL 仅授权
skyreels_app用户访问skyreels_v2数据库,不赋予 root 权限。
- 不使用 root 用户启动容器,在
-
关闭不必要端口:
- 生产环境不对外暴露 MySQL(3306)与 Redis(6379)端口,删除
docker-compose.yml中对应服务的ports配置(容器内通过服务名访问,无需对外暴露)。
- 生产环境不对外暴露 MySQL(3306)与 Redis(6379)端口,删除
-
启用 HTTPS:
- 部署 Nginx 反向代理,配置 SSL 证书(推荐 Let's Encrypt 免费证书),将 80 端口转发到 443,强制 HTTPS 访问。
5.2 性能优化
-
资源限制:
- 在
docker-compose.yml中为每个服务添加资源限制,避免单服务占用过多资源:deploy: resources: limits: cpus: '2' # 最多使用2核CPU memory: 4G # 最多使用4G内存 reservations: cpus: '1' # 至少分配1核CPU memory: 2G # 至少分配2G内存
- 在
-
存储优化:
- 视频上传目录(
./app/upload)挂载独立硬盘或云存储(如阿里云 OSS),避免占用系统盘空间。 - MySQL 与 Redis 的数据目录定期备份,可通过
crontab设置定时任务:# 示例:每天凌晨3点备份MySQL数据 0 3 * * * docker exec skyreels-mysql mysqldump -u root -pSkyReels@2024Root skyreels_v2 > /opt/backup/skyreels_mysql_$(date +%Y%m%d).sql
- 视频上传目录(
5.3 可维护性优化
-
日志管理:
- 配置日志轮转(通过
logrotate),避免日志文件过大:
写入以下内容:# 创建日志轮转配置 vim /etc/logrotate.d/skyreels/opt/skyreels/app/logs/*.log { daily # 每天轮转 rotate 7 # 保留7天日志 compress # 压缩旧日志 missingok # 日志不存在时不报错 notifempty # 空日志不轮转 }
- 配置日志轮转(通过
-
监控告警:
- 部署 Prometheus + Grafana 监控容器资源、应用接口响应时间,设置 CPU / 内存使用率告警(如超过 80% 时发送邮件)。
六、常见问题排查
部署过程中可能遇到各种问题,以下是高频问题的解决方案,帮助快速定位故障。
6.1 Docker 服务启动失败
现象:执行systemctl start docker后,服务状态为 failed。排查步骤:
- 查看 Docker 日志,定位错误原因:
journalctl -u docker -f - 常见原因与解决:
- 内核版本过低:升级欧拉 Linux 内核至 3.10.0 以上。
- SELinux 冲突:临时关闭 SELinux(
setenforce 0),或添加 Docker 到 SELinux 白名单。
6.2 应用连接 MySQL 失败
现象:日志中出现 “Could not create connection to database server”。常见原因:
- MySQL 服务未启动:执行
docker compose start skyreels-mysql启动。 - 数据库密码错误:核对
.env中的MYSQL_PASSWORD与docker-compose.yml中的配置是否一致。 - 容器网络问题:确保应用与 MySQL 在同一网络(Docker Compose 默认创建统一网络,无需额外配置)。
6.3 端口冲突
现象:启动时提示 “port is already allocated”(端口已被占用)。解决方法:
- 查找占用端口的进程:
netstat -tulnp | grep 8080 # 替换为冲突的端口 - 停止占用端口的进程,或修改
.env中的端口号(如将APP_PORT改为 8081)。
七、总结
本文通过 Docker Compose 实现了 SkyReels-V2 在欧拉 Linux 上的快速部署,从环境准备、配置编写到验证优化,覆盖了部署全流程。容器化方案不仅简化了依赖安装,还能确保环境一致性,减少 “本地正常、线上报错” 的问题。若您需要扩展功能(如集成对象存储、添加 CDN 加速),可参考 SkyReels-V2 官方文档,在现有部署架构上逐步迭代。
最后提醒:生产环境务必做好数据备份与安全防护,避免因配置不当导致业务损失。如有部署疑问,可在 SkyReels-V2 的 GitHub 仓库(https://github.com/skyReels/SkyReels-V2)提交 Issue,获取社区支持。
openEuler部署SkyReels-V2指南

2991

被折叠的 条评论
为什么被折叠?



