2024-12-23
为 Hexo 项目添加 RSS 订阅链接

rss是一种简易的信息发布方式,通过RSS订阅可以及时获取博客的更新信息。本文将介绍如何为 Hexo 项目添加 RSS 订阅链接。

Read More

2024-11-28
Deploy frp on mac and linux

在 Mac 和 Linux 上部署 frp, 来实现内网穿透, 使得外网可以访问内网的服务, 例如家里的 NAS, 服务器等等.

什么是 frp

frp 是一个快速反向代理, 可以帮助您将内部网络服务暴露到公共网络, 例如家庭网络中的 NAS, 服务器等等.

安装 frp

首先从 frp 的 GitHub Releases 页面下载 frp 的客户端和服务端程序.

如下图:

image-20241128162828012

其中frp_0.x.x_darwin_amd64.tar.gz是 Mac 版本的客户端程序, frp_0.x.x_linux_amd64.tar.gz是 Linux 版本的客户端程序.
解压后包含以下文件:

  • frpc 客户端程序
  • frps 服务端程序
  • frps.toml 服务端配置文件
  • frpc.toml 客户端配置文件
  • LICENSE 许可证文件

服务端: 具有公网 IP 的Linux服务器

  1. 下载对应 frp 的服务端程序

  2. 解压缩至任一目录

  3. 修改 frps.toml 配置文件

    1
    2
    # frps.toml
    bindPort = 7000
  4. 运行 ./frps -c frps.toml 启动服务端

客户端: Mac

  1. 下载对应 frp 的客户端程序

  2. 解压缩至任一目录

  3. 修改 frpc.toml 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # frpc.toml
    serverAddr = "x.x.x.x"
    serverPort = 7000

    [[proxies]]
    name = "ssh"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 6000
  4. 运行 ./frpc -c frpc.toml 启动客户端

分别配置守护进程

服务端: Linux

可以完全参考官方文档, 使用systemd方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动

客户端: Mac

MAC上可以使用launchd来配置守护进程, 使得 frpc 客户端程序在后台运行.

  1. 创建一个 plist 文件, 例如 frpc.plist

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
    http://www.apple.com/DTDs/PropertyList-1.0.dtd >
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>frpc</string>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/xxxx/frp/frpc</string>
    <string>-c</string>
    <string>/Users/xxxx/frp/frpc.toml</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>

    其中/Users/xxxx/frp/为 frp 的安装目录, frpc.toml为 frpc 的配置文件

  2. 根据需求该文件存到对应目录

  • ~/Library/LaunchAgents/ 仅当前用户
  • /Library/LaunchAgents/ 所有用户
  • /Library/LaunchDaemons/ 系统级别
  1. 加载配置文件
1
2
sudo chown root ~/Library/LaunchAgents/frpc.plist
launchctl load -w ~/Library/LaunchAgents/frpc.plist
  1. 启动服务
1
launchctl start frpc
  1. 查看服务状态
1
launchctl list | grep frpc

或者打开mac monitor查看是否有frpc进程

image-20241128164327407
  1. 其他命令
1
2
launchctl stop frpc # 停止服务
launchctl unload ~/Library/LaunchAgents/frpc.plist # 卸载服务
Read More

2024-11-20
Use ssh to connect to Google Virtual Machine

谷歌云服务器默认登录方式是browser ssh,但是有时候我们需要第三方客户端使用ssh连接服务器。
本文介绍如何使用ssh连接Google Cloud平台的虚拟机(云服务器)

Read More

2024-10-13
如何将 Font Awesome 从 v4 迁移到 v5 并优化图标加载

在这篇博客中, 我将讨论如何将Font Awesome从v4迁移到v5, 并选择合适的方式加载图标库, 帮助你优化图标加载性

Read More

2024-10-06
Style your Terminal & IDEs

Read More

2024-09-25
FAQ

1. VSCode User Settings vs Workspace Settings

See the difference between User Settings and Workspace Settings in:https://code.visualstudio.com/docs/getstarted/settings

Read More

2024-09-17
Deploy RssHub on Vercel(部署 RssHub 在 Vercel 上)

Deploy RssHub on Vercel(部署 RssHub 在 Vercel 上)

背景

官方推荐使用docker-compose部署RssHub,但是需要个人服务器,而且需要一定的技术水平,而在Vercel上部署RssHub更加简单.

Vercel 介绍

Vercel 是一个现代化的部署应用程序平台, 有以下优点:

  • 部署速度快
  • 部署简单
  • 支持多种语言

问题

安装RssHub官方文档进行部署:https://docs.rsshub.app/deploy/#deploy-to-vercel


部署步骤

1. fork原仓库

https://github.com/DIYgod/RSSHub/fork

注意: 在此处取消勾选: Copy the master branch only

image-20240917165721730

2. 部署到vercel

  • 访问https://vercel.com/, 注册账号, 选择Hobby plan

  • 进入主页, 点击Add New...

    image-20240917170024094
  • 选择Project

    image-20240917170315369
  • Import 我们刚刚fork的仓库

    image-20240917170457356
  • 系统会默认生成一个项目名称,也可以自定义修改

  • 其他配置不动,点击Deploy

  • 这里就会遇到开头提到的Error: 当前的环境版本是 node.js 20,而package.json的要求的 node.js版本要≥22

  • 这里我们的解决方案是使用仓库的legacy分支, 该分支设定的node.js版本为≥16, 满足我们的需求

  • 如下图, 进入项目设置, 选择Git, 修改Production Branch中的Branch namelegacy, 然后点击save保存

    image-20240917171024074
  • 接下来, 在下面的Deploy Hooks中创建legacy on legacy, 如下图:

    image-20240917171239697

  • 访问生成的url, 创建新的deployment, 等待一段时间之后, 就已经部署好了

3. 配置域名

  • 进入项目设置, 点击Domains, 添加域名, 配置DNS解析

    image-20240917171630093
  • 访问配置好的域名, 出现下图, 说明部署完成!

    image-20240917171718131

总结

  • 通过Vercel部署RssHub, 可以省去自己搭建服务器的麻烦, 也不用担心服务器的维护问题
  • 部署过程中遇到的问题, 通过修改仓库的legacy分支, 解决了node.js版本不匹配的问题
  • 部署完成后, 可以配置域名, 使得访问更加方便
  • 通过这次部署, 也学到了如何在Vercel上部署项目, 以及如何配置域名


reference: https://cloud.tencent.com/developer/article/2432561

Read More

2024-09-16
NVM 使用指南

NVM(Node Version Manager)是一个 Node.js 版本管理工具,可以让你在同一台服务器上安装和切换不同版本的 Node.js。本文将介绍如何安装和使用 NVM。

1. 安装 NVM

1.1 使用 cURL 安装 NVM

首先,你需要使用 cURL 下载 NVM 安装脚本。在终端中执行以下命令:

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

1.2 使用 Wget 安装 NVM

如果你没有安装 cURL,也可以使用 Wget 下载 NVM 安装脚本:

1
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

1.3 使用 homebrew 安装 NVM

如果你使用 macOS,并且安装了 homebrew,你可以使用以下命令安装 NVM:

1
brew install nvm

1.4 验证安装

安装完成后,你需要重新加载终端配置文件(如 .bashrc.bash_profile.zshrc 等)或重启终端。然后执行以下命令验证 NVM 是否安装成功:

1
command -v nvm

如果输出 nvm,则表示 NVM 安装成功。

2. 使用 NVM 安装 Node.js

2.1 查看可用 Node.js 版本

你可以使用以下命令查看 NVM 支持的所有 Node.js 版本:

1
nvm ls-remote

2.2 安装 Node.js

安装 Node.js 的命令格式为:

1
nvm install <version>

例如,安装 Node.js 14.17.0:

1
nvm install 14.17.0

2.3 切换 Node.js 版本

安装多个 Node.js 版本后,你可以使用以下命令切换版本:

1
nvm use <version>

例如,切换到 Node.js 14.17.0:

1
nvm use 14.17.0

2.4 设置默认 Node.js 版本

你可以使用以下命令设置默认 Node.js 版本:

1
nvm alias default <version>

例如,设置默认 Node.js 版本为 14.17.0:

1
nvm alias default 14.17.0

3. 卸载 NVM

如果你想卸载 NVM,可以执行以下命令:

1
rm -rf ~/.nvm

4. 安装pnpm

1
npm install -g pnpm
Read More

2024-09-10
使用 Nginx 和 Apache2 配置反向代理

反向代理是一种服务器配置方式,用来代理和转发客户端的请求到后端服务器上。它可以在负载均衡、缓存、加速、安全性等方面提供帮助。常见的反向代理服务器有 Nginx 和 Apache2。本文将详细讲解如何使用 Nginx 和 Apache2 来配置反向代理,将请求代理到不同的端口或服务器上。


1. 什么是反向代理

反向代理(Reverse Proxy)是代理服务器的一种形式,客户端并不知道其实际请求的是哪一台服务器,而是通过代理服务器将请求转发到后端的不同服务器或服务上。反向代理的主要用途包括:

  • 隐藏后端服务器的 IP 和端口,增强安全性。
  • 负载均衡,分发请求到多台后端服务器。
  • SSL/TLS 卸载,在代理服务器处理 SSL 连接,减少后端服务器的计算负担。
  • 缓存,提升性能,减少后端服务器压力。

例如,假设你有一个后端应用运行在 http://MY_IP_ADDRESS:1200,你希望通过你的域名 example.com 访问该服务,而无需用户输入端口号 1200。这时就可以使用反向代理。


2. 使用 Nginx 配置反向代理

2.1 安装 Nginx

首先,你需要在服务器上安装 Nginx。如果还未安装,可以通过以下命令进行安装:

Debian/Ubuntu:

1
2
sudo apt update
sudo apt install nginx

CentOS:

1
2
sudo yum install epel-release
sudo yum install nginx

2.2 配置 Nginx 反向代理

安装完成后,你需要编辑 Nginx 的配置文件,通常位于 /etc/nginx/sites-available//etc/nginx/conf.d/

  1. 创建或编辑配置文件(例如 /etc/nginx/sites-available/example.com):
1
sudo nano /etc/nginx/sites-available/example.com
  1. 添加如下配置,将流量从域名 example.com 代理到 http://MY_IP_ADDRESS:1200
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name example.com;

location / {
proxy_pass http://MY_IP_ADDRESS:1200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
  1. 启用站点配置(适用于 Debian/Ubuntu):
1
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  1. 检查 Nginx 配置语法是否正确:
1
sudo nginx -t
  1. 重启 Nginx 使配置生效:
1
sudo systemctl restart nginx

2.3 配置 HTTPS (可选)

如果你希望通过 HTTPS 访问,可以使用 Let’s Encrypt 免费获取 SSL 证书。

  1. 安装 certbot
1
sudo apt install certbot python3-certbot-nginx
  1. 获取并配置 SSL 证书:
1
sudo certbot --nginx -d example.com
  1. 按照提示操作完成 HTTPS 配置。

3. 使用 Apache2 配置反向代理

3.1 安装 Apache2

如果你的服务器上还没有安装 Apache2,首先需要安装:

Debian/Ubuntu:

1
2
sudo apt update
sudo apt install apache2

CentOS:

1
sudo yum install httpd

3.2 启用必要的 Apache 模块

在 Apache 中,反向代理功能通过模块来实现。你需要启用以下模块:

1
2
3
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers

3.3 配置 Apache2 反向代理

  1. 编辑 Apache2 配置文件(例如 /etc/apache2/sites-available/example.com.conf):
1
sudo nano /etc/apache2/sites-available/example.com.conf
  1. 添加如下配置:
1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>
ServerName example.com

ProxyPreserveHost On
ProxyPass / http://MY_IP_ADDRESS:1200/
ProxyPassReverse / http://MY_IP_ADDRESS:1200/

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. 启用站点配置:
1
sudo a2ensite example.com.conf
  1. 检查配置是否正确:
1
sudo apachectl configtest
  1. 重启 Apache 使配置生效:
1
sudo systemctl restart apache2

3.4 配置 HTTPS (可选)

与 Nginx 类似,你也可以通过 certbot 获取 SSL 证书。

  1. 安装 certbot
1
sudo apt install certbot python3-certbot-apache
  1. 获取并配置 SSL 证书:
1
sudo certbot --apache -d example.com
  1. 按照提示操作完成 HTTPS 配置。

4. 常见问题排查

4.1 检查代理设置是否生效

通过浏览器访问你的域名(http://example.com),如果显示正确的后端内容,说明反向代理配置成功。如果出现问题,检查以下内容:

  • 端口问题:确保后端服务器监听的端口是正确的。
  • 防火墙设置:确认服务器的防火墙允许访问相关端口(80、443 和 1200)。
  • Nginx/Apache 配置错误:使用 nginx -tapachectl configtest 检查配置文件是否正确。

4.2 日志排查

如果代理未生效,可以查看 Nginx 或 Apache 的日志,通常位于:

  • Nginx/var/log/nginx/error.log
  • Apache/var/log/apache2/error.log

5. 总结

配置反向代理能够极大提升你服务器的灵活性与安全性。Nginx 和 Apache2 都提供了强大的反向代理功能,适合在各种场景下使用。Nginx 通常适用于高性能、低资源的环境,而 Apache 则提供了丰富的模块和配置选项。

通过本文的详细步骤,你应该能够成功配置反向代理,让你的域名能够代理和转发流量到不同的服务器和端口上。如果你希望进一步提升安全性,还可以添加 HTTPS 支持并启用缓存和负载均衡功能。

Read More

2024-09-10
Apache配置指南及常见问题排查

Apache 是最流行的 Web 服务器之一,广泛用于托管各种网站和应用。它支持虚拟主机(VirtualHost)功能,可以让你在一台服务器上托管多个域名或站点。本文将分为两部分:

  1. 如何配置 Apache 虚拟主机。
  2. 如何排查和修复常见的配置错误。

1. Apache 基础配置概述

Apache 的配置文件通常位于 /etc/apache2/ 目录下。核心配置文件是 apache2.conf,但我们主要操作的是位于 /etc/apache2/sites-available//etc/apache2/sites-enabled/ 中的虚拟主机配置文件。

1.1 Apache 虚拟主机配置

虚拟主机(VirtualHost)允许你使用一台服务器来托管多个网站。这通过配置不同的域名来将用户请求指向不同的网站目录。

基本的虚拟主机配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost *:80>
ServerAdmin webmaster@yourdomain.com
ServerName yourdomain.com
ServerAlias www.yourdomain.com

DocumentRoot /var/www/html/yourdomain
<Directory /var/www/html/yourdomain/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

1.2 配置项解释

  • **<VirtualHost *:80>**:定义虚拟主机,监听所有 IP 地址的 80 端口(HTTP)。如果需要 HTTPS,使用 *:443

  • **ServerAdmin webmaster@yourdomain.com**:管理员邮箱,用于在出现服务器错误时显示联系信息。

  • **ServerName yourdomain.com**:定义主机名,即用户访问的网站的域名。

  • **ServerAlias www.yourdomain.com**:为当前虚拟主机配置别名,比如 www 开头的域名。

  • **DocumentRoot /var/www/html/yourdomain**:定义网站的根目录,所有用户请求会从这个目录中查找文件并返回响应。

  • **<Directory /var/www/html/yourdomain/>**:指定网站根目录的访问权限配置。

    • Options Indexes FollowSymLinks:允许目录列出文件(Indexes)和符号链接(FollowSymLinks)。
    • AllowOverride All:允许使用 .htaccess 文件来覆盖目录级别的配置。
    • Require all granted:允许所有用户访问该目录。
  • **ErrorLog ${APACHE_LOG_DIR}/error.log**:定义错误日志的位置,存储 Apache 在运行时发生的错误。

  • **CustomLog ${APACHE_LOG_DIR}/access.log combined**:定义访问日志的位置,用于记录每次用户请求的信息。

1.3 启用虚拟主机配置

配置完虚拟主机文件后,执行以下命令启用虚拟主机:

1
sudo a2ensite yourdomain.com.conf

然后重新加载 Apache 服务:

1
sudo systemctl reload apache2

1.4 配置 HTTPS(可选)

要启用 HTTPS,你需要一个 SSL 证书。可以使用 Let’s Encrypt 提供免费的证书。假设已经安装了 certbot,你可以使用以下命令来获取证书并自动配置 Apache:

1
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

这会自动生成 SSL 证书,并配置 *:443 的虚拟主机,使得网站可以通过 HTTPS 访问。

2. 如何排查和修复 Apache 配置错误

在配置 Apache 时,我们可能会遇到一些常见的错误,比如语法错误、权限设置不正确或文件路径错误。接下来,我们将基于以下步骤详细讲解如何排查并修复这些问题。

2.1 检查 Apache 配置语法

Apache 提供了一个内置命令来检查配置文件的语法。在应用新的配置之前,建议先使用以下命令检查语法是否正确:

1
sudo apache2ctl configtest

如果输出 Syntax OK,表示配置文件没有语法错误。如果出现错误,Apache 会给出提示,帮助你找到并修复问题。

2.2 解决常见配置问题

问题 1:配置文件中的注释符号问题

Apache 配置文件中,# 是注释符号。如果注释符号放置不当,Apache 可能会无法正确解析指令。例如:

1
DocumentRoot /var/www/html/yourdomain  # 这是根目录

上述配置会引发语法错误,因为 Apache 会错误地将注释视为配置的一部分。修复方法是将注释放在独立的一行:

1
2
DocumentRoot /var/www/html/yourdomain
# 这是根目录

问题 2:目录权限设置不正确

如果 Apache 没有权限访问 DocumentRoot 指定的目录,网站将无法加载。通过以下命令,可以确保 Apache 有足够的权限访问相关目录:

1
2
sudo chown -R www-data:www-data /var/www/html/yourdomain
sudo chmod -R 755 /var/www/html/yourdomain
  • chown:更改文件的所有者为 www-data(Apache 默认用户)。
  • chmod 755:确保目录具有可读写权限,其他用户可以执行。

问题 3:检查 Apache 错误日志

如果 Apache 服务启动失败或虚拟主机无法工作,最好的方法是检查 Apache 的错误日志:

1
sudo tail -f /var/log/apache2/error.log

日志中会显示具体的错误原因,例如文件路径错误、权限问题等。根据错误提示可以快速定位问题。

问题 4:Apache 服务无法启动或重新加载失败

如果修改了配置文件后,Apache 无法重新加载或启动,可能是配置文件的语法问题或端口冲突。可以通过以下命令检查服务状态:

1
sudo systemctl status apache2

根据输出信息,查找具体的错误提示。

2.3 常见的虚拟主机问题及解决方案

错误:DocumentRoot takes one argument

此错误通常表示在 DocumentRoot 指令中使用了不必要的参数或注释符号不正确。确保 DocumentRoot 指令后只跟一个参数,即网站的根目录路径。例如:

1
DocumentRoot /var/www/html/yourdomain

错误:Permission denied403 Forbidden

当你在浏览器中访问网站时,如果看到 403 Forbidden 错误,通常是由于权限设置问题。请检查目录的权限,确保 Apache 能够读取文件:

1
sudo chmod -R 755 /var/www/html/yourdomain

错误:端口冲突

如果你配置了多个虚拟主机,确保每个虚拟主机监听的端口不冲突。通常,HTTP 使用端口 80,HTTPS 使用端口 443。如果两个虚拟主机使用了相同的端口,Apache 会报错。

3. 总结

通过本文的介绍,你应该能够成功配置 Apache 虚拟主机,并了解每个配置项的作用。我们还讲解了如何排查和修复常见的配置错误,帮助你快速解决 Apache 服务无法启动或虚拟主机配置问题。

关键步骤总结:

  1. 正确配置虚拟主机:包括 ServerNameDocumentRootDirectory 等指令。
  2. 检查配置文件语法:使用 apache2ctl configtest 来验证配置文件的正确性。
  3. 调整文件权限:确保 Apache 有足够的权限访问网站的根目录。
  4. 查看 Apache 日志文件:通过日志文件找到具体错误的提示,并进行修复。
  5. 启用 HTTPS:使用 Let’s Encrypt 轻松配置免费的 SSL 证书。

通过这些步骤,你将能够更好地管理和配置 Apache,并在遇到问题时快速解决它们。


希望这篇博客能帮助你更好地理解 Apache 虚拟主机的配置,并有效解决你在配置过程中遇到的问题。如果你有任何疑问或遇到特殊问题,欢迎在评论区交流。

Read More