GaGa's Blog

One GaGa, One World !

ThinkPHP 是一个以 MVC + 约定优于配置 为核心的 PHP Web 框架,强调开发效率与清晰结构。

  • 主流版本是 ThinkPHP 5.x / 6.x,6.x 更偏向现代化(PSR 规范、依赖注入、强类型)
  • 它并不追求“全栈宇宙”,而是给你一套可控、透明、可裁剪的工程骨架。

top-think php

Read more »

问题

1.报错含义拆解:

nginx: [emerg] host not found in upstream "php-upstream-ios"
这句话不是在说 upstream 名字不存在,而是在说:
upstream 里配置的 server 主机名无法被解析(DNS 失败)

真正出问题的不是 php-upstream-ios 这个 upstream,而是它里面这一行:

Read more »

GitLab 默认角色权限是分层、递增的,核心围绕三类能力展开:

  • 仓库代码(Repository)
  • 协作流程(Issue / MR / CI)
  • 项目与权限管理(Settings / Members)

2.GitLab 默认角色一览(官方内建)
2.1.角色层级(从低到高)

Read more »

1. In-Place Upgrade 的准确含义

1.1 字面拆解

  • In-Place:在原地、不挪窝
  • Upgrade:升级系统版本

合在一起只有一个意思:

Read more »

Rocky Linux 9 → 10 这种**跨主版本升级(major upgrade)**在企业运维中确实要非常谨慎。
目前(截至 2025 年底),Rocky 10 已经发布,但官方还没正式提供像 leapp 那样“一键无损升级”的稳定路径。


一、官方现状与支持情况

项目 状态(2025年) 说明
Rocky 9 → 9.x ✅ 支持 dnf upgrade 即可滚动升级
Rocky 9 → 10 ⚠️ 实验性 RHEL 官方还未发布基于 leapp 的稳定迁移工具(leapp-data-rocky10 仍在测试)
RHEL 9 → 10(预览) 🔬 开发中 红帽官方计划在 2026 Q1 正式提供
推荐做法 ✅ 全量迁移安装(fresh install) 使用 Ansible/Kickstart/镜像重装 + 数据迁移脚本
Read more »

要一个 RockyLinux9 最小可用的多阶段构建镜像,能编译并运行 go-sqlite3因为 go-sqlite3 需要 sqlite-devel (编译阶段) + sqlite-libs (运行阶段),所以我们只要保证 builder 和 runtime 两个阶段分别装对依赖就行。

最小化的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# ---------- builder 阶段 ----------
FROM rockylinux:9 AS builder

# 安装构建依赖 (gcc + sqlite-devel)
RUN dnf -y groupinstall "Development Tools" && \
dnf -y install golang sqlite-devel && \
dnf clean all

WORKDIR /app

# 设置 CGO
ENV CGO_ENABLED=1 \
GOOS=linux \
GOARCH=amd64

# 先下载依赖,避免源码频繁变动导致重复编译
COPY go.mod go.sum ./
RUN go mod download

# 拷贝源码并编译
COPY . .
RUN go build -ldflags="-w -s" -o app .

# ---------- runtime 阶段 ----------
FROM rockylinux:9 AS runtime

# 仅安装运行时依赖 (sqlite-libs),保持镜像尽量小
RUN dnf -y install sqlite-libs && \
dnf clean all

WORKDIR /app

# 从 builder 复制二进制
COPY --from=builder /app/app .

CMD ["./app"]

解释

Read more »

Tomcat 与 Redis 结合做 Session 管理的本质,是让 Tomcat 把原本本地内存中的 StandardManager 替换为一个分布式的 RedisSessionManager,所有节点共享同一个 Redis,实现真正的横向扩展

Tomcat 装 Session Manager 模块 → 修改 server.xml → 配置 Redis → 重启验证 → 多节点压测。

步骤一:准备 Redis 环境

  1. 单节点环境可先跑 Redis(不过生产必须 Redis Cluster / Sentinel)。

  2. 业务上需要注意:Redis 配持久化 RDB+AOF 或至少 AOF appendfsync everysec,避免宕机丢会话。

Read more »

Python 世界里,pip 就像是宇宙飞船的推进器,不装它你就只能在原地踏步。

1.检查系统里是否已有 pip

1
2
3
python3 -m pip --version
pip --version
pip3 --version

若已有 pip,会直接显示版本。

Read more »

在分布式架构里,Tomcat 的 Session 不再是单机,而要变成可跨节点访问的“共享状态”。核心目的是在多节点负载均衡时保持用户无感的一致会话体验

主流方案分为三类:

  • 会话复制
  • 集中存储
  • 彻底无状态化。

外部集中式会话存储

Read more »

alias vs root 的本质区别

1.1.root 是“前缀拼接”

root 会把 location 匹配到的 URI 片段“拼接”到文件系统路径后面。

location /img/ {
    root /data/www;
}
# 访问 /img/a.png → 文件路径 /data/www/img/a.png
Read more »

一、最常见的写法(主机 8000 → 容器 8082)

docker-compose.yml 里:

1
2
3
4
5
6
7
version: "3.8"

services:
web:
image: myapp:latest
ports:
- "8000:8082" # 主机:容器

解释:

Read more »
0%