以下内容基于:
- V2board:多用户管理,aaPanel + LNMP + Laravel + React
- Poseidon :V2Ray 服务端,基于 docker 运行
- CloudFlare:实现 WebSocket-TLS 模式
# 服务器准备
SSH 连接 Linux 服务器,操作系统 CentOS 7
最低配置要求为 1Core/512M RAM
# 安装内核加速
推荐使用 bbr plus
。
先安装内核,选择 2,重启后,开启加速,选择 7。
wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" | |
chmod +x tcp.sh | |
./tcp.sh |
# 同步服务器时间
yum -y install ntpdate | |
timedatectl set-timezone Asia/Shanghai #设置为北京时间 | |
ntpdate time.nist.gov |
ntp 常用服务器
Name | IP | Location |
---|---|---|
210.72.145.44 | 210.72.145.44 | 中国(国家授时中心) |
ntp.fudan.edu.cn | 中国(复旦大学) | |
ntp.api.bz | 中国(上海 NTP 服务器) | |
133.100.11.8 | 133.100.11.8 | 日本(福冈大学) |
asia.pool.ntp.org | 台湾(台警大授时中心) | |
time.windows.com | 美国(微软公司授时主机) | |
time-a.nist.gov | 129.6.15.28 | NIST,Gaithersburg,Maryland |
time-b.nist.gov | 129.6.15.29 | NIST,Gaithersburg,Maryland |
time-a.timefreq.bldrdoc.gov | 132.163.4.101 | NIST,Boulder,Colorado |
time-b.timefreq.bldrdoc.gov | 132.163.4.102 | NIST,Boulder,Colorado |
time-c.timefreq.bldrdoc.gov | 132.163.4.103 | NIST,Boulder,Colorado |
utcnist.colorado.edu | 128.138.140.44 | UniversityofColorado,Boulder |
time.nist.gov | 192.43.244.18 | NCAR,Boulder,Colorado |
time-nw.nist.gov | 131.107.1.10 | Microsoft,Redmond,Washington |
nist1.symmetricom.com | 69.25.96.13 | Symmetricom,SanJose,California |
nist1-dc.glassey.com | 216.200.93.8 | Abovenet,Virginia |
nist1-ny.glassey.com | 208.184.49.9 | Abovenet,NewYorkCity |
nist1-sj.glassey.com | 207.126.98.204 | Abovenet,SanJose,California |
nist1.aol-ca.truetime.com | 207.200.81.113 | TrueTime,AOLfacility,Sunnyvale,California |
nist1.aol-va.truetime.com | 64.236.96.53 | TrueTime,AOLfacility,Virginia |
# 关闭防火墙
systemctl start supervisord | |
systemctl disable firewalld | |
systemctl stop firewalld |
# 域名准备
借助 CloudFlare 实现强制 SSL、CDN 加速、隐藏 IP 地址 blabla
需要注意的配置:
- DNS 解析,代理状态为 已代理。
- 您的 SSL/TLS 加密模式为 完全 FULL!
# V2Board 安装
# 基于 aaPanel 部署
安装 aaPanel
yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh
安装完成后登陆,进行环境的安装。
选择使用 LNMP 的环境安装方式勾选如下信息:
☑️ Nginx 1.17
☑️ MySQL 5.6
☑️ PHP 7.3选择 Fast 快速编译后进行安装。
安装 Redis
aaPanel 面板 > App Store > 找到 PHP 7.3 点击 Setting > Install extentions > redis 进行安装。解除被禁止的函数
aaPanel 面板 > App Store > 找到 PHP 7.3 点击 Setting > Disabled functions 将putenv
proc_open
pcntl_alarm
pcntl_signal
从列表中删除。添加站点
aaPanel 面板 > Website > Add site。在 Domain 填入你指向服务器的域名
在 Database 选择 MySQL
在 PHP Verison 选择 PHP-73安装 V2Board
通过 SSH 登录到服务器后访问站点路径如:/www/wwwroot/domain.com
。以下命令都需要在站点目录进行执行。
# 删除目录下文件
chattr -i .user.ini
rm -rf .htaccess 404.html index.html .user.ini
执行命令从 Github 克隆到当前目录。
git clone https://github.com/v2board/v2board.git ./
执行命令下载 composer.phar 到当前目录。
wget https://getcomposer.org/download/1.9.0/composer.phar
执行命令进行包安装。
php composer.phar install
安装过程中报错或者无法继续安装的请分配 swap,如何分配 swap 请查阅 google。
执行命令安装 V2board
php artisan v2board:install
根据提示完成安装。
配置站点目录及伪静态
添加完成后编辑添加的站点 > Site directory > Running directory 选择 /public 保存。添加完成后编辑添加的站点 > URL rewrite 填入伪静态信息。
location /downloads {
}
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
location ~ .*\.(js|css)?$
{
expires 1h;
error_log off;
access_log /dev/null;
}
配置定时任务
aaPanel 面板 > Cron。在 Type of Task 选择 Shell Script
在 Name of Task 填写 v2board
在 Period 选择 N Minutes 1 Minute
在 Script content 填写 php /www/wwwroot/domain.com/artisan schedule:run根据上述信息添加每 1 分钟执行一次的定时任务。
记得将路径修改成自己的。启动队列服务
V2board 的邮件系统强依赖队列服务,你想要使用邮件验证及群发邮件必须启动队列服务。
下面以 aaPanel 中 nodejs 的 PM2 服务来守护队列服务作为演示。aaPanel 面板 > App Store > Deployment
找到 PM2 Manager 4.2.2 进行安装,安装完成后按照如下填写
在 Project root directory 选择站点目录
在 Startup file name 填写 pm2.yaml
在 project name 填写 v2board填写后点击 Add 添加即可运行。当然你也可以使用 supervisor 进行守护。
# 告别 500 错误
目录权限问题,检查站点根目录权限,递归 755,保证目录有可写文件的权限
chown -R www:www *
修改
.env
文件,APP_DEBUG=true
,开启 debug 模式,查看具体报错内容
每次修改 .env 文件后需要执行以下命令清空缓存php artisan config:clear
aaPanel 安装 Redis 扩展失败
如报错configure: error: C preprocessor “/lib/cpp” fails sanity check
缺少必要的 C++ 库,如下命令重装解决。
yum reinstall glibc-headers gcc-c++ -y
# 节点配置
在 系统配置 > 服务端 界面,设置一个
通讯密钥
先添加权限组,再添加节点,记录
节点ID
,协议配置中的路径
节点地址: 你的代理服务器绑定的域名
TLS: 支持
连接端口: 443
服务端口: 443
传输协议: WebSocket
点击编辑传输协议配置{
"path": "/路径"
}
# Poseidon 对接
# 安装并启动 Docker/docker-compose
curl -fsSL https://get.docker.com | bash | |
curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
chmod a+x /usr/local/bin/docker-compose | |
rm -f `which dc` | |
ln -s /usr/local/bin/docker-compose /usr/bin/dc | |
systemctl start docker | |
service docker start | |
systemctl enable docker.service | |
systemctl status docker.service |
# 安装 v2ray-poseidon
curl -o go.sh -L -s https://raw.githubusercontent.com/ColetteContreras/v2ray-poseidon/master/install-release.sh | |
sudo bash go.sh # Install latest version of v2ray-poseidon |
# 修改配置文件
cd /root/v2ray-poseidon/docker/v2board/ws |
修改 config.json
"nodeId": // 面板里添加完节点后生成的自增 ID | |
"webapi": "",//v2board 的域名信息 | |
"token": "", //v2board 和 v2ray-poseidon 的通信密钥 |
修改 docker-compose.yml
ports: | |
- "80:10086" # 把 80 端口 修改掉,避免端口占用报错 |
# 添加站点
aaPanel 添加一个站点,域名就是代理服务器想绑定的域名。
站点配置 Configuration > SSL > Let's Encrypt > 选择 Cloudflare > 配置一下邮箱和 API
站点配置 Configuration > Config
location /路径 # 节点 websocket 配置中的路径 | |
{ | |
proxy_pass http://127.0.0.1:端口号; # docker-compose.yml 里改掉的 端口号 | |
proxy_redirect off; | |
proxy_http_version 1.1; | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection "upgrade"; | |
proxy_set_header Host $http_host; | |
proxy_read_timeout 300s; | |
} |
Security > Firewall > 放行上述端口号
# 启动 Docker
保持后台运行。
dc up -d |
查看一下日志,看看有没有报错。
dc logs |
# 配置相关
# 支付配置
目前支持四种方式,但是都不太理想
- 支付宝,容易被请喝茶
- Stripe,很难申请
- BitpayX,对用户不友好
- PayTaro,好不容易才找到了注册接口,收费 50 软妹币,暂时选用这个
事实上,只是打算自用,并不打算卖钱,毕竟只有一个节点,呵呵_(:зゝ∠)_