在编程语言中环境变量与配置是相辅相成的。不同环境加载不同的配置成为了必需品。
配置文件不是嵌入的,不会加入配置文件。
sh复制代码set GO_ENV=production myapp.exe
#!/bin/bash
export GO_ENV=test && ./myapp
适合在开发环境:
sh复制代码go get -u github.com/joho/godotenv
sh复制代码touch config.yml # config/config.yml
yml复制代码server:
port: 8090
db:
user: admin
password: secret
url: 'https://db'
配置并使用
sh复制代码package main
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
println("hello world!")
GetConfig()
}
func GetConfig() {
viper.SetConfigName("config")
viper.SetConfigType("yml")
viper.AddConfigPath("./config")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("Fatal Error config: file: %w \n", err))
}
fmt.Println("Server Port: ", viper.GetInt("server.port"))
fmt.Println("Database User: ", viper.GetString("db.user"))
}
systemd
systemd
是一套用于启动和管理系统进程的系统和服务管理器。
systemd
能够通过 systemctl
和 配置文件
对服务进行控制:
/etc/systemd/system/
目录下。systemctl
命令,以下是一些常用的命令命令 | 作用 |
---|---|
sudo systemctl start <unit> | 启动指定的服务或其他 unit |
sudo systemctl stop <unit> | 停止指定的服务或其他 unit |
sudo systemctl restart <unit> | 重启指定的服务或其他 unit |
sudo systemctl reload <unit> | 重新加载指定的服务配置 |
sudo systemctl enable <unit> | 启用服务开机自启动 |
sudo systemctl disable <unit> | 禁用服务开机自启动 |
sudo systemctl status <unit> | 查看指定服务或其他 unit 的状态 |
sudo systemctl daemon-reload | 重新加载 systemd 管理器配置 |
ini复制代码[Unit]
Description=My App Service
After=network.target
[Service]
ExecStart=/path/to/myapp
ExecReload=/path/to/myapp reload
ExecStop=/path/to/myapp stop
Restart=always
Environment="GO_ENV=production"
EnvironmentFile=-/etc/myapp/env
[Install]
WantedBy=multi-user.target
配置文件是一个 ini
文件。Service
下的 Environment
/EnvironmentFile
配置环境变量相关的内容。
Dockerfile复制代码FROM golang:1.16
ENV GO_ENV=production
ENV DATABASE_URL=postgres://user:password@localhost:5432/proddb
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o myapp .
EXPOSE 8080
CMD ["./myapp"]
compose复制代码version: '3'
services:
myapp:
image: myapp:latest
environment:
- GO_ENV=production
- DATABASE_URL=postgres://user:password@db:5432/proddb
ports:
- "8080:8080"
yaml复制代码apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: GO_ENV
value: "production"
- name: DATABASE_URL
value: "postgres://user:password@db:5432/proddb"
ports:
- containerPort: 8080
本文主要介绍 go 中项目环境变量和配置文件处理方式,环境变量可以通过系统级配置,可以通过 env 配置,在环境多采用 docker 等配置进行配置。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。