项目地址:https://github.com/bs-community/blessing-skin-server
挑选一个你喜欢的位置,随后新建一个文件夹skin
shmkdir skin
随后进入文件夹
shcd skin
下载最新版的Blessing Skin
shwget https://github.com/bs-community/blessing-skin-server/releases/download/6.0.2/blessing-skin-server-6.0.2.zip
随后解压之
shunzip blessing-skin-server-6.0.2.zip
应当会有下面的文件结构

需要新建一个.env作为Blessing Skin的配置
shtouch .env
向其中写入内容如下,其中的<skin_user_name>和<skin_user_password>是数据库的用户名和密码,需要自己想一个
.envAPP_NAME="Blessing Skin" APP_ENV=production APP_KEY= APP_DEBUG=true APP_FALLBACK_LOCALE=zh-CN # --- 数据库配置 (对应 docker-compose 的 db 服务) --- DB_CONNECTION=mysql DB_HOST=172.24.0.30 DB_PORT=3306 DB_DATABASE=blessingskin DB_USERNAME=<skin_user_name> DB_PASSWORD=<skin_user_password> DB_PREFIX= # --- 密码加密 --- PWD_METHOD=BCRYPT SALT= # --- 缓存与会话 (使用 Redis) --- CACHE_DRIVER=redis SESSION_DRIVER=redis QUEUE_CONNECTION=redis # --- Redis 配置 (对应 docker-compose 的 redis 服务) --- REDIS_CLIENT=phpredis REDIS_HOST=172.24.0.20 REDIS_PASSWORD=null REDIS_PORT=6379 # --- 邮件配置 (自行填写) --- MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=465 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=null MAIL_FROM_NAME=null # --- 其他 --- PLUGINS_DIR= PLUGINS_URL= PLUGINS_REGISTRY=https://moeluoyu.xyz/api/plugins-dist/registry_zh_CN.json
随后返回上级目录
shcd ..
非常不幸,Blessing Skin没有提供Docker镜像,因此需要自己做一个。由于Blessing Skin使用PHP编写,并使用mysql和redis作为数据库和缓存,因此使用php容器,并安装对应依赖
国内网络可能会出问题,因此需要换到阿里云镜像源
首先建立一个dockerfile
shtouch Dockerfile
向其中写入如下内容
DockerfileFROM php:8.1-apache-bookworm # 换源 RUN echo "deb https://mirrors.aliyun.com/debian/ bookworm main non-free non-free-firmware contrib" > /etc/apt/sources.list && \ echo "deb https://mirrors.aliyun.com/debian-security/ bookworm-security main non-free non-free-firmware contrib" >> /etc/apt/sources.list && \ echo "deb https://mirrors.aliyun.com/debian/ bookworm-updates main non-free non-free-firmware contrib" >> /etc/apt/sources.list # 复制脚本 COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ # 安装依赖和扩展 RUN apt-get update && apt-get install -y ca-certificates git unzip && \ install-php-extensions gd zip pdo_mysql redis bcmath exif intl # 配置 Apache WORKDIR /app ENV APACHE_DOCUMENT_ROOT /app/public RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf && \ sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf && \ a2enmod rewrite headers EXPOSE 80
然后使用如下命令构建镜像。此处使用主机网络以避免网络问题导致的失败
shsudo docker build --network=host -t blessing_skin_app
使用docker-compose管理docker容器是很好的选择。首先建立一个docker-compose.yaml
shtouch docker-compose.yaml
向其中写入如下内容,注意<skin_user_name>和<skin_user_password>是之前设置的用户名和密码,另外需要设置一个root密码<root_password>,设得复杂一些
yamlservices:
# --- 1. Web 应用 ---
skin:
build:
context: .
image: blessing_skin_app
container_name: blessing_skin_app
restart: always
ports:
- "8000:80"
volumes:
# 代码目录:挂载当前目录下的 skin 文件夹
- ./skin:/app
- /etc/localtime:/etc/localtime:ro
depends_on:
- redis
- db
networks:
app_net:
ipv4_address: 172.24.0.10
# --- 2. 缓存服务 ---
redis:
image: redis:alpine
container_name: blessing_skin_redis
restart: always
command: redis-server --appendonly yes
volumes:
# 缓存数据:挂载当前目录下的 redis 文件夹
- ./redis:/data
- /etc/localtime:/etc/localtime:ro
networks:
app_net:
ipv4_address: 172.24.0.20
# --- 3. 数据库服务 ---
db:
image: mariadb:10.6
container_name: blessing_skin_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: blessingskin
MYSQL_USER: <skin_user_name>
MYSQL_PASSWORD: <skin_user_password>
volumes:
# 数据库文件:挂载当前目录下的 mysql 文件夹
# ⚠️ 注意:这个文件夹在宿主机必须有正确的权限 (UID 999)
- ./mysql:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
networks:
app_net:
ipv4_address: 172.24.0.30
# 网络配置保持不变
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.24.0.0/16
gateway: 172.24.0.1
在启动容器之前,还需要创建相应的文件夹
shmkdir mysql redis
容器中的用户此时不具备访问这些文件夹的权限,简单的做法是
shsudo chmod 777 -R ./skin/ ./mysql/ ./redis/
随后启动docker容器
shsudo docker compose up -d
这时候访问页面会报错,这是因为还有没完成配置。在容器运行时执行下面的命令完成配置
sh# 1. 生成 APP_KEY
sudo docker compose exec skin php artisan key:generate
# 2. 运行数据库迁移 (创建表结构)
sudo docker compose exec skin php artisan migrate --seed
# 3. 清理并生成配置缓存
sudo docker compose exec skin php artisan config:cache
sudo docker compose exec skin php artisan route:cache
sudo docker compose exec skin php artisan view:cache
随后就可以快乐地注册用户了
由于Blessing Skin的作者不知道怎么回事,居然在代码里面写绝对路径,这导致如果想使用子目录的方式部署还需要费点劲配置一下nginx
比方说我希望将Blessing Skin部署到/skin下,那么就要在nginx对应的server下加如下的配置
nginxlocation /skin/ { proxy_pass http://127.0.0.1:8000/; # ---------------- Header 设置 ---------------- proxy_set_header Host <your_domain>; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # ---------------- 重定向修复 ---------------- proxy_redirect https://<your_domain>/ https://<your_domain>/skin/; proxy_redirect / /skin/; proxy_cookie_path / /skin/; # ---------------- 核心修复:内容替换 ---------------- proxy_set_header Accept-Encoding ""; # 禁止压缩,否则无法替换 # 扩大替换范围,确保包含所有类型文件 sub_filter_types *; sub_filter_once off; # 1. 基础路径修正(针对 HTML 标签) sub_filter '<head>' '<head><base href="/skin/">'; sub_filter 'href="/' 'href="/skin/'; sub_filter 'src="/' 'src="/skin/'; sub_filter 'action="/' 'action="/skin/'; # 2. 【关键】针对报错文件的暴力替换 # 把源码里出现的 "/meta.js" 强行改成 "/skin/meta.js" sub_filter '/meta.js' '/skin/meta.js'; # 把源码里出现的 "/lang/" 强行改成 "/skin/lang/" sub_filter '/lang/' '/skin/lang/'; # 3. 针对 JS 内部可能的绝对路径 API 调用 sub_filter 'https://<your_domain>/' 'https://<your_domain>/skin/'; }
其中的<your_domain>需要换成自己的域名
最后,来到站点配置

将站点地址写为实际的地址并报错。然后来到资源配置

取消勾选自动判断资源文件地址,并勾选强制启用HTTPS(作者到底写了多少bug)。这样就能愉快地使用了
本文作者:GBwater
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!