<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[技术与经验分享]]></title> 
<atom:link href="https://urlzx.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[荔枝的君子进行的技术分享]]></description>
<link>https://urlzx.cn/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
    <title>手机变便携服务器并且实现公网访问</title>
    <link>https://urlzx.cn/4.html</link>
    <description><![CDATA[<p>安装并打开Termux (建议从Google Play获取)<br />
安装tmoe</p>
<pre><code class="language-bash">curl -LO https://gitee.com/mo2/linux/raw/2/2.awk &amp;&amp; awk -f 2.awk</code></pre>
<p>手机如果root了果断选chroot容器，否则使用proot (我这里使用chroot，不确定proot能不能跑)<br />
选择arm64发行版列表<br />
选择Debian<br />
选择最新版13<br />
启动容器<br />
不需要sudo用户也不需要zsh，一路选否<br />
进入了容器环境<br />
我们更新一下并且安装下wget</p>
<pre><code class="language-bash">apt update &amp;&amp; apt upgrade -y &amp;&amp; apt install wget</code></pre>
<p>开始编译NGINX<br />
下载NGINX源码</p>
<pre><code class="language-bash">wget https://nginx.org/download/nginx-1.29.3.tar.gz</code></pre>
<p>解压并进入</p>
<pre><code class="language-bash">tar -zxvf nginx-1.29.3.tar.gz &amp;&amp; cd nginx-1.29.3</code></pre>
<p>安装必要依赖</p>
<pre><code class="language-bash">apt install build-essential zlib1g-dev openssl libssl-dev libbrotli-dev git</code></pre>
<p>由于Debian源缺少Aarch64的pcre3，我们自行下载pcre源码并解压</p>
<pre><code class="language-bash">wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz &amp;&amp; tar -zxvf pcre-8.45.tar.gz</code></pre>
<p>我们可能需要brotli这种更好的压缩算法，让我们来配置ngx_brotli</p>
<pre><code class="language-bash">mkdir -p modules
git clone https://github.com/google/ngx_brotli.git modules/ngx_brotli
cd modules/ngx_brotli
git submodule update --init
cd ../..</code></pre>
<p>好了，我们可以开始编译NGINX了</p>
<pre><code class="language-bash">./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_v3_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_degradation_module \
--with-file-aio \
--with-threads \
--with-compat \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_ssl_preread_module \
--with-http_slice_module \
--add-dynamic-module=./modules/ngx_brotli \
--with-pcre=./pcre-8.45</code></pre>
<p>编译并安装</p>
<pre><code class="language-bash">make -j$(nproc) &amp;&amp; make install</code></pre>
<p>接下来就是搞大家伙了，MySQL<br />
安装依赖</p>
<pre><code class="language-bash">apt install cmake libncurses-dev libaio-dev libtirpc-dev bison flex</code></pre>
<p>下载源码并解压并进入源码目录<br />
这里我选的是9.5.0创新版，喜欢稳定的可以安装8.4.7TLS</p>
<pre><code class="language-bash">wget https://dev.mysql.com/get/mysql-9.5.0.tar.gz &amp;&amp; tar -zxvf mysql-9.5.0.tar.gz &amp;&amp; cd mysql-9.5.0</code></pre>
<p>创建用户和组，创建必要文件夹，设置权限</p>
<pre><code class="language-bash">groupadd -r mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /var/lib/mysql /var/run/mysqld /var/log/mysql
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/log/mysql
chmod 750 /var/lib/mysql /var/log/mysql</code></pre>
<p>开始cmake</p>
<pre><code class="language-bash">mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_C_FLAGS="-O2 -march=native -mtune=native" \
-DCMAKE_CXX_FLAGS="-O2 -march=native -mtune=native" \
-DWITH_UNIT_TESTS=OFF \
-DWITH_SYSTEMD=OFF \
-DWITH_NUMA=OFF \
-DWITH_DEBUG=OFF \
-DINSTALL_MYSQLTESTDIR=OFF \
-DINSTALL_DOCREADMEDIR=OFF \
-DINSTALL_DOCS=OFF \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DPID_FILE_DIR=/var/run/mysqld \
-DMYSQL_DATADIR=/var/lib/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-DMYSQL_USER=mysql \
-DCMAKE_BUILD_TYPE=Release</code></pre>
<p>编译并安装</p>
<pre><code class="language-bash">make -j$(nproc) &amp;&amp; make install</code></pre>
<p>初始化数据库</p>
<pre><code class="language-bash">/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql</code></pre>
<p>记住你的初始密码，否则后果很严重<br />
编辑配置文件</p>
<pre><code class="language-bash">vim /etc/my.cnf</code></pre>
<p>把下面的内容填入</p>
<pre><code class="language-ini">[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysql/error.log
port=3306
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4</code></pre>
<p>接下来安装PHP<br />
我们需要安装两个版本<br />
所以先安装PHP8.5<br />
下载源码包</p>
<pre><code class="language-bash">wget https://www.php.net/distributions/php-8.5.0.tar.gz &amp;&amp; tar -zxvf php-8.5.0.tar.gz &amp;&amp; cd php-8.5.0</code></pre>
<p>安装依赖</p>
<pre><code class="language-bash">apt install libcurl4-openssl-dev libjpeg-dev libpng-dev libwebp-dev libxslt1-dev unzip libfreetype-dev libonig-dev libsqlite3-dev libxml2-dev libzip-dev zip libicu-dev</code></pre>
<p>老样子</p>
<pre><code class="language-bash">./configure \
--prefix=/usr/local/php85 \
--with-config-file-path=/usr/local/php85/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-zlib \
--with-curl \
--with-gd \
--with-webp \
--with-freetype \
--with-jpeg \
--with-xsl \
--with-zip \
--enable-bcmath \
--enable-intl \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm</code></pre>
<p>编译并安装</p>
<pre><code class="language-bash">make -j$(nproc) &amp;&amp; make install</code></pre>
<p>初始化配置文件改为使用unix套接字</p>
<pre><code class="language-bash">cp /usr/local/php85/etc/php-fpm.conf.default /usr/local/php85/etc/php-fpm.conf
cp /usr/local/php85/etc/php-fpm.d/www.conf.default /usr/local/php85/etc/php-fpm.d/www.conf
vi /usr/local/php85/etc/php-fpm.d/www.conf</code></pre>
<p>把</p>
<pre><code class="language-ini">listen = 127.0.0.1:9000</code></pre>
<p>改为</p>
<pre><code class="language-ini">listen = /var/run/php85-fpm.sock</code></pre>
<p>取消</p>
<pre><code class="language-ini">;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660</code></pre>
<p>的注释(删除前面的;)<br />
PHP8.5安装完成了<br />
接下来安装PHP7.4<br />
下载源码包并解压进入</p>
<pre><code class="language-bash">wget https://www.php.net/distributions/php-7.4.33.tar.gz &amp;&amp; tar -zxvf php-7.4.33.tar.gz &amp;&amp; cd php-7.4.33</code></pre>
<p>这里有个坑，系统的openssl是3.x版本<br />
PHP7.4需要1.1.1，这里我们需要安装openssl1.1.1</p>
<pre><code class="language-bash">wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz &amp;&amp; tar -zxvf openssl-1.1.1w.tar.gz &amp;&amp; cd openssl-1.1.1w
./config --prefix=/usr/local/openssl-1.1.1w --openssldir=/usr/local/openssl-1.1.1w/ssl -Wl,-rpath,/usr/local/openssl-1.1.1w/lib
make -j$(nproc) &amp;&amp; make install</code></pre>
<p>使用新安装的openssl进行编译</p>
<pre><code class="language-bash">./configure \
--prefix=/usr/local/php74 \
--with-config-file-path=/usr/local/php74/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl=/usr/local/openssl-1.1.1w \
--with-zlib \
--with-curl \
--with-gd \
--with-webp \
--with-freetype \
--with-jpeg \
--with-xsl \
--with-zip \
--enable-bcmath \
--enable-intl \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm</code></pre>
<p>编译并安装</p>
<pre><code class="language-bash">make -j$(nproc) &amp;&amp; make install</code></pre>
<p>如果php7安装不上就</p>
<pre><code class="language-bash">make clean
make distclean
export CFLAGS="-I/usr/local/openssl-1.1.1w/include"
export LDFLAGS="-L/usr/local/openssl-1.1.1w/lib"
export CXXFLAGS="-std=c++17"</code></pre>
<p>再重新尝试编译<br />
如果还出现openssl版本问题就</p>
<pre><code class="language-bash">mv /usr/include/openssl /usr/include/openssl.bak</code></pre>
<p>再清理再编译<br />
编译好了别忘了替换回来<br />
更改unix套接字过程几乎一致</p>
<pre><code class="language-bash">cp /usr/local/php74/etc/php-fpm.conf.default /usr/local/php74/etc/php-fpm.conf
cp /usr/local/php74/etc/php-fpm.d/www.conf.default /usr/local/php74/etc/php-fpm.d/www.conf
vi /usr/local/php74/etc/php-fpm.d/www.conf</code></pre>
<p>依旧<code>listen = /var/run/php74-fpm.sock</code><br />
然后删了三行注释<br />
这里不过多讲<br />
现在需要在终端输入<code>exit</code><br />
输入tmoe<br />
chroot/proot容器<br />
找已安装容器列表<br />
环境变量与启动项管理<br />
Entrypoint(入口点)<br />
填入</p>
<pre><code class="language-bash">/usr/local/mysql/bin/mysqld_safe --user=mysql &amp;
nginx
/usr/local/php85/sbin/php-fpm
/usr/local/php74/sbin/php-fpm</code></pre>
<p>启动容器<br />
如果PHP74的php-fpm启动报错缺少openssl库就</p>
<pre><code class="language-bash">ln -sf /usr/local/openssl-1.1.1w/lib/libcrypto.so.1.1 /usr/lib/aarch64-linux-gnu/libcrypto.so.1.1
ln -sf /usr/local/openssl-1.1.1w/lib/libssl.so.1.1 /usr/lib/aarch64-linux-gnu/libssl.so.1.1</code></pre>
<p>开始配置phpMyAdmin</p>
<pre><code class="language-bash">mkdir /www-data &amp;&amp; cd /www-data
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.zip
unzip phpMyAdmin-5.2.3-all-languages.zip
chown -R www-data:www-data /www-data
mkdir /etc/nginx/conf.d
vi /etc/nginx/nginx.conf</code></pre>
<p>顶部添加</p>
<pre><code class="language-ini">user  www-data;</code></pre>
<p>在http块添加</p>
<pre><code class="language-ini">include /etc/nginx/conf.d/*.conf;</code></pre>
<p>然后再</p>
<pre><code class="language-bash">vi /etc/nginx/conf.d/phpMyAdmin.conf</code></pre>
<p>把下面内容插入到</p>
<pre><code class="language-ini">server {
    listen 33888;
    root /www-data/phpMyAdmin-5.2.3-all-languages;
    index index.php;
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php85-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}</code></pre>
<p>完成后可以重载NGINX<code>nginx -s reload</code><br />
推荐进行</p>
<pre><code class="language-bash">cd /www-data/phpMyAdmin-5.2.3-all-languages/
cp config.sample.inc.php config.inc.php
vi config.inc.php</code></pre>
<p>把<code>$cfg['blowfish_secret'] = '';</code>后面分号随意32位字符<br />
如果phpMyAdmin无法工作，如<br />
<code>mysqli::real_connect(): (HY000/2002): No such file or directory</code><br />
那就</p>
<pre><code class="language-bash">ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock</code></pre>
<p>至此，访问127.0.0.1:33888即可游玩phpMyAdmin<br />
登录cloudflare<br />
选择Zero Trust<br />
网络&gt;连接器&gt;创建隧道&gt;cloudflared<br />
命名随意</p>
<pre><code class="language-bash"># Add cloudflare gpg key
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg &gt;/dev/null

# Add this repo to your apt repositories
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list

# install cloudflared
sudo apt-get update &amp;&amp; sudo apt-get install cloudflared

sudo cloudflared service install xxxxx #这部分命令cloudflare官网有</code></pre>
<p>这样环境已经完整了</p>]]></description>
    <pubDate>Wed, 03 Dec 2025 10:08:45 +0800</pubDate>
    <dc:creator>荔枝的君子</dc:creator>
    <guid>https://urlzx.cn/4.html</guid>
</item>
<item>
    <title>批量爬取TG频道的图片文件</title>
    <link>https://urlzx.cn/2.html</link>
    <description><![CDATA[<p>因为想搞api站嘛，所以就想爬点图片</p>
<p>这不，找到一个很多好图的频道@WaifuP1c</p>
<p>我就想把图片搞到本地</p>
<p>写了个脚本来获取</p>
<pre><code class="language-python">
import os

import asyncio

from telethon import TelegramClient, events

from telethon.tl.types import MessageMediaPhoto

from datetime import datetime

# 设置API凭证（从 https://my.telegram.org 获取）

API_ID = ''  # 替换为你的API ID

API_HASH = ''  # 替换为你的API HASH

CHANNEL_USERNAME = 'WaifuP1c'  # 替换为目标频道用户名

DOWNLOAD_PATH = 'telegram_images'  # 下载目录

if not os.path.exists(DOWNLOAD_PATH):

    os.makedirs(DOWNLOAD_PATH)

def get_existing_files():

    return set(os.listdir(DOWNLOAD_PATH))

async def main():

    client = TelegramClient('session_name', API_ID, API_HASH)

    await client.start()

    print("客户端已启动")

    print(f"开始检查频道 {CHANNEL_USERNAME} 的新图片...")

    existing_files = get_existing_files()

    print(f"已找到 {len(existing_files)} 个现有文件")

    entity = await client.get_entity(CHANNEL_USERNAME)

    new_count = 0

    skipped_count = 0

    async for message in client.iter_messages(entity):

        if message.media and isinstance(message.media, MessageMediaPhoto):

            date_str = message.date.strftime("%Y%m%d_%H%M%S")

            filename = f"{date_str}_{message.id}.jpg"

            if filename in existing_files:

                skipped_count += 1

                if skipped_count % 50 == 0:

                    print(f"已跳过 {skipped_count} 个已存在的文件，正在检查新文件...")

                continue

            filepath = os.path.join(DOWNLOAD_PATH, filename)

            await client.download_media(message.media, file=filepath)

            new_count += 1

            print(f"已下载 {new_count} 张新图片: {filename}")

    print(f"完成! 共下载 {new_count} 张新图片，跳过 {skipped_count} 个已存在的图片")

    print(f"所有图片已保存到 {DOWNLOAD_PATH} 目录")

    await client.disconnect()

if __name__ == '__main__':

    asyncio.run(main())
</code></pre>
<p>这需要一些扩展</p>
<p>你可以使用pip安装它</p>
<pre><code class="language-bash">
pip install telethon
</code></pre>]]></description>
    <pubDate>Thu, 20 Nov 2025 16:49:21 +0800</pubDate>
    <dc:creator>荔枝的君子</dc:creator>
    <guid>https://urlzx.cn/2.html</guid>
</item></channel>
</rss>