This commit is contained in:
vincent 2024-02-11 15:52:13 +08:00
parent baa66b8c2b
commit b737fead0c
11 changed files with 75 additions and 201 deletions

View File

@ -1,49 +0,0 @@
name: xray_docker_reality_docker_image_build
on:
workflow_dispatch:
push:
paths:
- 'reality/Dockerfile'
- '.github/workflows/xray_docker_reality.yml'
- 'reality/entrypoint.sh'
pull_request:
paths:
- 'reality/Dockerfile'
- '.github/workflows/xray_docker_reality.yml'
- 'reality/entrypoint.sh'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3.4.0
- name: Docker Setup Buildx
uses: docker/setup-buildx-action@v2.5.0
- name: Docker Login
uses: docker/login-action@v2.1.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract first line of commit message
shell: bash
run: |
COMMIT_MESSAGE=$(git log --format=%B -n 1 ${{ github.sha }})
FIRST_LINE=$(echo "$COMMIT_MESSAGE" | head -n1)
TAG_NAME=$(echo "$FIRST_LINE" | tr -d '[:space:]') # Remove spaces if needed
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV
- name: Build and push Docker image
uses: docker/build-push-action@v4.0.0
with:
context: ./reality
file: ./reality/Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
tags: |
wulabing/xray_docker_reality:${{env.TAG_NAME}}
wulabing/xray_docker_reality:latest
push: true

27
README.md Normal file
View File

@ -0,0 +1,27 @@
# 说明
## 前提
提前安装好以下软件
- docker
- docker-compose
- jq - 用于查看json文件
- qrencode - 用于生成二维码
## 启动和关闭
启动
```
docker-compose up -d
```
关闭
```
docker-compose down
```
## 查看分享链接
````
bash get_share_link.sh
````

View File

@ -40,30 +40,30 @@
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"port": 8003,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "xx",
"id": "d1872fe4-9a9e-442b-87c9-74c779c56476",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "xx",
"network": "tcp",
"security": "reality",
"realitySettings": {
"show": true,
"dest": "xx",
"dest": "www.expedia.com:443",
"xver": 0,
"maxTimeDiff": 0,
"minClientVer": "",
"serverNames": [
"xx"
"www.expedia.com"
],
"privateKey": "xx",
"privateKey": "UArrjC-9qLXdvIHFz0SH1jSZ1CGctYxHYKrHZEH5E3A",
"shortIds": [
""
]
@ -125,4 +125,3 @@
]
}
}

2
conf/key.txt Normal file
View File

@ -0,0 +1,2 @@
Private key: UArrjC-9qLXdvIHFz0SH1jSZ1CGctYxHYKrHZEH5E3A
Public key: Z-HcL71ZNbPshcMUdNK4pC0XkbS6vjRB8fTQQUsIEV4

10
docker-compose.yml Normal file
View File

@ -0,0 +1,10 @@
version: '3.9'
services:
xray:
image: teddysun/xray
restart: always
container_name: xray
network_mode: "host"
volumes:
- './conf:/etc/xray'

30
get_share_link.sh Normal file
View File

@ -0,0 +1,30 @@
#!/bin/sh
IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
UUID=$(jq -r '.inbounds[0].settings.clients[0].id' ./conf/config.json)
PORT=$(jq -r '.inbounds[0].port' ./conf/config.json)
DEST=$(jq -r '.inbounds[0].streamSettings.realitySettings.dest' ./conf/config.json)
NETWORK="tcp"
PRIVATE_KEY=$(cat ./confkey.txt | grep "Private " | awk -F ': ' '{print $2}')
PUBLIC_KEY=$(cat ./conf/key.txt | grep "Public" | awk -F ': ' '{print $2}')
FIRST_SERVERNAME=$(echo $SERVERNAMES | awk '{print $1}')
# config info with green color
echo -e "\033[32m"
echo "IPV4: $IPV4"
echo "UUID: $UUID"
echo "DEST: $DEST"
echo "PORT: $PORT"
echo "PUBLIC_KEY: $PUBLIC_KEY"
echo "NETWORK: $NETWORK"
if [ "$IPV4" != "null" ]; then
SUB_IPV4="vless://$UUID@$IPV4:$PORT?encryption=none&security=reality&type=$NETWORK&sni=$FIRST_SERVERNAME&fp=chrome&pbk=$PUBLIC_KEY&flow=xtls-rprx-vision#wulabing_docker_vless_reality_vision"
echo "IPV4 订阅连接: $SUB_IPV4"
echo -e "IPV4 订阅二维码:\n$(echo "$SUB_IPV4" | qrencode -o - -t UTF8)"
fi
echo -e "\033[0m"

View File

@ -1,42 +0,0 @@
# builder
FROM golang:alpine as builder
LABEL maintainer="wulabing <wulabing@gmail.com>"
#ENV GOPROXY=https://goproxy.cn,direct
WORKDIR /app
RUN apk add --no-cache git && git clone https://github.com/XTLS/Xray-core.git . && \
go mod download && \
go build -o xray /app/main/
# runner
FROM alpine:latest as runner
ENV UUID=""
ENV DEST=""
ENV SERVERNAMES=""
ENV PRIVATEKEY=""
ENV SHORTIDS=""
ENV NETWORK=""
ENV INTERNAL_PORT=""
ENV HOSTMODE_PORT=""
ENV TZ=Asia/Shanghai
WORKDIR /
COPY ./entrypoint.sh /
COPY ./config.json /
COPY --from=builder /app/xray /
RUN apk add --no-cache tzdata ca-certificates jq curl libqrencode && \
mkdir -p /var/log/xray &&\
wget -O /geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat && \
wget -O /geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat && \
chmod +x /entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
EXPOSE 443

View File

@ -1,2 +0,0 @@
打包镜像执行build.sh
bash build.sh

View File

@ -1,6 +0,0 @@
## 已知可用的 SERVERNAMES 及 DEST 列表
| DEST | SERVERMANES | 说明 |
|-------------------|--------------------------------|------------------------------------|
| www.apple.com:443 | images.apple.com www.apple.com | Apple 使用了 akamai CDN全球各地存在节点并且知名 |

View File

@ -1,3 +0,0 @@
docker pull golang:alpine
docker build -t vincent/xray_docker_reality:0.0.1 .

View File

@ -1,92 +0,0 @@
#!/bin/sh
if [ -f /config_info.txt ]; then
echo "config.json exist"
else
IPV6=$(curl -6 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
if [ -z "$UUID" ]; then
echo "UUID is not set, generate random UUID "
UUID="$(/xray uuid)"
echo "UUID: $UUID"
fi
if [ -z "$EXTERNAL_PORT" ]; then
echo "EXTERNAL_PORT is not set, use default value 443"
EXTERNAL_PORT=443
fi
if [ -n "$HOSTMODE_PORT" ];then
EXTERNAL_PORT=$HOSTMODE_PORT
jq ".inbounds[0].port=$HOSTMODE_PORT" /config.json >/config.json_tmp && mv /config.json_tmp /config.json
fi
if [ -z "$DEST" ]; then
echo "DEST is not set. default value www.apple.com:443"
DEST="www.apple.com:443"
fi
if [ -z "$SERVERNAMES" ]; then
echo "SERVERNAMES is not set. use default value [\"www.apple.com\",\"images.apple.com\"]"
SERVERNAMES="www.apple.com images.apple.com"
fi
if [ -z "$PRIVATEKEY" ]; then
echo "PRIVATEKEY is not set. generate new key"
/xray x25519 >/key
PRIVATEKEY=$(cat /key | grep "Private" | awk -F ': ' '{print $2}')
PUBLICKEY=$(cat /key | grep "Public" | awk -F ': ' '{print $2}')
echo "Private key: $PRIVATEKEY"
echo "Public key: $PUBLICKEY"
fi
if [ -z "$NETWORK" ]; then
echo "NETWORK is not set,set default value tcp"
NETWORK="tcp"
fi
# change config
jq ".inbounds[0].settings.clients[0].id=\"$UUID\"" /config.json >/config.json_tmp && mv /config.json_tmp /config.json
jq ".inbounds[0].streamSettings.realitySettings.dest=\"$DEST\"" /config.json >/config.json_tmp && mv /config.json_tmp /config.json
SERVERNAMES_JSON_ARRAY="$(echo "[$(echo $SERVERNAMES | awk '{for(i=1;i<=NF;i++) printf "\"%s\",", $i}' | sed 's/,$//')]")"
jq --argjson serverNames "$SERVERNAMES_JSON_ARRAY" '.inbounds[0].streamSettings.realitySettings.serverNames = $serverNames' /config.json >/config.json_tmp && mv /config.json_tmp /config.json
jq ".inbounds[0].streamSettings.realitySettings.privateKey=\"$PRIVATEKEY\"" /config.json >/config.json_tmp && mv /config.json_tmp /config.json
jq ".inbounds[0].streamSettings.network=\"$NETWORK\"" /config.json >/config.json_tmp && mv /config.json_tmp /config.json
FIRST_SERVERNAME=$(echo $SERVERNAMES | awk '{print $1}')
# config info with green color
echo -e "\033[32m" >/config_info.txt
echo "IPV6: $IPV6" >>/config_info.txt
echo "IPV4: $IPV4" >>/config_info.txt
echo "UUID: $UUID" >>/config_info.txt
echo "DEST: $DEST" >>/config_info.txt
echo "PORT: $EXTERNAL_PORT" >>/config_info.txt
echo "SERVERNAMES: $SERVERNAMES (任选其一)" >>/config_info.txt
echo "PRIVATEKEY: $PRIVATEKEY" >>/config_info.txt
echo "PUBLICKEY: $PUBLICKEY" >>/config_info.txt
echo "NETWORK: $NETWORK" >>/config_info.txt
if [ "$IPV4" != "null" ]; then
SUB_IPV4="vless://$UUID@$IPV4:$EXTERNAL_PORT?encryption=none&security=reality&type=$NETWORK&sni=$FIRST_SERVERNAME&fp=chrome&pbk=$PUBLICKEY&flow=xtls-rprx-vision#wulabing_docker_vless_reality_vision"
echo "IPV4 订阅连接: $SUB_IPV4" >>/config_info.txt
echo -e "IPV4 订阅二维码:\n$(echo "$SUB_IPV4" | qrencode -o - -t UTF8)" >>/config_info.txt
fi
if [ "$IPV6" != "null" ];then
SUB_IPV6="vless://$UUID@$IPV6:$EXTERNAL_PORT?encryption=none&security=reality&type=$NETWORK&sni=$FIRST_SERVERNAME&fp=chrome&pbk=$PUBLICKEY&flow=xtls-rprx-vision#wulabing_docker_vless_reality_vision"
echo "IPV6 订阅连接: $SUB_IPV6" >>/config_info.txt
echo -e "IPV6 订阅二维码:\n$(echo "$SUB_IPV6" | qrencode -o - -t UTF8)" >>/config_info.txt
fi
echo -e "\033[0m" >>/config_info.txt
fi
# show config info
cat /config_info.txt
# run xray
exec /xray -config /config.json