分类: 编程

分享 Go 语言、Docker/K8s、WordPress 开发、小程序实战等编程技术心得。注重代码实战与工程落地,涵盖后端架构、性能优化与开发工具使用技巧。

  • 构建WordPress插件、主题开发镜像

    构建PHP镜像

    PHP内置服务器的路由脚本可以参考这个链接:使用PHP内置服务器运行WORDPRESS

    FROM php:8.1.27-alpine
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 
    && mkdir /code 
    && docker-php-ext-install mysqli
    CMD [ "php", "-S", "0.0.0.0:8080", "-t", "/code", "/code/router.php" ]

    配置compose

    version: "3"
    services:
      wordpress:
        build: .
        volumes:
          - /Users/ianzhi/Code/php/wordpress:/code
        restart: always
        ports:
          - 8080:8080
      mysql:
        image: mysql:8.0.36
        environment:
          MYSQL_ROOT_PASSWORD: 'root'
        expose:
          - 3306
        ports:
          - 3306:3306
    
  • MySQL创建分区表相关

    背景:一个记录表,类似日志的信息,查询大量集中在某个用户个人的数据,分区需要尽量保证一个人的数据在一个分区里。因此采用通过user_id进行hash分区的方式。

    (更多…)

  • 使用Caddy反向代理WordPress

    具体配置

    xxx.xxxx.xxx {
        tls youremail@yourmailserver
    
        root * /path/to/wordpress
    
        # GZIP和FPM配置
        encode gzip
        file_server
        php_fastcgi php:9000
    
        # 静态文件配置
        @static_files {
            path_regexp .(?:css|js|woff2?|svg|gif|map|png|jpg|webp|gif|jpeg|mp4|mp3|wav|mov|heic)
        }
        header @static_files {
            Cache-Control "public, max-age=15778463"
            X-Robots-Tag "none"
            X-Permitted-Cross-Domain-Policies "none"
            X-Frame-Options "SAMEORIGIN"
            X-Download-Options "noopen"
            X-Content-Type-Options "nosniff"
            # Referrer-Policy "no-referrer"
        }
    
        # 禁止访问的目录/文件
        @disallowed {
            #path /wp-cron.php
            #path /xmlrpc.php
            path *.sql
            path /wp-content/uploads/*.php
            path /wp-content/uploads/*.html
            path /wp-content/debug.log
        }
        rewrite @disallowed =404
    }
  • MySQL配置及优化

    一、配置项及意义

    配置项 意义 建议
    innodb_buffer_pool_size 控制 InnoDB 存储引擎的内存缓存池大小 总内存(非专用服务器可以使用希望分配给数据库的内存量)的 50% 到 80%
    innodb_buffer_pool_chunk_size  InnoDB 缓冲池大小调整操作的块大小,默认值为 128MB innodb_buffer_pool_size = innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
    innodb_buffer_pool_instances 决定了 InnoDB 缓冲池(Buffer Pool)的实例数量 设置为 CPU 核心数的较小倍数,超过 1GB 时可以适量增加,最高不超过1000
    innodb_buffer_pool_in_core_file 从核心文件中排除缓冲池页面,参考15.8.3.7 从核心文件中排除缓冲池页面_MySQL 8.0 参考手册 off
    innodb_flush_log_at_trx_commit 定义了事务提交时,InnoDB 如何处理未刷入(flush)的重做日志(redo log),默认值为1,设置为0/2,在操作系统崩溃或断电时可能会丢失最后一秒的事务数据 对于需要高可靠性和数据完整性的系统设置为 1,对于性能要求更高,且可以接受一定数据丢失风险的系统设置为 0 或 2。
    innodb_change_buffering 控制着 InnoDB 执行变更缓冲(Change Buffering)的程度 none
    innodb_log_buffer_size 设置InnoDB日志缓冲区的大小 64m
    innodb_flush_method 决定了 InnoDB 如何将数据和日志刷新(flush)到磁盘 O_DIRECT
    innodb_purge_threads 定义了用于回收不再需要的 UNDO 日志的 Purge 线程的数量 cpu > 4 ? 4 : 1
  • APP Store应用上架需要注意的点

    最近公司的应用上架APP Store过程中一直遇到审核问题,记录一下遇到的问题,方便后续其他应用开发避坑。

    ## 1、与安卓通用的审核条件

    >>> [APP分发前的准备工作](https://www.dnote.cn/posts/899)

    ## 2、虚拟支付

    – 所有的虚拟商品直接使用苹果的内购方式付款,避免后续改造的问题(需要给苹果30%抽成)
    – 提前考虑宣传物料和价格在不同货币区域的展示,或者避免物料中包含价格
    – 至少审核阶段,不要在应用界面里放跳转到其他应用的链接,苹果审核会认为这涉及到其他支付方式

    ## 3、强制登录问题
    微信小程序也是一样的要求,所以最好设计阶段就开始考虑这个问题。

    – 不需要用户信息的数据不设计为强制鉴权
    – 将引导用户登录放到用户进行必须鉴权的操作时