mirror of
https://github.com/zhengkai/orca.git
synced 2025-12-19 18:32:23 +08:00
up
This commit is contained in:
21
Makefile
Normal file
21
Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
SHELL:=/bin/bash
|
||||
|
||||
-include ./server/build/config.ini
|
||||
|
||||
start:
|
||||
./server/build/run-server.sh $(type)
|
||||
|
||||
stop:
|
||||
./server/build/stop-server.sh $(type)
|
||||
|
||||
dev:
|
||||
./server/build/run-server.sh dev
|
||||
|
||||
stopdev:
|
||||
./server/build/stop-server.sh dev
|
||||
|
||||
prod:
|
||||
./server/build/run-server.sh prod
|
||||
|
||||
stopprod:
|
||||
./server/build/stop-server.sh prod
|
||||
1
misc/db/.gitignore
vendored
Normal file
1
misc/db/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.sql
|
||||
20
misc/db/dump-each-table.sh
Executable file
20
misc/db/dump-each-table.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
mkdir -p table
|
||||
|
||||
for T in $(echo "SHOW TABLES" | mysql "$DB" --skip-column-names); do
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
"${DB}" "${T}" > "table/${T}.sql"
|
||||
done
|
||||
16
misc/db/dump-full.sh
Executable file
16
misc/db/dump-full.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
--databases "$DB" \
|
||||
> "${DB}-full.sql"
|
||||
18
misc/db/dump-struct.sh
Executable file
18
misc/db/dump-struct.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
DB="orca"
|
||||
|
||||
DIR="$(dirname "$(readlink -f "$0")")" && cd "$DIR" || exit 1
|
||||
|
||||
/usr/bin/mysqldump \
|
||||
--no-data \
|
||||
--default-character-set=binary \
|
||||
--add-drop-database \
|
||||
--add-drop-table \
|
||||
--add-locks \
|
||||
--hex-blob \
|
||||
--quick \
|
||||
--skip-dump-date \
|
||||
--databases "$DB" \
|
||||
| sed 's# AUTO_INCREMENT=[0-9]*##g' \
|
||||
> "${DB}-struct.sql"
|
||||
6
misc/db/user-docker.sql
Normal file
6
misc/db/user-docker.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
CREATE USER 'orca'@'172.17.0.0/24' IDENTIFIED WITH caching_sha2_password BY 'orca';
|
||||
GRANT USAGE ON *.* TO 'orca'@'172.17.0.0/24';
|
||||
ALTER USER 'orca'@'172.17.0.0/24' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, LOCK TABLES ON `orca`.* TO 'orca'@'172.17.0.0/24';
|
||||
ALTER USER 'orca'@'172.17.0.0/24' ;
|
||||
6
misc/db/user.sql
Normal file
6
misc/db/user.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
CREATE USER 'orca'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'orca';
|
||||
GRANT USAGE ON *.* TO 'orca'@'localhost';
|
||||
ALTER USER 'orca'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
|
||||
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, LOCK TABLES ON `orca`.* TO 'orca'@'localhost';
|
||||
ALTER USER 'orca'@'localhost' ;
|
||||
1
misc/docker/.gitignore
vendored
Normal file
1
misc/docker/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.tar
|
||||
28
misc/docker/Dockerfile
Normal file
28
misc/docker/Dockerfile
Normal file
@@ -0,0 +1,28 @@
|
||||
# builder stage
|
||||
|
||||
FROM golang:latest as builder
|
||||
|
||||
ARG DOCKER_RUNNING=yes
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt update && apt install -yq protobuf-compiler tzdata ca-certificates
|
||||
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
|
||||
|
||||
COPY . /project
|
||||
|
||||
RUN cd /project/proto && make
|
||||
|
||||
RUN /project/server/build/build-server.sh prod
|
||||
|
||||
# clean stage
|
||||
|
||||
FROM alpine
|
||||
|
||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/
|
||||
COPY --from=builder /project/server/dist/prod/orca-server-next /orca-server
|
||||
|
||||
RUN apk add --no-cache gzip brotli
|
||||
|
||||
ENV TZ=Asia/Shanghai
|
||||
|
||||
CMD ["/orca-server"]
|
||||
25
misc/docker/Makefile
Normal file
25
misc/docker/Makefile
Normal file
@@ -0,0 +1,25 @@
|
||||
SHELL:=/bin/bash
|
||||
|
||||
build: git
|
||||
sudo docker build -t orca -f Dockerfile ../..
|
||||
|
||||
run: build
|
||||
sudo docker run --env "ORCA_MYSQL=orca:orca@tcp(172.17.0.1:3306)/orca" \
|
||||
--mount type=bind,source=/tmp/orca/tmp,target=/tmp \
|
||||
--mount type=bind,source=/tmp/orca/server/dist/prod/log,target=/log \
|
||||
orca
|
||||
|
||||
install: build
|
||||
sudo docker save orca > docker-orca.tar
|
||||
scp docker-orca.tar freya:/tmp
|
||||
scp install.sh freya:/tmp
|
||||
ssh freya "chmod +x /tmp/install.sh && /tmp/install.sh && rm /tmp/install.sh"
|
||||
|
||||
git:
|
||||
../../server/build/git-hash.sh > ../../server/build/.git-hash
|
||||
|
||||
clean:
|
||||
sudo docker stop orca || :
|
||||
sudo docker rm orca || :
|
||||
sudo docker rmi orca || :
|
||||
sudo docker image prune --force
|
||||
24
misc/docker/install.sh
Normal file
24
misc/docker/install.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
TARGET="Freya"
|
||||
|
||||
if [ "$HOSTNAME" != "$TARGET" ]; then
|
||||
>&2 echo only run in server "$TARGET"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo docker stop orca
|
||||
sudo docker rm orca
|
||||
sudo docker rmi orca
|
||||
|
||||
sudo cat /tmp/docker-orca.tar | sudo docker load
|
||||
|
||||
sudo docker run -d --name orca \
|
||||
--env "TANK_MYSQL=orca:orca@tcp(172.17.0.1:3306)/orca" \
|
||||
--env "STATIC_DIR=/tmp" \
|
||||
--env "OUTPUT_PATH=/output" \
|
||||
--mount type=bind,source=/www/orca/output,target=/output \
|
||||
--mount type=bind,source=/www/orca/log,target=/log \
|
||||
--mount type=bind,source=/www/orca/static,target=/tmp \
|
||||
--restart always \
|
||||
orca
|
||||
1
server/build/.gitignore
vendored
Normal file
1
server/build/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/.git-hash
|
||||
36
server/build/build-server.sh
Executable file
36
server/build/build-server.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR"
|
||||
|
||||
GIT_ROOT=$(git rev-parse --show-cdup 2>/dev/null)
|
||||
if [ -n "$GIT_ROOT" ]; then
|
||||
TMPDIR="${GIT_ROOT}/tmp"
|
||||
fi
|
||||
|
||||
. ./common.sh
|
||||
|
||||
DATE=$(TZ='Asia/Shanghai' date '+%Y-%m-%d %H:%M:%S')
|
||||
GO_VERSION=$(go version)
|
||||
GIT_VERSION=$(./git-hash.sh)
|
||||
if [ "$DOCKER_RUNNING" == "yes" ] && [ -f .git-hash ]; then
|
||||
GIT_VERSION=$(cat .git-hash || :)
|
||||
HOSTNAME="docker"
|
||||
fi
|
||||
|
||||
LDFLAGS="-X '${BUILD_PACKAGE}.BuildGoVersion=${GO_VERSION}' \
|
||||
-X '${BUILD_PACKAGE}.BuildTime=${DATE}' \
|
||||
-X '${BUILD_PACKAGE}.BuildType=${TYPE}' \
|
||||
-X '${BUILD_PACKAGE}.BuildHost=${HOSTNAME}' \
|
||||
-X '${BUILD_PACKAGE}.BuildGit=${GIT_VERSION}'"
|
||||
|
||||
cd ../src
|
||||
|
||||
if [ -d "vendor" ]; then
|
||||
VENDOR="-mod=vendor"
|
||||
fi
|
||||
|
||||
CGO_ENABLED=0 go build $VENDOR \
|
||||
-ldflags "$LDFLAGS" \
|
||||
-o "$EXE_NEXT" \
|
||||
"../build/${TYPE}/"*.go \
|
||||
2> >(while read -r line; do echo -e "\e[38;2;255;45;45;48;2;10;10;10m$line\e[0m" >&2; done)
|
||||
18
server/build/common.sh
Normal file
18
server/build/common.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
BIN="orca-server"
|
||||
BUILD_PACKAGE="project/build"
|
||||
|
||||
TYPE="${1:-dev}"
|
||||
|
||||
if [ ! -f "${DIR}/${TYPE}/go.mod" ]; then
|
||||
echo "no build \"${TYPE}\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DIST_DIR="$(dirname "$DIR")/dist/${TYPE}"
|
||||
mkdir -p "$DIST_DIR"
|
||||
|
||||
EXE="${DIST_DIR}/${BIN}"
|
||||
EXE_NEXT="${EXE}-next"
|
||||
|
||||
PID_FILE="${EXE}.pid"
|
||||
LOG_FILE="${DIST_DIR}/server.log"
|
||||
1
server/build/config.ini
Normal file
1
server/build/config.ini
Normal file
@@ -0,0 +1 @@
|
||||
type = dev
|
||||
7
server/build/dev/go.mod
Normal file
7
server/build/dev/go.mod
Normal file
@@ -0,0 +1,7 @@
|
||||
module dev
|
||||
|
||||
go 1.17
|
||||
|
||||
require project v0.0.0
|
||||
|
||||
replace project v0.0.0 => ../../src
|
||||
7
server/build/dev/main.go
Normal file
7
server/build/dev/main.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "project"
|
||||
|
||||
func main() {
|
||||
project.Start()
|
||||
}
|
||||
36
server/build/get-pid.sh
Executable file
36
server/build/get-pid.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR" || exit 1
|
||||
|
||||
. ./common.sh
|
||||
|
||||
if [ -n "$PID_FILE" ] && [ -f "$PID_FILE" ]; then
|
||||
PID=$(cat "$PID_FILE" 2>/dev/null|| :)
|
||||
fi
|
||||
if [ -z "$PID" ] || [ -z "$EXE" ]; then
|
||||
>&2 echo no pid or exec
|
||||
exit 1
|
||||
fi
|
||||
|
||||
EXE_LINK="/proc/${PID}/exe"
|
||||
|
||||
if [ ! -L "$EXE_LINK" ]; then
|
||||
>&2 echo "no pid $PID"
|
||||
exit 2
|
||||
fi
|
||||
if [ ! -r "$EXE_LINK" ]; then
|
||||
>&2 echo "can not read pid $PID"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
EXE_READLINK=$(readlink -f "$EXE_LINK" || :)
|
||||
if [ -z "$EXE_READLINK" ]; then
|
||||
>&2 echo "unknown pid $PID"
|
||||
exit 4
|
||||
fi
|
||||
if [ "$EXE_READLINK" != "$EXE" ]; then
|
||||
>&2 echo "pid $PID not file $EXE (${EXE_READLINK})"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
echo "$PID"
|
||||
26
server/build/git-hash.sh
Executable file
26
server/build/git-hash.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
HASH=$(git rev-parse --short HEAD 2>/dev/null || :)
|
||||
if [ -z "$HASH" ]; then
|
||||
echo "empty"
|
||||
exit
|
||||
fi
|
||||
|
||||
TAG=$(git describe --exact-match "$HASH" 2>/dev/null | head -n 1)
|
||||
if [ -n "$TAG" ]; then
|
||||
HASH="$TAG"
|
||||
fi
|
||||
|
||||
ST=$(git status -s -u | head -n 1)
|
||||
if [ -n "$ST" ]; then
|
||||
HASH="${HASH}-dirty"
|
||||
fi
|
||||
|
||||
BRANCH=$(git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/")
|
||||
if [[ "$BRANCH" == *"("* ]]; then
|
||||
BRANCH=''
|
||||
else
|
||||
BRANCH="${BRANCH}:"
|
||||
fi
|
||||
|
||||
echo "${BRANCH}${HASH}"
|
||||
7
server/build/prod/go.mod
Normal file
7
server/build/prod/go.mod
Normal file
@@ -0,0 +1,7 @@
|
||||
module prod
|
||||
|
||||
go 1.17
|
||||
|
||||
require project v0.0.0
|
||||
|
||||
replace project v0.0.0 => ../../src
|
||||
7
server/build/prod/main.go
Normal file
7
server/build/prod/main.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "project"
|
||||
|
||||
func main() {
|
||||
project.Prod()
|
||||
}
|
||||
22
server/build/run-server.sh
Executable file
22
server/build/run-server.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR" || exit 1
|
||||
|
||||
. ./common.sh
|
||||
|
||||
if [ ! -f config.ini ]; then
|
||||
echo "type = $TYPE" > config.ini
|
||||
fi
|
||||
|
||||
"${DIR}/build-server.sh" "$TYPE"
|
||||
echo 'done'
|
||||
|
||||
echo
|
||||
"${DIR}/stop-server.sh" "$TYPE" || :
|
||||
echo 'done'
|
||||
|
||||
mv "$EXE_NEXT" "$EXE"
|
||||
|
||||
echo
|
||||
"${DIR}/start-server.sh" "$TYPE"
|
||||
echo 'done'
|
||||
22
server/build/start-server.sh
Executable file
22
server/build/start-server.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR" || exit 1
|
||||
|
||||
. ./common.sh
|
||||
LOG="log file: $LOG_FILE"
|
||||
|
||||
PID=$(./get-pid.sh "$TYPE" 2>/dev/null || :)
|
||||
if [ -n "$PID" ]; then
|
||||
echo "server running, pid = $PID"
|
||||
echo "$LOG"
|
||||
exit
|
||||
fi
|
||||
|
||||
ulimit -n 65535 >/dev/null 2>&1 || :
|
||||
echo "ulimit = $(ulimit -n)"
|
||||
|
||||
nohup "$EXE" > "$LOG_FILE" 2>&1 &
|
||||
PID="$!"
|
||||
echo "$PID" > "$PID_FILE"
|
||||
echo "new server started, pid = $PID"
|
||||
echo "$LOG"
|
||||
19
server/build/status.sh
Executable file
19
server/build/status.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR" || exit 1
|
||||
|
||||
. ./common.sh
|
||||
|
||||
PID=$(./get-pid.sh "$TYPE")
|
||||
|
||||
if [ -z "$PID" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
cat "/proc/${PID}/limits"
|
||||
echo
|
||||
cat "/proc/${PID}/status"
|
||||
echo
|
||||
cat "/proc/${PID}/io"
|
||||
echo
|
||||
echo "more in /proc/${PID}"
|
||||
20
server/build/stop-server.sh
Executable file
20
server/build/stop-server.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
DIR=$(readlink -f "$0") && DIR=$(dirname "$DIR") && cd "$DIR" || exit 1
|
||||
|
||||
. ./common.sh
|
||||
|
||||
PID=$(./get-pid.sh "$TYPE" 2>/dev/null || :)
|
||||
if [ -z "$PID" ]; then
|
||||
echo server is not running
|
||||
exit
|
||||
fi
|
||||
|
||||
echo 'stoping server' >> "$LOG_FILE" 2>&1 &
|
||||
|
||||
echo "kill pid $PID $EXE"
|
||||
sudo kill "$PID"
|
||||
while [ -e "/proc/${PID}/exe" ];
|
||||
do
|
||||
sleep 1;
|
||||
done;
|
||||
1
server/dist/.gitignore
vendored
Normal file
1
server/dist/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*
|
||||
29
server/src/build/build.go
Normal file
29
server/src/build/build.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package build
|
||||
|
||||
import "fmt"
|
||||
|
||||
// BuildGoVersion ...
|
||||
var BuildGoVersion string
|
||||
|
||||
// BuildTime ...
|
||||
var BuildTime string
|
||||
|
||||
// BuildType ...
|
||||
var BuildType string
|
||||
|
||||
// BuildHost ...
|
||||
var BuildHost string
|
||||
|
||||
// BuildGit ...
|
||||
var BuildGit string
|
||||
|
||||
// DumpBuildInfo ...
|
||||
func DumpBuildInfo() {
|
||||
fmt.Println()
|
||||
fmt.Println(BuildGoVersion)
|
||||
fmt.Println(BuildTime)
|
||||
fmt.Println(BuildType)
|
||||
fmt.Println(BuildHost)
|
||||
fmt.Println(BuildGit)
|
||||
fmt.Println()
|
||||
}
|
||||
10
server/src/config/config.go
Normal file
10
server/src/config/config.go
Normal file
@@ -0,0 +1,10 @@
|
||||
package config
|
||||
|
||||
// config
|
||||
var (
|
||||
Prod bool
|
||||
Dir string
|
||||
|
||||
MySQL = `user:pass@/dbname`
|
||||
StaticDir = `/tmp`
|
||||
)
|
||||
22
server/src/config/init.go
Normal file
22
server/src/config/init.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
Dir, _ = filepath.Abs(filepath.Dir(os.Args[0]))
|
||||
|
||||
list := map[string]*string{
|
||||
`ORCA_MYSQL`: &MySQL,
|
||||
`STATIC_DIR`: &StaticDir,
|
||||
}
|
||||
for k, v := range list {
|
||||
s := os.Getenv(k)
|
||||
if len(s) > 1 {
|
||||
*v = s
|
||||
}
|
||||
}
|
||||
}
|
||||
9
server/src/go.mod
Normal file
9
server/src/go.mod
Normal file
@@ -0,0 +1,9 @@
|
||||
module project
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/zhengkai/zog v1.0.3
|
||||
|
||||
require github.com/zhengkai/life-go v1.0.3
|
||||
|
||||
require github.com/prometheus/client_golang v1.14.0 // indirect
|
||||
6
server/src/go.sum
Normal file
6
server/src/go.sum
Normal file
@@ -0,0 +1,6 @@
|
||||
github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
|
||||
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
|
||||
github.com/zhengkai/life-go v1.0.3 h1:rzm+Hb8H4He5trWx3lthFEQPf3sHpns0bDZ7vubT6sI=
|
||||
github.com/zhengkai/life-go v1.0.3/go.mod h1:e2RGLfk+uRzjhRrMQash9X4iY3jAuGj99r0qj5JS7m4=
|
||||
github.com/zhengkai/zog v1.0.3 h1:dkJdXJKRjbqqlseFycA1d80AUU6HAZrPe4WplpmwTo4=
|
||||
github.com/zhengkai/zog v1.0.3/go.mod h1:dXbJ0XDMRXQX+XeNuIM9hJy/6OLRNtXHPq/86ll8u6I=
|
||||
27
server/src/project.go
Normal file
27
server/src/project.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package project
|
||||
|
||||
import (
|
||||
"project/build"
|
||||
"project/config"
|
||||
"project/zj"
|
||||
|
||||
"github.com/zhengkai/life-go"
|
||||
)
|
||||
|
||||
// Start ...
|
||||
func Start() {
|
||||
|
||||
build.DumpBuildInfo()
|
||||
|
||||
zj.Init()
|
||||
|
||||
life.Wait()
|
||||
}
|
||||
|
||||
// Prod ...
|
||||
func Prod() {
|
||||
|
||||
config.Prod = true
|
||||
|
||||
Start()
|
||||
}
|
||||
33
server/src/web/server.go
Normal file
33
server/src/web/server.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"project/zj"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Server ...
|
||||
func Server(port int) {
|
||||
|
||||
addr := fmt.Sprintf(`localhost:%d`, port)
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc(`/`, failbackHandle)
|
||||
|
||||
s := &http.Server{
|
||||
Addr: addr,
|
||||
Handler: mux,
|
||||
ReadTimeout: 30 * time.Second,
|
||||
WriteTimeout: 30 * time.Second,
|
||||
IdleTimeout: 30 * time.Second,
|
||||
}
|
||||
|
||||
zj.J(`start web server`, addr)
|
||||
|
||||
s.ListenAndServe()
|
||||
}
|
||||
|
||||
func failbackHandle(w http.ResponseWriter, r *http.Request) {
|
||||
zj.J(`failback handle`, r.URL.String())
|
||||
}
|
||||
48
server/src/zj/init.go
Normal file
48
server/src/zj/init.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package zj
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"project/config"
|
||||
|
||||
"github.com/zhengkai/zog"
|
||||
)
|
||||
|
||||
// Init ...
|
||||
func Init() {
|
||||
|
||||
mainCfg := zog.NewConfig()
|
||||
mainCfg.Caller = zog.CallerLong
|
||||
|
||||
infoCfg := mainCfg.Clone()
|
||||
infoCfg.Color = zog.ColorInfo
|
||||
infoCfg.LinePrefix = `[IO] `
|
||||
|
||||
debugCfg := mainCfg.Clone()
|
||||
debugCfg.Color = zog.ColorLight
|
||||
debugCfg.LinePrefix = `[Debug] `
|
||||
|
||||
errCfg := zog.NewErrConfig()
|
||||
errCfg.Color = zog.ColorWarn
|
||||
errCfg.LinePrefix = `[Error] `
|
||||
|
||||
baseLog.CDefault = mainCfg
|
||||
baseLog.CDebug = debugCfg
|
||||
baseLog.CInfo = infoCfg
|
||||
baseLog.CError = errCfg
|
||||
baseLog.CWarn = errCfg
|
||||
baseLog.CFatal = errCfg
|
||||
|
||||
baseLog.SetDirPrefix(filepath.Dir(zog.GetSourceFileDir()))
|
||||
|
||||
// 生产环境走 docker,不写本地文件
|
||||
if !config.Prod {
|
||||
|
||||
mainFile, _ := zog.NewFile(config.Dir+`/log/default.txt`, false)
|
||||
infoFile, _ := zog.NewFile(config.Dir+`/log/io.txt`, false)
|
||||
errFile, _ := zog.NewFile(config.Dir+`/log/err.txt`, true)
|
||||
|
||||
mainCfg.Output = append(mainCfg.Output, mainFile)
|
||||
infoCfg.Output = append(infoCfg.Output, infoFile)
|
||||
errCfg.Output = append(errCfg.Output, mainFile, errFile)
|
||||
}
|
||||
}
|
||||
36
server/src/zj/log.go
Normal file
36
server/src/zj/log.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package zj
|
||||
|
||||
import "github.com/zhengkai/zog"
|
||||
|
||||
var baseLog = &zog.Logger{}
|
||||
|
||||
// J log
|
||||
var J = baseLog.Println
|
||||
|
||||
// F log printf
|
||||
var F = baseLog.Printf
|
||||
|
||||
// D debug log
|
||||
var D = baseLog.Debugln
|
||||
|
||||
// DF debug printf
|
||||
var DF = baseLog.Debugf
|
||||
|
||||
// W warn log
|
||||
var W = baseLog.Warningln
|
||||
|
||||
// WF warn log
|
||||
var WF = baseLog.Warningf
|
||||
|
||||
// IO ...
|
||||
var IO = baseLog.Infoln
|
||||
|
||||
// IOF ...
|
||||
var IOF = baseLog.Infof
|
||||
|
||||
// Watch ...
|
||||
var Watch = baseLog.WatchStack
|
||||
|
||||
// N log nothing
|
||||
func N(x ...interface{}) {
|
||||
}
|
||||
1
static/.gitignore
vendored
Normal file
1
static/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*
|
||||
Reference in New Issue
Block a user