Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
maotama-server
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
maotama-server
Commits
1127d9de
Commit
1127d9de
authored
Aug 12, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
first
parent
7da120d4
Pipeline
#532
failed with stages
in 2 minutes and 31 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
153 additions
and
0 deletions
+153
-0
.gitlab-ci.yml
.gitlab-ci.yml
+43
-0
Dockerfile
Dockerfile
+27
-0
entrypoint.sh
entrypoint.sh
+3
-0
main.go
main.go
+80
-0
No files found.
.gitlab-ci.yml
0 → 100644
View file @
1127d9de
stages
:
-
build
-
deploy
variables
:
GIT_DEPTH
:
"
1"
CONTAINER_TEST_IMAGE
:
$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
CONTAINER_RELEASE_IMAGE
:
$CI_REGISTRY_IMAGE:latest
before_script
:
-
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build
:
stage
:
build
tags
:
-
docker
script
:
-
docker build --pull -t $CONTAINER_TEST_IMAGE .
-
docker push $CONTAINER_TEST_IMAGE
deploy_latest
:
stage
:
deploy
tags
:
-
docker
script
:
-
docker pull $CONTAINER_TEST_IMAGE
-
docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
-
docker push $CONTAINER_RELEASE_IMAGE
only
:
-
master
deploy_tag
:
stage
:
deploy
tags
:
-
docker
variables
:
CONTAINER_TAG_IMAGE
:
$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
script
:
-
docker pull $CONTAINER_TEST_IMAGE
-
docker tag $CONTAINER_TEST_IMAGE $CONTAINER_TAG_IMAGE
-
docker push $CONTAINER_TAG_IMAGE
only
:
-
tags
Dockerfile
0 → 100644
View file @
1127d9de
FROM
golang as builder
RUN
go
env
-w
GO111MODULE
=
auto
\
&&
go
env
-w
CGO_ENABLED
=
0
\
&&
go
env
-w
GOPROXY
=
https://goproxy.cn,https://gocenter.io,https://goproxy.io,direct
\
&&
go get golang.org/x/net/websocket
WORKDIR
/usr/src/app
COPY
./main.go ./
RUN
go build
-ldflags
"-s -w -extldflags '-static'"
-o
maotama-server main.go
FROM
debian:buster-slim
RUN
apt update
&&
\
apt
-y
install
dnsutils
&&
\
rm
-rf
/var/lib/apt/lists/
*
/tmp/
*
/var/tmp/
*
COPY
./entrypoint.sh /
COPY
--from=builder /usr/src/app/maotama-server /usr/bin/
WORKDIR
/data
ENV
TZ Asia/Shanghai
ENTRYPOINT
[ "/entrypoint.sh" ]
CMD
[ "/usr/bin/maotama-server" ]
entrypoint.sh
0 → 100755
View file @
1127d9de
#!/bin/bash
export
ADDRESS
=
$(
dig whoami.cloudflare ch txt @1.0.0.1 +short |
sed
's/\"//g'
)
exec
"
$@
"
main.go
0 → 100644
View file @
1127d9de
package
main
import
(
"fmt"
"log"
"net"
"net/http"
"os"
"golang.org/x/net/websocket"
)
var
IP
=
os
.
Getenv
(
"ADDRESS"
)
func
transfer
(
local
*
net
.
UDPConn
,
remote
*
net
.
UDPConn
,
remotAddr
*
net
.
UDPAddr
)
{
buffer
:=
make
([]
byte
,
2048
)
for
{
length
,
_
,
_
:=
local
.
ReadFromUDP
(
buffer
)
remote
.
WriteToUDP
(
buffer
[
:
length
],
remotAddr
)
}
}
func
serverTransfer
(
client
*
net
.
UDPConn
,
remoteAddr
*
net
.
UDPAddr
,
channel
chan
[]
byte
)
{
for
{
message
:=
<-
channel
client
.
WriteToUDP
(
message
,
remoteAddr
)
}
}
func
listenUDP
(
ws
*
websocket
.
Conn
)
{
server
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
log
.
Println
(
err
)
return
}
clients
:=
make
(
map
[
string
]
chan
[]
byte
)
reply
:=
fmt
.
Sprintf
(
"LISTEN %s:%d"
,
IP
,
server
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
for
{
message
:=
make
([]
byte
,
2048
)
length
,
clientAddr
,
_
:=
server
.
ReadFromUDP
(
message
)
channel
,
ok
:=
clients
[
clientAddr
.
String
()]
if
!
ok
{
client
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
log
.
Println
(
err
)
return
}
reply
=
fmt
.
Sprintf
(
"CONNECT %s:%d"
,
IP
,
client
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
_
,
remoteAddr
,
_
:=
client
.
ReadFromUDP
(
make
([]
byte
,
2048
))
reply
=
fmt
.
Sprintf
(
"CONNECTED %s:%d"
,
IP
,
client
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
client
.
WriteToUDP
(
message
[
:
length
],
remoteAddr
)
go
transfer
(
client
,
server
,
clientAddr
)
channel
:=
make
(
chan
[]
byte
)
clients
[
clientAddr
.
String
()]
=
channel
go
serverTransfer
(
client
,
remoteAddr
,
channel
)
}
else
{
channel
<-
message
[
:
length
]
}
}
}
func
handler
(
ws
*
websocket
.
Conn
)
{
defer
ws
.
Close
()
go
listenUDP
(
ws
)
ws
.
Read
(
make
([]
byte
,
1
))
log
.
Println
(
"Websocket disconnected"
)
}
func
main
()
{
http
.
Handle
(
"/"
,
websocket
.
Handler
(
handler
))
log
.
Println
(
"Maotama server started on "
+
IP
)
err
:=
http
.
ListenAndServeTLS
(
":10800"
,
"./cert/fullchain.pem"
,
"./cert/privkey.pem"
,
nil
)
if
err
!=
nil
{
panic
(
"ListenAndServe: "
+
err
.
Error
())
}
}
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