前端项目加载对象储存文件跨域问题解决。nginx配置

location /file/ {
    rewrite ^/file(/.*)$ $1 break;
    proxy_pass https://english-1316546603.cos.ap-singapore.myqcloud.com;
}

xiang 发布于  2024-8-5 14:15 

技术文章收藏

docker挂载volume的用户权限问题,理解docker容器的uid

https://cloud.tencent.com/developer/article/1480017


xiang 发布于  2024-8-1 12:30 

docker-compose 指定用户

version: '3'
services:
  hyperf:
    image: dev-mineadmin-hyperf
    restart: always
    environment:
      - "TIMEZONE=Asia/Shanghai"
      - "APP_PROJECT=mineadmin-hyperf-dev"
      - "APP_SYSTEM_ENV=docker"
    working_dir: "/opt/www"
    user: ubuntu
    ports:
      - 7501:7501
      - 7502:7502
      - 7503:7503
    volumes:
      - .:/opt/www

networks:
  default:
    name: dev-mineadmin-hyperf

xiang 发布于  2024-7-31 13:07 

dockerfile alpine 创建用户赋予sudo权限

RUN apk add --no-cache sudo

# 添加新用户 ubuntu
RUN adduser -D -s /bin/sh ubuntu

# 将新用户添加到 sudoers 列表,允许其无需密码执行 sudo 命令
# 注意:这里直接 echo 写入 sudoers 文件,实际使用中应使用 visudo 来避免配置错误
RUN echo 'ubuntu ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/ubuntu \
 && chmod 0440 /etc/sudoers.d/ubuntu && su - ubuntu

xiang 发布于  2024-7-31 13:02 

hyperf 代理缓存类 开发环境处理

在开发环境
dockerfile SCAN_CACHEABLE 要设置为false

ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
    SCAN_CACHEABLE=(false)

官方文档

所有被 AOP 影响的类,都会在 ./runtime/container/proxy/ 文件夹内生成对应的 代理类缓存,是否在启动时自动生成取决于 config/config.php 配置文件中 scan_cacheable 配置项的值,默认值为 false,如果该配置项为 true 则 Hyperf 不会扫描和生成代理类缓存,而是直接以现有的缓存文件作为最终的代理类。如果该配置项为 false,则 Hyperf 会在每次启动应用时扫描注解扫描域并自动的生成对应的代理类缓存,当代码发生变化时,代理类缓存也会自动的重新生成。

通常在开发环境下,该值为 false,这样更便于开发调试,而在部署生产环境时,我们可能会希望 Hyperf 提前将所有代理类提前生成,而不是使用时动态的生成,可以通过 php bin/hyperf.php 命令来生成所有代理类,然后再通过环境变量 SCAN_CACHEABLE 为 true 修改该配置项的值,以达到启动时间更短、应用内存占用更低的目的。

说明

如果开发环境使用docker启动

构建镜像的时候 SCAN_CACHEABLE=(false)

这样 每次启动 容器 ,应用时扫描注解扫描域并自动的生成对应的代理类缓存


xiang 发布于  2024-7-29 20:48 

mineadmin mapper用法

[该文章已加密,请点击标题输入密码访问]


xiang 发布于  2024-7-26 16:36 

laravel hyeprf whereHas 分析

[该文章已加密,请点击标题输入密码访问]


xiang 发布于  2024-7-25 22:04 

mineadmin mapper使用

SystemMenuMapper

  /**
     * 获取子孙menus.
     */
    public function getDescendantsMenus(int $id): array
    {
        $params = ['level' => $id];
        return $this->handleSearch($this->model::query(), $params)->get()->toArray();
    }

    /**
     * 搜索处理器.
     */
    public function handleSearch(Builder $query, array $params): Builder
    {
        if (isset($params['status']) && filled($params['status'])) {
            $query->where('status', $params['status']);
        }

        if (isset($params['level']) && filled($params['level'])) {
            $query->where('level', 'like', '%' . $params['level'] . '%');
        }

        if (isset($params['name']) && filled($params['name'])) {
            $query->where('name', 'like', '%' . $params['name'] . '%');
        }

        if (isset($params['created_at']) && filled($params['created_at']) && is_array($params['created_at']) && count($params['created_at']) == 2) {
            $query->whereBetween(
                'created_at',
                [$params['created_at'][0] . ' 00:00:00', $params['created_at'][1] . ' 23:59:59']
            );
        }

        if (isset($params['noButton']) && filled($params['noButton']) && $params['noButton'] === true) {
            $query->where('type', '<>', SystemMenu::BUTTON);
        }
        return $query;
    }

xiang 发布于  2024-7-25 20:46 

git filemode false

安全目录

git config --global --add safe.directory /var/www/html

忽略文件属性

git config --global core.filemode false
密码
git config --global credential.helper store

xiang 发布于  2024-7-24 16:54