这是一个基于Tor的共享托管服务器设置。按原样提供,在生产环境使用前,您应根据自身需求进行修改。此项目仍在开发中,更新前请仔细查看提交历史记录中的变更。 对于生产服务器,建议至少1TB SSD磁盘空间、32GB RAM和8个CPU核心。对于小型测试/个人服务器,4GB RAM和1个CPU核心就足够了。
翻译工作通过 Weblate 进行管理。
如果您更喜欢手动提交翻译,可以使用脚本 update-translations.sh 从源码更新语言模板和翻译文件。
它将生成文件 var/www/locale/hosting.pot,您可将其作为基础,在 var/www/YOUR_LANG_CODE/LC_MESSAGES/hosting.po 中创建新的语言文件,并使用翻译程序(如 Poedit)进行编辑。
完成后,您可以发起拉取请求或发送邮件以纳入翻译。
该配置已在 Debian 13 (Trixie) 和 Ubuntu 24.04 LTS 上测试通过。建议在服务器上安装 Debian 13 或 Ubuntu 24.04,但稍加调整也可在其他发行版/版本上运行。如果您想在树莓派上构建,请不要使用树莓派官方镜像,因为许多组件会出问题。请从 https://raspi.debian.net/daily-images/ 下载适合您树莓派型号的镜像。
最简单的安装方式是使用自动安装程序:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
./install.sh
安装程序处理所有事项:包安装、PHP/ImageMagick 编译、Tor 配置、MySQL 设置和服务部署。它会提示输入密码或自动生成。
选项:
./install.sh --non-interactive # 跳过提示,生成随机密码
./install.sh --vanity <prefix> # 生成个性化 .onion 地址
./install.sh --skip-binaries # 跳过编译(如果已编译则使用)
./install.sh --db-pass <pass> # 设置托管 MySQL 密码
./install.sh --pma-pass <pass> # 设置 phpMyAdmin MySQL 密码
./install.sh --admin-pass <pass> # 设置管理面板密码
个性化 .onion 地址生成使用 mkp224o(自动编译)。仅支持 a-z 和 2-7 字符。4字符前缀需要几分钟,5字符需要10-30分钟,6字符及以上需要数小时。
凭据保存到 /root/hosting-credentials.txt。
cd hosting
./update.sh # 更新代码,保留配置
./update.sh --rebuild # 同时重建 PHP/ImageMagick
./update.sh --code-only # 只更新 PHP 文件
更新脚本会备份配置、拉取最新代码、恢复密码和 .onion 地址,并重启服务。它会检测 install_binaries.sh 是否发生变化,并在需要时提示您重建。
如果您更倾向于手动安装,请按以下步骤操作。
卸载可能干扰此设置的包:
DEBIAN_FRONTEND=noninteractive apt purge -y apache2* dnsmasq* eatmydata exim4* imagemagick-6-common mysql-client* mysql-server* nginx* libnginx-mod* php7* resolvconf && systemctl disable systemd-resolved.service && systemctl stop systemd-resolved.service
如果此步骤后主机名解析出现问题,请临时切换到公共 DNS 服务器,如 1.1.1.1(CloudFlare)或 8.8.8.8(Google):
rm /etc/resolv.conf && echo "nameserver 1.1.1.1" > /etc/resolv.conf
添加额外仓库(仅限 Debian — Ubuntu 自带 nginx 和 brotli):
apt update && apt install git apt-transport-tor curl lsb-release
curl -sSL https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc > /etc/apt/trusted.gpg.d/torproject.asc
curl -sSL https://packages.sury.org/nginx/apt.gpg > /etc/apt/trusted.gpg.d/sury.gpg
echo "deb tor://apow7mjfryruh65chtdydfmqfpj5btws7nbocgtaovhvezgccyjazpqd.onion/torproject.org/ `lsb_release -cs` main" >> /etc/apt/sources.list
echo "deb https://packages.sury.org/nginx/ `lsb_release -cs` main" >> /etc/apt/sources.list
apt update && apt upgrade
安装 git 并克隆此仓库:
apt update && apt install git && git clone https://github.com/DanWin/hosting && cd hosting
安装自定义优化二进制文件:
./install_binaries.sh
请注意,Debian 也有一个洋葱服务包归档,因此您可能希望编辑 /etc/apt/sources.list 从那里加载:
deb tor://2s4yqjx5ul6okpp3f2gaunr2syex5jgbfpfvhxxbbjwnrsvbk5v3qbid.onion/debian `lsb_release -cs` main
安装完成后,将 var/www 中的站点文件复制到 /var/www,并将 etc 中的配置文件复制到 /etc(根据需要进行修改)。然后重启一些服务:
systemctl daemon-reload && systemctl restart bind9.service && systemctl restart [email protected]
将默认的 .onion 域名替换为您的域名:
sed -i "s/dhosting4xxoydyaivckq7tsmtgi4wfs3flpeyitekkmqwu4v4r46syd.onion/`cat /var/lib/tor/hidden_service/hostname`/g" /etc/postfix/sql/alias.cf /etc/postfix/sender_login_maps /etc/postfix/main.cf /var/www/skel/www/index.hosting.html /var/www/common.php /etc/postfix/canonical /etc/postfix-clearnet/canonical /var/www/html/squirrelmail/config/config.php
对于您的 Clearnet 域名,需要将其添加到 /etc/postfix/main.cf 的 relay_domains 中,并编辑以下文件中的默认域名:
/var/www/common.php
/etc/postfix/canonical
/etc/postfix-clearnet/canonical
此设置有两个 Postfix 实例:一个用于接收和发送邮件到其他 .onion 服务,另一个用于重写地址以传递给面向 Clearnet 的邮件中继。您可能希望创建第二个实例,运行以下命令:
postmulti -e init
postmulti -I postfix-clearnet -e create
postmulti -i clearnet -e enable
postmulti -i clearnet -p start
如果创建了实例,请取消 etc/postfix/main.cf 中与 clearnet 中继相关的配置的注释,并确保同时复制和修改 etc/postfix-clearnet 中的配置文件。
如果遇到以下问题:postfix: fatal: chdir(/var/spool/postfix-clearnet): No such file or directory,您可以通过以下方式从默认 postfix 实例复制 chroot:cd /var/spool/ && cp -a postfix/ postfix-clearnet/
复制(并修改) Postfix 配置后,需要从映射文件创建数据库(每次更新这些文件时也要执行):
postalias /etc/aliases
postmap /etc/postfix/canonical /etc/postfix/sender_login_maps /etc/postfix/transport
postmap /etc/postfix-clearnet/canonical /etc/postfix-clearnet/sasl_password /etc/postfix-clearnet/transport # 仅当有第二个实例时
为了将临时文件保存在内存中,请将以下内容添加到 /etc/fstab:
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/log/nginx tmpfs rw,user,noatime 0 0
为了强化系统并对非 root 用户隐藏 PID,请同时添加以下内容:
proc /proc proc defaults,hidepid=2 0 0
并将 noatime,usrjquota=aquota.user,jqfmt=vfsv1 选项添加到 /home 挂载点,然后初始化配额。如果没有单独的分区,请将 /home 替换为 /:
systemctl daemon-reload
mount -o remount $(findmnt -n -o TARGET --target /home)
quotacheck -cMu $(findmnt -n -o TARGET --target /home)
quotaon $(findmnt -n -o TARGET --target /home)
在某些情况下,您可能会收到不支持配额的错误。这通常发生在虚拟环境中。请确保安装了完整内核,而不是带有 -virtual 包的内核。它们通常是 linux-image-amd64、linux-image-arm64 或 linux-image-generic,具体取决于您的发行版。同时确保您运行的是真正的虚拟机(例如 KVM)。某些提供商提供容器化 VPS(例如 OpenVZ),这意味着您无法运行自己的内核……
安装 sodium_compat 以支持 v3 隐藏服务:
cd /var/www && composer install
为 phpmyadmin 创建 MySQL 用户,并在 /var/www/html/phpmyadmin/config.inc.php 中配置,用随机字符填充 $cfg['blowfish_secret']:
mysql
CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'MY_PASSWORD';
CREATE DATABASE phpmyadmin;
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'%';
FLUSH PRIVILEGES;
quit
mysql phpmyadmin < /var/www/html/phpmyadmin/sql/create_tables.sql
为托管管理创建一个具有所有权限的 MySQL 用户:
mysql
CREATE USER 'hosting'@'%' IDENTIFIED BY 'MY_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'hosting'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit
然后编辑 /var/www/common.php 和 /etc/postfix/sql/alias.cf 中的数据库配置。
最后,通过运行以下命令设置数据库:
php /var/www/setup.php
启用 systemd 定时器以定期运行各种管理任务:
systemctl enable hosting-del.timer && systemctl enable hosting.timer && systemctl enable hosting-autoscale.timer
最后一步是重启,等待约5分钟让所有服务启动,然后通过创建测试账户来检查一切是否正常。
用户可以在注册时选择 PHP 8.2、8.3、8.4 和 8.5,并可在仪表盘中更改版本。默认版本为 PHP 8.5。
Tor 实例会根据账户数量自动扩展。hosting-autoscale.timer 每小时运行一次,每增加约250个账户就添加一个新实例。实例 ID 从 a 到 z,然后是 aa、ab,以此类推。您也可以在 /var/www/common.php 的 SERVICE_INSTANCES 中手动设置实例,然后运行 setup.php。
htmlspecialchars() 转义script-src 'none'