Spaces:
Paused
Paused
Update Dockerfile
Browse files- Dockerfile +15 -17
Dockerfile
CHANGED
|
@@ -8,6 +8,7 @@ RUN apt-get update && apt-get install -y \
|
|
| 8 |
build-essential \
|
| 9 |
libssl-dev \
|
| 10 |
pkg-config \
|
|
|
|
| 11 |
&& rm -rf /var/lib/apt/lists/*
|
| 12 |
|
| 13 |
# 2. Установка Android NDK
|
|
@@ -28,8 +29,13 @@ RUN cargo install cargo-ndk
|
|
| 28 |
WORKDIR /app
|
| 29 |
RUN cargo init --lib --name vless_core
|
| 30 |
|
| 31 |
-
# 5. Настройка Cargo.toml (
|
| 32 |
-
RUN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
crate-type = ["cdylib"]\n\
|
| 34 |
\n\
|
| 35 |
[dependencies]\n\
|
|
@@ -40,14 +46,11 @@ log = "0.4"\n\
|
|
| 40 |
android_logger = "0.13"\n\
|
| 41 |
lazy_static = "1.4"\n\
|
| 42 |
serde = { version = "1.0", features = ["derive"] }\n\
|
| 43 |
-
serde_json = "1.0"\n
|
| 44 |
-
# В реальном продакшене здесь были бы крейты для VLESS протокола (напр. v2ray-core rust port)\n\
|
| 45 |
-
# Для примера реализуем сокет-логику\n\
|
| 46 |
-
' > Cargo.toml
|
| 47 |
|
| 48 |
# 6. Написание исходного кода (src/lib.rs)
|
| 49 |
-
#
|
| 50 |
-
RUN
|
| 51 |
use std::os::raw::{c_char, c_int};\n\
|
| 52 |
use std::sync::{Arc, Mutex};\n\
|
| 53 |
use log::{info, error, LevelFilter};\n\
|
|
@@ -75,11 +78,7 @@ struct VlessConfig {\n\
|
|
| 75 |
\n\
|
| 76 |
async fn vless_worker(config: VlessConfig) {\n\
|
| 77 |
info!("Starting VLESS Core connecting to {}:{}", config.address, config.port);\n\
|
| 78 |
-
// Имитация работы VLESS (Keepalive)\n\
|
| 79 |
loop {\n\
|
| 80 |
-
// В реальном коде здесь происходит TCP Handshake и VLESS Request\n\
|
| 81 |
-
// use tokio::net::TcpStream;\n\
|
| 82 |
-
// let stream = TcpStream::connect((config.address.as_str(), config.port)).await;\n\
|
| 83 |
info!("VLESS Keepalive: Ping to {}", config.address);\n\
|
| 84 |
tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;\n\
|
| 85 |
}\n\
|
|
@@ -103,7 +102,7 @@ pub extern "C" fn start_vless(config_json: *const c_char) -> c_int {\n\
|
|
| 103 |
\n\
|
| 104 |
let mut handle = VPN_HANDLE.lock().unwrap();\n\
|
| 105 |
if handle.is_some() {\n\
|
| 106 |
-
return 1
|
| 107 |
}\n\
|
| 108 |
\n\
|
| 109 |
*handle = Some(RUNTIME.spawn(vless_worker(config)));\n\
|
|
@@ -119,9 +118,8 @@ pub extern "C" fn stop_vless() -> c_int {\n\
|
|
| 119 |
info!("VLESS Service Stopped");\n\
|
| 120 |
return 0;\n\
|
| 121 |
}\n\
|
| 122 |
-
return 1
|
| 123 |
-
}\n
|
| 124 |
-
' > src/lib.rs
|
| 125 |
|
| 126 |
# 7. Сборка библиотек под разные архитектуры
|
| 127 |
RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
|
|
@@ -130,6 +128,6 @@ RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
|
|
| 130 |
WORKDIR /app
|
| 131 |
RUN zip -r vless_libs.zip jniLibs
|
| 132 |
|
| 133 |
-
# 9. Запуск сервера для скачивания
|
| 134 |
EXPOSE 7860
|
| 135 |
CMD ["python3", "-m", "http.server", "7860"]
|
|
|
|
| 8 |
build-essential \
|
| 9 |
libssl-dev \
|
| 10 |
pkg-config \
|
| 11 |
+
zip \
|
| 12 |
&& rm -rf /var/lib/apt/lists/*
|
| 13 |
|
| 14 |
# 2. Установка Android NDK
|
|
|
|
| 29 |
WORKDIR /app
|
| 30 |
RUN cargo init --lib --name vless_core
|
| 31 |
|
| 32 |
+
# 5. Настройка Cargo.toml (ИСПРАВЛЕНО: добавлена секция [package])
|
| 33 |
+
RUN printf '[package]\n\
|
| 34 |
+
name = "vless_core"\n\
|
| 35 |
+
version = "0.1.0"\n\
|
| 36 |
+
edition = "2021"\n\
|
| 37 |
+
\n\
|
| 38 |
+
[lib]\n\
|
| 39 |
crate-type = ["cdylib"]\n\
|
| 40 |
\n\
|
| 41 |
[dependencies]\n\
|
|
|
|
| 46 |
android_logger = "0.13"\n\
|
| 47 |
lazy_static = "1.4"\n\
|
| 48 |
serde = { version = "1.0", features = ["derive"] }\n\
|
| 49 |
+
serde_json = "1.0"\n' > Cargo.toml
|
|
|
|
|
|
|
|
|
|
| 50 |
|
| 51 |
# 6. Написание исходного кода (src/lib.rs)
|
| 52 |
+
# Используем printf для корректной обработки переносов строк и спецсимволов
|
| 53 |
+
RUN printf 'use std::ffi::CStr;\n\
|
| 54 |
use std::os::raw::{c_char, c_int};\n\
|
| 55 |
use std::sync::{Arc, Mutex};\n\
|
| 56 |
use log::{info, error, LevelFilter};\n\
|
|
|
|
| 78 |
\n\
|
| 79 |
async fn vless_worker(config: VlessConfig) {\n\
|
| 80 |
info!("Starting VLESS Core connecting to {}:{}", config.address, config.port);\n\
|
|
|
|
| 81 |
loop {\n\
|
|
|
|
|
|
|
|
|
|
| 82 |
info!("VLESS Keepalive: Ping to {}", config.address);\n\
|
| 83 |
tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;\n\
|
| 84 |
}\n\
|
|
|
|
| 102 |
\n\
|
| 103 |
let mut handle = VPN_HANDLE.lock().unwrap();\n\
|
| 104 |
if handle.is_some() {\n\
|
| 105 |
+
return 1;\n\
|
| 106 |
}\n\
|
| 107 |
\n\
|
| 108 |
*handle = Some(RUNTIME.spawn(vless_worker(config)));\n\
|
|
|
|
| 118 |
info!("VLESS Service Stopped");\n\
|
| 119 |
return 0;\n\
|
| 120 |
}\n\
|
| 121 |
+
return 1;\n\
|
| 122 |
+
}\n' > src/lib.rs
|
|
|
|
| 123 |
|
| 124 |
# 7. Сборка библиотек под разные архитектуры
|
| 125 |
RUN cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ./jniLibs build --release
|
|
|
|
| 128 |
WORKDIR /app
|
| 129 |
RUN zip -r vless_libs.zip jniLibs
|
| 130 |
|
| 131 |
+
# 9. Запуск сервера для скачивания
|
| 132 |
EXPOSE 7860
|
| 133 |
CMD ["python3", "-m", "http.server", "7860"]
|