Merge branch 'develop' into redis

This commit is contained in:
naskya 2024-04-22 06:42:53 +09:00
commit 07444ae7c1
No known key found for this signature in database
GPG key ID: 712D413B3A9FED5C
4 changed files with 51 additions and 6 deletions

View file

@ -42,6 +42,8 @@ cargo --version
### PostgreSQL and PGroonga
Firefish requires PostgreSQL v12 or later. We recommend that you install v12.x for the same reason as Node.js.
PostgreSQL install instructions can be found at [this page](https://www.postgresql.org/download/).
```sh

View file

@ -1,9 +1,36 @@
# Install Firefish
This document shows an example procedure for installing Firefish on Debian 12. Note that there is much room for customizing the server setup; this document merely demonstrates a simple installation.
Firefish depends on the following software.
## Runtime dependencies
- At least [NodeJS](https://nodejs.org/en/) v18.17.0 (v20/v21 recommended)
- At least [PostgreSQL](https://www.postgresql.org/) v12 (v16 recommended) with [PGroonga](https://pgroonga.github.io/) extension
- At least [Redis](https://redis.io/) v7
- Web Proxy (one of the following)
- Caddy (recommended)
- Nginx (recommended)
- Apache
- [FFmpeg](https://ffmpeg.org/) for video transcoding (**optional**)
- Caching server (**optional**, one of the following)
- [DragonflyDB](https://www.dragonflydb.io/)
- [KeyDB](https://keydb.dev/)
- Another [Redis](https://redis.io/) server
## Build dependencies
- At least [Rust](https://www.rust-lang.org/) v1.74
- C/C++ compiler & build tools
- `build-essential` on Debian/Ubuntu Linux
- `base-devel` on Arch Linux
- [Python 3](https://www.python.org/)
This document shows an example procedure for installing these dependencies and Firefish on Debian 12. Note that there is much room for customizing the server setup; this document merely demonstrates a simple installation.
If you want to use the pre-built container image, please refer to [`install-container.md`](./install-container.md).
If you do not prepare your environment as document, be sure to meet the minimum dependencies given at the bottom of the page.
Make sure that you can use the `sudo` command before proceeding.
## 1. Install dependencies

View file

@ -2,8 +2,8 @@ import * as fs from "node:fs";
import * as stream from "node:stream";
import * as util from "node:util";
import got, * as Got from "got";
import { httpAgent, httpsAgent, StatusError } from "./fetch.js";
import { config } from "@/config.js";
import { getAgentByHostname, StatusError } from "./fetch.js";
import chalk from "chalk";
import Logger from "@/services/logger.js";
import IPCIDR from "ip-cidr";
@ -40,10 +40,7 @@ export async function downloadUrl(url: string, path: string): Promise<void> {
send: timeout,
request: operationTimeout, // whole operation timeout
},
agent: {
http: httpAgent,
https: httpsAgent,
},
agent: getAgentByHostname(new URL(url).hostname),
http2: false, // default
retry: {
limit: 0,

View file

@ -171,6 +171,25 @@ export function getAgentByUrl(url: URL, bypassProxy = false) {
}
}
/**
* Get agent by Hostname
* @param hostname Hostname
* @param bypassProxy Allways bypass proxy
*/
export function getAgentByHostname(hostname: string, bypassProxy = false) {
if (bypassProxy || (config.proxyBypassHosts || []).includes(hostname)) {
return {
http: _http,
https: _https,
};
} else {
return {
http: httpAgent,
https: httpsAgent,
};
}
}
export class StatusError extends Error {
public statusCode: number;
public statusMessage?: string;