Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
browser-backend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
browser-backend
Commits
c04edc45
Commit
c04edc45
authored
Dec 22, 2024
by
jinliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add vps feature
parent
780ee419
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
226 additions
and
2 deletions
+226
-2
IpResourceServiceImpl.java
...erbackend/browser/service/Impl/IpResourceServiceImpl.java
+3
-2
BrowserTask.java
...va/com/edgec/browserbackend/browser/task/BrowserTask.java
+0
-0
AliEcsRemoteClient.java
...dgec/browserbackend/common/client/AliEcsRemoteClient.java
+223
-0
ipOptions.json
src/main/resources/ipOptions.json
+0
-0
No files found.
src/main/java/com/edgec/browserbackend/browser/service/Impl/IpResourceServiceImpl.java
View file @
c04edc45
...
...
@@ -286,8 +286,9 @@ public class IpResourceServiceImpl implements IpResourceService {
case
"isp"
:
ipResource
.
setVendorCn
(
"住宅"
);
break
;
case
"aws"
:
ipResource
.
setVendorCn
(
"亚马逊云"
);
//阿里云windows设备,支持代理IP和远程桌面
case
"remote"
:
ipResource
.
setVendorCn
(
"远程设备"
);
break
;
}
ipResource
.
setStatus
(
6
);
...
...
src/main/java/com/edgec/browserbackend/browser/task/BrowserTask.java
View file @
c04edc45
This diff is collapsed.
Click to expand it.
src/main/java/com/edgec/browserbackend/common/client/AliEcsRemoteClient.java
0 → 100644
View file @
c04edc45
package
com
.
edgec
.
browserbackend
.
common
.
client
;
import
com.alibaba.fastjson.JSON
;
import
com.aliyun.auth.credentials.Credential
;
import
com.aliyun.auth.credentials.provider.StaticCredentialProvider
;
import
com.aliyun.sdk.service.ecs20140526.AsyncClient
;
import
com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceRequest
;
import
com.aliyun.sdk.service.ecs20140526.models.DeleteInstanceResponse
;
import
com.aliyun.sdk.service.ecs20140526.models.DescribeInstancesRequest
;
import
com.aliyun.sdk.service.ecs20140526.models.DescribeInstancesResponse
;
import
com.aliyun.sdk.service.ecs20140526.models.ModifyInstanceChargeTypeRequest
;
import
com.aliyun.sdk.service.ecs20140526.models.ModifyInstanceChargeTypeResponse
;
import
com.aliyun.sdk.service.ecs20140526.models.RenewInstanceRequest
;
import
com.aliyun.sdk.service.ecs20140526.models.RenewInstanceResponse
;
import
com.aliyun.sdk.service.ecs20140526.models.RunInstancesRequest
;
import
com.aliyun.sdk.service.ecs20140526.models.RunInstancesResponse
;
import
com.edgec.browserbackend.browser.domain.CloudPlatformConfig
;
import
com.edgec.browserbackend.common.utils.Aes
;
import
darabonba.core.client.ClientOverrideConfiguration
;
import
java.util.concurrent.CompletableFuture
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
/**
* @Description 阿里云ECS相关api \
* url:https://next.api.aliyun.com/document/Ecs/2014-05-26/overview
* @Data 2024年7月28日
**/
@Service
@RequiredArgsConstructor
@Slf4j
public
class
AliEcsRemoteClient
{
//access_key_id
private
static
String
getAccessKeyId
()
{
return
"LTAI5tEdz1DY4A4oYUawUuNH"
;
}
//access_key_secret
private
static
String
getAccessKeySecret
()
{
return
"8KWmYgO0QIicZpyulhEwUhZqStrTwe"
;
}
//launch_template_id
//脚本userData
private
static
String
getUserData
()
{
return
"#!/bin/sh\n"
+
"echo \"users %s:CL:%s\n"
+
"allow %s *\n"
+
"auth strong\n"
+
"proxy -p8880\n"
+
"proxy -p8881 -a\n"
+
"socks -p8882\n"
+
"flush\" | tee /etc/3proxy.cfg\n"
+
"systemctl restart 3proxy"
;
}
/*
* @Description //创建链接
* @Date 2024/7/25 10:32
**/
private
static
AsyncClient
createClient
(
String
regionId
)
{
StaticCredentialProvider
provider
=
StaticCredentialProvider
.
create
(
Credential
.
builder
()
.
accessKeyId
(
getAccessKeyId
())
.
accessKeySecret
(
getAccessKeySecret
())
.
build
());
String
endpoint
=
String
.
format
(
"ecs.%s.aliyuncs.com"
,
regionId
);
return
AsyncClient
.
builder
()
.
region
(
regionId
)
.
credentialsProvider
(
provider
)
.
overrideConfiguration
(
ClientOverrideConfiguration
.
create
()
.
setEndpointOverride
(
endpoint
)
)
.
build
();
}
/**
* 创建并运行实例
*/
public
static
RunInstancesResponse
runInstances
(
String
owner
,
String
username
,
String
password
,
CloudPlatformConfig
config
)
{
AsyncClient
client
=
createClient
(
config
.
getRegionId
());
RunInstancesResponse
runInstancesResponse
=
null
;
String
userData
=
String
.
format
(
getUserData
(),
username
,
password
,
username
);
try
{
RunInstancesRequest
runInstancesRequest
=
RunInstancesRequest
.
builder
()
.
regionId
(
config
.
getRegionId
())
.
launchTemplateId
(
config
.
getTemplateId
())
.
userData
(
Aes
.
base64Encode
(
userData
.
getBytes
()))
.
password
(
password
)
.
build
();
log
.
info
(
"调用aliEcsRemote创建并运行实例,入参:owner:{},regionId:{}"
,
owner
,
config
.
getRegionId
());
CompletableFuture
<
RunInstancesResponse
>
response
=
client
.
runInstances
(
runInstancesRequest
);
runInstancesResponse
=
response
.
get
();
log
.
info
(
"调用aliEcsRemote创建并运行实例,响应参数:owner:{},response:{}"
,
owner
,
JSON
.
toJSON
(
runInstancesResponse
));
}
catch
(
Exception
e
)
{
log
.
error
(
"fail to aliEcsRemote runInstances {}"
,
e
.
getMessage
());
}
finally
{
client
.
close
();
}
return
runInstancesResponse
;
}
/**
* 续费实例
*/
public
static
RenewInstanceResponse
renewInstance
(
String
owner
,
String
regionId
,
String
instanceId
,
Integer
period
,
String
periodUnit
){
AsyncClient
client
=
createClient
(
regionId
);
RenewInstanceResponse
renewInstanceResponse
=
null
;
try
{
RenewInstanceRequest
renewInstanceRequest
=
RenewInstanceRequest
.
builder
()
.
instanceId
(
instanceId
)
.
period
(
period
)
.
periodUnit
(
periodUnit
)
.
build
();
log
.
info
(
"调用aliEcsRemote续费实例,入参:owner:{},regionId:{},instanceId:{},period:{},periodUnit:{}"
,
owner
,
regionId
,
instanceId
,
period
,
periodUnit
);
CompletableFuture
<
RenewInstanceResponse
>
response
=
client
.
renewInstance
(
renewInstanceRequest
);
renewInstanceResponse
=
response
.
get
();
log
.
info
(
"调用aliEcsRemote续费实例,响应参数:owner:{},response:{}"
,
owner
,
JSON
.
toJSON
(
renewInstanceResponse
));
}
catch
(
Exception
e
)
{
log
.
error
(
"fail to aliEcsRemote runInstances {}"
,
e
.
getMessage
());
}
finally
{
client
.
close
();
}
return
renewInstanceResponse
;
}
/**
* 查询单个实例
*/
public
static
DescribeInstancesResponse
getDescribeInstances
(
String
owner
,
String
instanceId
,
String
regionId
)
{
AsyncClient
client
=
createClient
(
regionId
);
DescribeInstancesResponse
resp
=
null
;
try
{
String
instanceIds
=
String
.
format
(
"[\"%s\"]"
,
instanceId
);
DescribeInstancesRequest
describeInstancesRequest
=
DescribeInstancesRequest
.
builder
()
.
regionId
(
regionId
)
.
instanceIds
(
instanceIds
)
.
build
();
log
.
info
(
"调用aliEcsRemote查询单个实例,入参:owner:{},regionId:{},instanceId:{}"
,
owner
,
regionId
,
instanceId
);
CompletableFuture
<
DescribeInstancesResponse
>
response
=
client
.
describeInstances
(
describeInstancesRequest
);
resp
=
response
.
get
();
log
.
info
(
"调用aliEcsRemote查询单个实例,响应参数:owner:{},response:{}"
,
owner
,
JSON
.
toJSON
(
resp
));
}
catch
(
Exception
e
)
{
log
.
error
(
"fail to aliEcsRemote getDescribeInstances {}"
,
e
.
getMessage
());
}
finally
{
client
.
close
();
}
return
resp
;
}
/**
* 删除ECS
*/
public
static
DeleteInstanceResponse
deleteInstance
(
String
owner
,
String
instanceId
,
String
regionId
)
{
AsyncClient
client
=
createClient
(
regionId
);
DeleteInstanceResponse
resp
=
null
;
try
{
DeleteInstanceRequest
deleteInstanceRequest
=
DeleteInstanceRequest
.
builder
()
.
instanceId
(
instanceId
)
.
force
(
true
)
.
build
();
log
.
info
(
"调用aliEcsRemote删除ECS实例,入参:owner:{},instanceId:{},regionId{}"
,
owner
,
instanceId
,
regionId
);
CompletableFuture
<
DeleteInstanceResponse
>
response
=
client
.
deleteInstance
(
deleteInstanceRequest
);
resp
=
response
.
get
();
log
.
info
(
"调用aliEcsRemote删除ECS实例,响应参数:owner:{},response:{}"
,
owner
,
JSON
.
toJSON
(
resp
));
}
catch
(
Exception
e
)
{
log
.
error
(
"fail to aliEcsRemote deleteInstance {}"
,
e
.
getMessage
());
}
finally
{
client
.
close
();
}
return
resp
;
}
/**
* 将按量改为包年包月
*/
public
static
ModifyInstanceChargeTypeResponse
modifyInstanceChargeType
(
String
owner
,
String
periodUnit
,
int
period
,
String
regionId
,
String
instanceId
)
{
AsyncClient
client
=
createClient
(
regionId
);
ModifyInstanceChargeTypeResponse
modifyInstanceChargeTypeResponse
=
null
;
try
{
String
instanceIds
=
String
.
format
(
"[\"%s\"]"
,
instanceId
);
ModifyInstanceChargeTypeRequest
modifyInstanceChargeTypeRequest
=
ModifyInstanceChargeTypeRequest
.
builder
()
.
instanceIds
(
instanceIds
)
.
regionId
(
regionId
)
.
instanceChargeType
(
"PrePaid"
)
.
periodUnit
(
periodUnit
)
.
period
(
period
)
.
build
();
log
.
info
(
"调用aliEcsRemote将实例由量改为包年包月,入参:owner:{},regionId:{},periodUnit:{},period:{}, instanceId{}"
,
owner
,
regionId
,
periodUnit
,
period
,
instanceId
);
CompletableFuture
<
ModifyInstanceChargeTypeResponse
>
response
=
client
.
modifyInstanceChargeType
(
modifyInstanceChargeTypeRequest
);
modifyInstanceChargeTypeResponse
=
response
.
get
();
log
.
info
(
"调用aliEcsRemote将实例由量改为包年包月,响应参数:owner:{},response:{}"
,
owner
,
JSON
.
toJSON
(
modifyInstanceChargeTypeResponse
));
}
catch
(
Exception
e
)
{
log
.
error
(
"fail to aliEcsRemote modifyInstanceChargeType {}"
,
e
.
getMessage
());
}
finally
{
client
.
close
();
}
return
modifyInstanceChargeTypeResponse
;
}
}
src/main/resources/ipOptions.json
View file @
c04edc45
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment