diff --git a/dev/docs/local-installation.md b/dev/docs/local-installation.md
index 154f768037..15c7dad7d4 100644
--- a/dev/docs/local-installation.md
+++ b/dev/docs/local-installation.md
@@ -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
diff --git a/docs/install.md b/docs/install.md
index 324923c6a7..0e850e2545 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -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
diff --git a/packages/backend/src/misc/download-url.ts b/packages/backend/src/misc/download-url.ts
index 1bfd0a9f80..f516265106 100644
--- a/packages/backend/src/misc/download-url.ts
+++ b/packages/backend/src/misc/download-url.ts
@@ -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,
diff --git a/packages/backend/src/misc/fetch.ts b/packages/backend/src/misc/fetch.ts
index b26fa83052..1f8c70a196 100644
--- a/packages/backend/src/misc/fetch.ts
+++ b/packages/backend/src/misc/fetch.ts
@@ -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;