編譯
編譯命令
Goravel 專案可以透過以下命令編譯:
// 選擇要編譯的系統
go run . artisan build
// 指定要編譯的系統
go run . artisan build --os=linux
go run . artisan build -o=linux
// 靜態編譯
go run . artisan build --static
go run . artisan build -s
// 指定輸出檔案名稱
go run . artisan build --name=goravel
go run . artisan build -n=goravel
手動編譯
常規編譯
shell
go build .
部署伺服器
部署時需要將下列檔案與資料夾上傳至伺服器:
./main // 編譯生成的二進位檔
.env
./public
./storage
./resources
靜態編譯
常規編譯後的包還需要依賴部署環境的支持,靜態編譯出的檔案可以自由放到指定平台下運行,不需要環境配置。
shell
go build --ldflags "-extldflags -static" -o main .
交叉編譯
編譯有平台區分,需要根據部署情況,選擇匹配的編譯方式。
shell
// 編譯 Linux 環境
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build .
// 編譯 Windows 環境
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build .
// 編譯 Mac 環境
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build .
Docker
Goravel 預設自帶 Dockerfile
與 docker-compose.yml
檔案,可以直接使用,注意此時 APP_HOST
應為 0.0.0.0
。
shell
docker build .
如果你遇到下載依賴較慢與時區問題,你可以像下面的腳本一樣優化 Dockerfile 內容:
dockerfile
# 中國特別
FROM golang:alpine AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOARCH="amd64" \
GOOS=linux \
GOPROXY=https://goproxy.cn,direct
WORKDIR /build
COPY . .
RUN go mod tidy
RUN go build --ldflags "-extldflags -static" -o main .
FROM alpine:latest
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
WORKDIR /www
COPY --from=builder /build/main /www/
COPY --from=builder /build/database/ /www/database/
COPY --from=builder /build/public/ /www/public/
COPY --from=builder /build/storage/ /www/storage/
COPY --from=builder /build/resources/ /www/resources/
COPY --from=builder /build/.env /www/.env
ENTRYPOINT ["/www/main"]
Docker Compose
你也可以使用以下命令快速啟動服務:
shell
docker-compose build
docker-compose up
注意:如需外部訪問,需要將 APP_HOST 改為 0.0.0.0
設置時區
當 app.timezone
配置中非 UTC
時區時,在編譯時需要將時區設置到應用中。 你可以選擇以下三種方式中的任何一種:
- 在 Dockerfile 中添加時區設置
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
- 在編譯時設置時區
go build -tags timetzdata .
- 在
main.go
中導入時區
shell
import (
_ "time/tzdata"
)
減小打包體積
將 config/app.go::providers
中未用到的 ServiceProvider
注釋掉將能有效地減少打包體積。