From 20d02b8b10aacfaad508b15a0e36d33ca431ce2e Mon Sep 17 00:00:00 2001 From: Evgeny Nerush Date: Mon, 8 Jan 2024 00:16:51 +0300 Subject: [PATCH] add Docker --- Dockerfile | 18 +++++++++++++++++ README.md | 51 ++++++++++++++++++++++++++++++++++++++++++++++ README.ru.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..78ee7ae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM almalinux:latest + +WORKDIR /easy-xray + +COPY ex.sh . +RUN chmod +x ex.sh +COPY template_config_client.jsonc . +COPY template_config_server.jsonc . +COPY customgeo.dat . + +RUN dnf update --assumeyes +RUN dnf install --assumeyes jq openssl + +# Ports +EXPOSE 80 +EXPOSE 443 + +ENTRYPOINT ["bash"] diff --git a/README.md b/README.md index a83bbea..2a156f6 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ can ### How to use on VPS +#### Linux + First you need a Linux server (VPS) with [jq](https://jqlang.github.io/jq/) and `openssl` installed, they can be found in repositories of almost all popular Linux distributions. Then download whole `easy-xray` folder to the VPS, make the script `ex.sh` executable, and run a desired command with it. Use `./ex.sh help` to see the list of all available commands and `./ex.sh install` to start interactive prompt @@ -38,6 +40,55 @@ sudo ./ex.sh install Now you have `conf` folder with server and client configs and some user configs. Server config is properly installed and XRay is running. Time to share configs or *links* with users! To generate config in the link form, use `./ex.sh link user_config_file.json`. +#### Docker + +Script `ex.sh` is written without Docker in mind, but can be used with Docker. Download `easy-xray` folder (main branch) and build the +Docker image from `Dockerfile` with some tag name (-t, say `ximage`): + +``` +curl -L https://codeload.github.com/EvgenyNerush/easy-xray/tar.gz/main | tar -xz +cd easy-xray-main # note `-main` !! +docker build -t ximage ./ +``` + +Usually user applications are not allowed to bind port 1024 and below, and to mimic a real website xray server should be on ports 80 and +443. Thus allow user applications to use ports from 80 and above: + +``` +sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80 +``` + +Enable *linger mode* that allows a not-logged user to run long-running services. Otherwise container can come to improper state after your +logout: + +``` +sudo loginctl enable-linger your_username +``` + +Then run docker container in interactive mode (`-i -t`) exposing ports 80 and 443 to the ports of the host: + +``` +docker run -it --name xcontainer -p 80:80 -p 443:443 ximage +``` + +In the shell of the container install and configure xray. Ignore all warnings about systemd and don't copy configs and don't restart xray. +Start xray with generated server config explicitly: + +``` +./ex.sh install +xray -c conf/config_server.json +``` + +Detach from the container with *Ctrl+p then Ctrl+q*. If you need to attach container again, use `docker attach xcontainer` with *Ctrl+c* to +stop xray running, or use `docker exec -it xcontainer bash`. To copy config files from the container to the host, first get container Id: + +``` +docker ps -a +docker cp 123abc456def:/easy-xray/conf ./ +``` + +Command `./ex.sh link conf_file` can be used on any conputer there config files are stored. + ### Clients #### Linux diff --git a/README.ru.md b/README.ru.md index 3dcbc92..e7f9d64 100644 --- a/README.ru.md +++ b/README.ru.md @@ -25,6 +25,8 @@ VLESS-Reality) не шифрует уже зашифрованный https-тр ### Как использовать на VPS +#### Linux + Для начала нужно арендовать VPS сервер вне региона с цензурой (или попросить друзей заграницей сделать это). После на сервер нужно установить [jq](https://jqlang.github.io/jq/) и `openssl` - их можно найти в репозиторияx практически всех популярных Linux дистрибутивов. Затем скачайте `easy-xray` (всю директорию целиком), сделайте исполняемым файл `ex.sh` и запустите нужную команду. Используйте `./ex.sh @@ -41,6 +43,61 @@ sudo ./ex.sh install будет должным образом установлен, а xray - запущен с ним. Настало время раздать конфиги пользователям! Для многих графических клиентов удобно использовать конфиги в виде ссылок, которые можно сгенерировать командой `./ex.sh link user_config_file.json`. +#### Docker + +Скрипт `ex.sh` написан прежде всего для использования в системе с systemd, однако может быть использован и в Docker. Для этого скачайте +директорию `easy-xray` (из ветки main) и соберите образ Docker, используя файл `Dockerfile`; ключ -t задаёт тег, например +`ximage`: + +``` +curl -L https://codeload.github.com/EvgenyNerush/easy-xray/tar.gz/main | tar -xz +cd easy-xray-main # обратите внимание на `-main` !! +docker build -t ximage ./ +``` + +Обычно пользовательские приложения не могут использовать порты ниже 1024, однако для того, чтобы замаскировать xray сервер под обычный +вебсайт, мы должны использовать порты 80 и 443. Поэтому для начала на хосте нужно разрешить пользовательским приложениям использовать порты, +начиная с 80-го (эту команду, возможно, придётся выполнять после каждой перезагрузки системы): + +``` +sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80 +``` + +Также нужно разрешить не-залогиненному пользователю выполнять долгоживущие сервисы. Иначе после выхода пользователя с сервера контейнер +может перестать работать: + +``` +sudo loginctl enable-linger your_username +``` + +Теперь можно запустить docker контейнер в интерактивном режиме (флаги `-i -t`), пробрасывая порты 80 и 443 от хоста к контейнеру: + +``` +docker run -it --name xcontainer -p 80:80 -p 443:443 ximage +``` + +В интерактивном режиме можно установить и сконфигурировать xray так же, как и в обычной системе, кроме последнего шага - копировать +серверный конфиг в директорию xray и перезапускать xray через systemctl нет смысла. Сообщения об отсутствии systemd можно +просто проигнорировать. Xray можно запустить с серверным конфигом вручную: + +``` +./ex.sh install +xray -c conf/config_server.json +``` + +После запуска xray можно отсоединиться от контейнера, используя *Ctrl+p затем Ctrl+q*. Если нужно снова присоединиться к контейнеру, можно +использовать `docker attach xcontainer` (после этого нужно нажать *Ctrl+c*, чтобы завершить работающий xray), или можно воспользоваться +командой `docker exec -it xcontainer bash` для запуска ещё одной сессии. Для того, чтобы скопировать конфиг-файлы из контейнера на хост, +сначала нужно узнать Id контейнера: + +``` +docker ps -a +docker cp 123abc456def:/easy-xray/conf ./ +``` + +Команду `./ex.sh link conf_file` можно использовать на любом компьютере с Linux, если на нём хранятся конфиг-файлы. Работающий xray для этой +команды не нужен. + ### Клиенты #### Linux