基于腾讯云 Lighthouse 自建论坛及图片预处理工具

257 天前
 panisertoller

网站图片是影响用户体验和网站性能的重要因素之一。如果图片过大、过多或者格式不合适,会导致网页加载缓慢、占用流量和存储空间,甚至影响网站的 SEO 排名。为了解决这些问题,我们可以使用图片预处理工具,对网站图片进行优化和处理,例如:

本文将引导读者通过在腾讯云 Lighthouse 服务器部署 Flarum 和 Imgproxy ,且实现论坛图片在不修改原图的基础上增加上述图片预处理能力。

购买并配置 Lighthouse 服务器

Lighthouse 是腾讯云推出的一款轻量应用服务器产品,它提供了高性价比、高可用性、高安全性和高灵活性的云端计算服务。具体信息参阅官方文档:轻量应用服务器概述

为了部署 imgproxy 服务,我们需要购买一台轻量应用服务器,并配置好相关的环境和依赖。购买步骤参见官方文档:使用轻量应用服务器一键创建应用,**应用类型请选择k3s**。

编写 Flarum 和 Imgproxy 配置文件

Flarum 是一款非常简洁的 PHP 开源论坛程序,它响应快速、简便易用,拥有打造高质量社区的一切功能。Flarum 还高度可扩展,可以对它进行深度定制。

Imgproxy 是一个基于 Go 语言开发的、轻量级的、无状态的图片代理服务,它可以快速地处理任何来源的图片,并提供丰富的参数和选项来定制化输出结果。Imgproxy 支持多种格式、压缩算法、裁剪模式、水印样式等功能,并且可以轻松地集成到任何网站或应用中。

Webox 是一款基于 PHP 和 Nginx 的轻量级 Web 应用容器,它可以快速地部署和运行任何 PHP 应用,例如 WordPress 、Flarum 、Discuz 、Typecho 等。Webox 还支持多版本 PHP 和多版本 Nginx ,可以根据应用的需求来选择不同的版本,详见 https://github.com/rehiy/webox-docker

为了快速部署应用,我们使用了两个容器化的应用程序:rehiy/webox:nginx-php8.1imgproxy。前者用于部署 Flarum ,后者用于部署 Imgproxy 。下面我们先生成一些配置文件,请按照路径写入服务器。

这里有必要提醒一下,文件中的换行符应是LF,否则可能会导致脚本无法正常工作。

1 ) Nginx 配置文件

文件路径 /srv/etc/nginx/host.d/flarum.conf,请注意修改为你的域名。

server {
    listen 80;
    server_name bbs.opentdp.org;

    set $pool default;
    set $pooldir /var/www/$pool;
    set $sitedir $pooldir/org.opentdp.bbs;

    root  $sitedir/public;
    index index.php index.htm index.html;
    try_files $uri $uri/ /index.php?$query_string;

    include http.d/server_fastcgi_php;

    location ~ ^/(assets/files/.+(png|jpg|jpeg|webp|avif|gif|ico|svg|heic|bmp|tiff))$ {
        set $image local:///org.opentdp.bbs/public/$1;
        proxy_pass http://127.0.0.1:8080/$image_option/plain/$image;
    }
}

map $args $image_option {
    ~^xs     g:sm/rs:auto:320;
    ~^sm     g:sm/rs:auto:640/wm:1:soea:::0.2;
    ~^md     g:sm/rs:auto:800/wm:1:soea:::0.2;
    ~^lg     g:sm/rs:auto:1024/wm:1:soea:::0.2;
    ~^xl     g:sm/rs:auto:1280/wm:1:soea:::0.2;
    ~^xxl    g:sm/rs:auto:1600/wm:1:soea:::0.2;
    ~^3xl    g:sm/rs:auto:2048/wm:1:soea:::0.2;
    ~^4xl    g:sm/rs:auto:2560/wm:1:soea:::0.2;
    ~^5xl    g:sm/rs:auto:3264/wm:1:soea:::0.2;
    ~^6xl    g:sm/rs:auto:4080/wm:1:soea:::0.2;
    default  g:sm/rs:auto:1024/wm:1:soea:::0.2;
}

2 ) Flarum 自动安装脚本

文件路径 /srv/etc/wkit.d/s7-flarum

#!/bin/sh
#

if [ ! -x /usr/bin/composer ]; then
    wget -qO composer-setup.php https://getcomposer.org/installer
    php composer-setup.php --install-dir=/usr/bin --filename=composer
    rm composer-setup.php
fi

if [ ! -f /var/www/default/org.opentdp.bbs/composer.json ]; then
    mdkir -p /var/www/default/org.opentdp.bbs
    ## install flarum ##
    cd /var/www/default/org.opentdp.bbs
    composer create-project flarum/flarum .
    composer require flarum-lang/chinese-simplified
fi

3 ) Flarum 计划任务脚本

文件路径 /srv/etc/periodic/5min/flarum-cron

#!/bin/sh
#

cd /var/www/default/org.opentdp.bbs
php flarum schedule:run
chown -R 2:2 .

4 )添加水印和回退图片

回退图片路径 /srv/htdocs/fallback.png,找不到图片时使用这个图作为回退

水印图片路径 /srv/htdocs/watermark.svg,务必使用svg格式,否则会水印可能变形或模糊

5 ) kubernetes 配置文件

文件路径 /srv/myforum.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: &name myforum
  labels:
    app: *name
spec:
  selector:
    matchLabels:
      app: *name
  template:
    metadata:
      labels:
        app: *name
    spec:
      containers:
        - name: nginx-php8
          image: rehiy/webox:nginx-php8.1
          ports:
            - containerPort: 80
          volumeMounts:
            - name: *name
              subPath: etc
              mountPath: /var/config
            - name: *name
              subPath: htdocs
              mountPath: /var/www/default
        - name: imgproxy
          image: darthsim/imgproxy
          env:
            - name: IMGPROXY_READ_TIMEOUT
              value: "30"
            - name: IMGPROXY_WRITE_TIMEOUT
              value: "30"
            - name: IMGPROXY_MAX_SRC_RESOLUTION
              value: "1200"
            - name: IMGPROXY_WATERMARK_PATH
              value: /htdocs/watermark.svg
            - name: IMGPROXY_FALLBACK_IMAGE_PATH
              value: /htdocs/fallback.png
            - name: IMGPROXY_LOCAL_FILESYSTEM_ROOT
              value: /htdocs
            - name: IMGPROXY_IGNORE_SSL_VERIFICATION
              value: "true"
            - name: IMGPROXY_JPEG_PROGRESSIVE
              value: "true"
            - name: IMGPROXY_PNG_INTERLACED
              value: "true"
            - name: IMGPROXY_ENFORCE_AVIF
              value: "true"
            - name: IMGPROXY_ENFORCE_WEBP
              value: "true"
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: *name
              subPath: htdocs
              mountPath: /htdocs
      volumes:
        - name: *name
          hostPath:
            path: /srv
            type: DirectoryOrCreate
---
kind: Service
apiVersion: v1
metadata:
  name: &name myforum
  labels:
    app: *name
spec:
  selector:
    app: *name
  ports:
    - name: http
      port: 80
      targetPort: 80
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: &name myforum
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
  rules:
    - host: bbs.opentdp.org
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: *name
                port:
                  name: http

配置文件中的每个环境变量都有特定的作用,简单地介绍一下:

部署 Flarum 和 Imgproxy 服务

通过 ssh 登录服务器,执行以下命令,部署 Flarum 和 Imgproxy 服务。

kubectl apply -f /srv/myforum.yaml

等待配置完成,已经成功地部署并集成了 flarum 论坛和 imgproxy 服务,也可以在你的新论坛上享受快速、安全、灵活的图片处理功能了。

测试 Imgproxy 图片优化能力

在浏览器打开这个地址 https://bbs.opentdp.org/assets/files/2023-08-18/1692350245-285421-img30.jpg,观察图片是否正常显示。

结束语

本文以 Flarum 论坛程序作为引子,测试了 Imgproxy 的基础能力,实际上广大读者可以依据教程扩展到其他任何需要图片处理的场景中去,起码基于文本可以很简单的实现扩展 Wordpress 、Disucz 等 php 应用的图片处理能力。

949 次点击
所在节点    云计算
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/968832

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX