无需编译源码。准备好 Docker 后,用已发布的阿里云镜像即可自托管(国内拉取更快)。v25 应用镜像基于 PHP 8.4.27,含官方安全修复。
docker compose)任选一台服务器,新建目录并进入(不必克隆整个仓库):
mkdir -p /opt/sharelens && cd /opt/sharelens
下载部署打包文件(含 docker-compose.yml、.env.sample、update.sh 与包内校验和):
curl -fsSL -O https://ulooo.com/sharelens/docker/sharelens-docker.zip
curl -fsSL -O https://ulooo.com/sharelens/docker/SHA256SUMS.txt
# 校验压缩包(下载后、解压前)
sha256sum -c SHA256SUMS.txt
# macOS 可用: shasum -a 256 -c SHA256SUMS.txt
unzip sharelens-docker.zip
# 请先审阅 update.sh,确认无异常后再授权执行
less update.sh
chmod +x update.sh
创建数据与日志映射目录:
mkdir -p app_storage logs/app logs/nginx backups uploads mysql_data redis_data
app_storage — 应用 storage(框架缓存、会话等)logs/app — 应用日志logs/nginx — Nginx 日志backups — 备份文件uploads — 用户上传的公开文件mysql_data — MySQL 数据持久化redis_data — Redis 数据持久化(session / cache / 队列)cp .env.sample .env
用编辑器打开 .env,至少修改下列项:
# 镜像版本(按需改成实际发布标签,例如 v25)
APP_IMAGE=registry.cn-shanghai.aliyuncs.com/ulooocom/sharelens:v25
# Laravel 密钥(生产必须设置,且部署后不要轻易更换)
# 可执行: openssl rand -base64 32
# 然后写成: APP_KEY=base64:生成的内容
APP_KEY=
# 访问地址与端口
APP_URL=https://sharelens.example.com
APP_PORT=8080
# 数据库密码(必填,且足够复杂)
DB_PASSWORD=请改成强密码
MYSQL_ROOT_PASSWORD=请改成另一个强密码
# 后台路径(不要用 admin)。留空则首次启动自动生成 admin_xxxxxx
ADMIN_PATH=
生成 APP_KEY 示例:
echo "APP_KEY=base64:$(openssl rand -base64 32)"
# 将输出写入 .env 的 APP_KEY=
可选:GitHub / Google OAuth、Sentry 等按 .env 内注释自行填写。前面有反向代理时,保持 TRUSTED_PROXIES=* 即可。
邮件 SMTP 请在启动后到后台「设置 → 邮件 SMTP」配置;.env 默认为 MAIL_MAILER=log,未配置前不会真发信。空间里的「邮件发送待评提醒」依赖 SMTP,以及 queue / scheduler 容器。
docker compose up -d
首次会拉取应用、MySQL、Redis 镜像;app 容器启动时会自动执行数据库迁移。
查看状态与日志:
docker compose ps
docker compose logs -f app
浏览器访问:http://服务器IP:8080(或你在 APP_URL / 反代中配置的域名)。
# 停止(保留数据目录;不要加 -v,否则会删掉 named volume)
docker compose down
# 更新到新版本:优先用滚动脚本(只重建 app / queue / scheduler,不碰 Redis)
./update.sh v25
# 在 app 容器里执行 artisan
docker compose exec app php artisan migrate --force
已有环境若刚加上 redis_data 卷:先 mkdir -p redis_data,再 docker compose up -d redis。命令变更会重建 Redis,这一次登录态仍会失效;之后容器重建、整栈 down/up、宿主机重启都会保留 session。
app(Web)、queue(队列)、scheduler(定时任务)、mysql、redis。mysql_data、redis_data、uploads、backups 与 .env。.env 提交到公开仓库。APP_KEY,否则已加密的 session 会全部失效。update.sh 前请先用 less / 编辑器审阅脚本内容。registry.cn-shanghai.aliyuncs.com/ulooocom/sharelens(国内更快)。发版仍同步推送 GHCR,需要时把 APP_IMAGE / MYSQL_IMAGE / REDIS_IMAGE 改成 ghcr.io/ulooocom/sharelens:... 即可。