本项目已经有些过时,若您有意愿继续维护,欢迎 PR。
通过 Docker-compose 简易部署 Xray-core 和 Web 服务(以 Nginx + PostgreSQL + Typecho 博客程序为例)。
Docker-compose for Xray-core and a web service (Nginx + PostgreSQL + Typecho for example).
本项目参考 小小白白话文 :: Project X (xtls.github.io) ,通过 Docker-compose 在 Xray 安装的同时部署了 Web 服务,方便建立博客 + 搭建梯子。
原理:Nginx 监听宿主机 80 端口,将流量重定向至 443 端口。而 Xray 监听宿主机 443 端口,识别出 Vless 协议的流量后按照 Xray 设置的规则处理,非 Vless 流量全部转发至 Nginx 容器的 8080 端口(即网站)。
回落 (fallbacks) 功能简析 :: Project X (xtls.github.io)
./xray
保存 Xray 的配置文件和日志。./cert
保存 XRay 所需证书;./nginx
保存 Nginx 的配置文件、日志和网页内容;./dbdata
保存pgsql
的数据库配置与文件;(容器初次运行后自动生成)./docker-compose.yml
控制容器挂载卷、环境变量等;
php-fpm-pgsql
: 提供 PHP 支持;nginx
: 作为网页服务器;postgres
: 数据库;xray
: xray-core 程序。
感谢来自 teddysun/xray 的镜像。
- 文档:https://github.com/docker-library/docs/blob/master/php/README.md
- 为了连接 PgSQL 数据库,在官方镜像基础上使用 docker-php-extension-installer 添加了
pgsql
拓展。
直接使用了原版镜像。
-
”Environment Variables“ 一节中详细说明了容器运行所需提供的环境变量。
本项目用到了以下环境变量:
POSTGRES_PASSWORD
数据库superuser
密码; (必需)POSTGRES_USER
指定superuser
用户名;(可选,默认值为postgres
)POSTGRES_DB
指定数据库名称;(可选)
本部分以部署 Typecho 博客程序为例。
-
宿主机必须安装 docker, docker-compose,您必须拥有正确解析的域名和相应的证书;
-
克隆本仓库,并拉取子模块:
git clone --recursive --depth=1 https://github.com/Nativu5/docker-xray-web.git
-
切换到
docker-xray-web
目录下,共有 3 处配置文件需要用户自行修改:./docker-compose.yml
:db
一节中的数据库用户名、数据库用户密码、数据库名都可以由用户自定义;- 每一节都有环境变量
TZ
,可供设置容器时区;
- 每一节都有环境变量
./nginx/conf.d
: 需要将文件中所有yourdomain.com
替换为用户自己的域名;./xray/config/config.json
: 需要自行填写 UUID 和邮箱。
-
将域名对应的证书放入
./cert
,fullchain 文件保存为xray.crt
,key 文件保存为xray.key
; -
在
docker-xray-web
下执行docker-compose up
正常情况下,所有容器都应能正常运行;
-
使用
Ctrl-C
停止所有容器,然后执行:sudo chmod -R 777 ./nginx/www/typecho
更改权限以便稍后
Typecho
存取文件; -
然后执行:
docker-compose start
重启容器,启动成功后打开浏览器访问预先设置的域名,即可安装
Typecho
。 -
选择任意支持 Xray 的客户端,根据
./xray/config/config.json
的内容生成客户端配置文件即可。
-
php-fpm-pgsql
镜像已经上传 Docker Hub,dockerfile
见 docker-typecho/dockerfile, 读者可以此自行构建; -
由于 Xtls 需要证书方可使用,故请先获取证书再部署,推荐使用 acmesh-official/acme.sh 自动维护证书。
-
本项目内置的
default.conf
已经配置为支持 Typecho 伪静态,但您可能需要在 Typecho 安装后,到网站后台中启用相关设置。 -
Typecho 安装后可能需要在程序自动生成的
./nginx/www/typecho/config.inc.php
中加入一行:define('__TYPECHO_SECURE__',true);
以启用全站 HTTPS 加密。
-
Xray 的日志默认是输出在容器内的控制台中的,您可以按照 Xray 的文档要求,将 Xray 配置文件的
log
一节设置为
"log": {
"loglevel": "warning",
"access":"/var/log/xray/access.log",
"error":"/var/log/xray/error.log"
}
-
目前 Xray 不会判断访问的域名,即不能实现用户访问 yourdomain.com 和 sub.yourdomain.com 时进入两个不同的站点。貌似有办法解决 SNI 分流,但有些麻烦:integrated-examples/v2ray -
默认的 Xray 配置不能通过 CDN,但您可以自定义 Xray 配置文件来实现这一功能。
本项目仅用于研究 Docker-compose、Xray、Nginx 等软件的使用。
使用者在使用该项目时应当遵守相关法律法规的约束,本项目作者不因使用者的违法使用承担任何责任。 本项目的其他副本(包括但不仅限于离线储存、fork 项目)在保持代码完全相同情况下,享有和本免责声明相同的免责条款;反之不然。因不当储存、复制和扩散导致的、无限的风险与责任由相关使用者承担,与本项目无关。