编辑
2025-11-28
网络
0

目录

下载 Blessing Skin
创建docker镜像
启动docker容器
nginx转发配置

下载 Blessing Skin

项目地址:https://github.com/bs-community/blessing-skin-server

挑选一个你喜欢的位置,随后新建一个文件夹skin

sh
mkdir skin

随后进入文件夹

sh
cd skin

下载最新版的Blessing Skin

sh
wget https://github.com/bs-community/blessing-skin-server/releases/download/6.0.2/blessing-skin-server-6.0.2.zip

随后解压之

sh
unzip blessing-skin-server-6.0.2.zip

应当会有下面的文件结构

image.png

需要新建一个.env作为Blessing Skin的配置

sh
touch .env

向其中写入内容如下,其中的<skin_user_name><skin_user_password>是数据库的用户名和密码,需要自己想一个

.env
APP_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

随后返回上级目录

sh
cd ..

创建docker镜像

非常不幸,Blessing Skin没有提供Docker镜像,因此需要自己做一个。由于Blessing Skin使用PHP编写,并使用mysql和redis作为数据库和缓存,因此使用php容器,并安装对应依赖

国内网络可能会出问题,因此需要换到阿里云镜像源

首先建立一个dockerfile

sh
touch Dockerfile

向其中写入如下内容

Dockerfile
FROM 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

然后使用如下命令构建镜像。此处使用主机网络以避免网络问题导致的失败

sh
sudo docker build --network=host -t blessing_skin_app

启动docker容器

使用docker-compose管理docker容器是很好的选择。首先建立一个docker-compose.yaml

sh
touch docker-compose.yaml

向其中写入如下内容,注意<skin_user_name><skin_user_password>是之前设置的用户名和密码,另外需要设置一个root密码<root_password>,设得复杂一些

yaml
services: # --- 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

在启动容器之前,还需要创建相应的文件夹

sh
mkdir mysql redis

容器中的用户此时不具备访问这些文件夹的权限,简单的做法是

sh
sudo chmod 777 -R ./skin/ ./mysql/ ./redis/

随后启动docker容器

sh
sudo 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

随后就可以快乐地注册用户了

nginx转发配置

由于Blessing Skin的作者不知道怎么回事,居然在代码里面写绝对路径,这导致如果想使用子目录的方式部署还需要费点劲配置一下nginx

比方说我希望将Blessing Skin部署到/skin下,那么就要在nginx对应的server下加如下的配置

nginx
location /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>需要换成自己的域名

最后,来到站点配置

image.png

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

image.png

取消勾选自动判断资源文件地址,并勾选强制启用HTTPS(作者到底写了多少bug)。这样就能愉快地使用了

本文作者:GBwater

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!