Skip to content

Commit c066404

Browse files
committed
fix: 更新 docker-compose 配置,加载 .env 文件并修复 MongoDB 连接字符串
1 parent e945e0b commit c066404

File tree

5 files changed

+109
-6
lines changed

5 files changed

+109
-6
lines changed

docker-compose.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ services:
33
app:
44
build: .
55
restart: unless-stopped
6+
7+
extra_hosts:
8+
- "host.docker.internal:host-gateway"
69
env_file:
7-
- .env
8-
environment:
9-
- MONGO_URI=mongodb://${MONGO_USER}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}
10+
- /app/.env
1011
ports:
1112
- "8080:8080"
1213
volumes:

docs/MongoDB/MONGODB_SETUP.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
## Mongo Express 配置说明
2+
3+
以下为 `mongo-express` 的 docker-compose 配置示例,并对每一项进行了详细注释:
4+
5+
```yaml
6+
networks:
7+
1panel-network: # 指定使用的外部网络,便于与其他服务通信
8+
external: true
9+
services:
10+
mongo-express:
11+
container_name: ${CONTAINER_NAME} # 容器名称,可通过环境变量自定义
12+
deploy:
13+
resources:
14+
limits:
15+
cpus: ${CPUS} # 限制容器可用的 CPU 数量
16+
memory: ${MEMORY_LIMIT}# 限制容器可用的内存大小
17+
environment:
18+
ME_CONFIG_BASICAUTH: true # 启用基本认证,防止未授权访问
19+
ME_CONFIG_BASICAUTH_PASSWORD: ${BASICAUTH_PASSWORD} # 访问 mongo-express 的密码
20+
ME_CONFIG_BASICAUTH_USERNAME: ${BASICAUTH_USERNAME} # 访问 mongo-express 的用户名
21+
ME_CONFIG_MONGODB_URL: mongodb://${PANEL_DB_ROOT_USER}:${PANEL_DB_ROOT_PASSWORD}@${MONGO_HOST}:27017 # 连接 MongoDB 的 URL,包含用户名、密码和主机(数据库服务)
22+
image: mongo-express:1.0.2-20 # 使用的 mongo-express 镜像及版本
23+
labels:
24+
createdBy: Apps # 自定义标签,可用于标识容器用途
25+
networks:
26+
- 1panel-network # 连接到指定的网络
27+
ports:
28+
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:8081 # 将主机端口映射到容器 8081 端口
29+
restart: on-failure:5 # 失败时自动重启,最多重启 5 次
30+
```
31+
32+
> **说明**:
33+
>
34+
> - 请根据实际环境设置各个 `${}` 变量的值。
35+
> - `mongo-express` 是一个可视化 MongoDB 管理工具,适合开发和测试环境使用。
36+
>
37+
# MongoDB 快速指南
38+
39+
## 1. env 配置
40+
41+
**作用:** 存储 MongoDB 连接信息,避免硬编码敏感数据
42+
43+
```dotenv
44+
# MongoDB 连接字符串(包含用户名、密码、主机地址)
45+
# host.docker.internal 用于 Docker 容器访问宿主机 MongoDB
46+
MONGO_URI=mongodb://username:password@host.docker.internal:27017
47+
48+
# 数据库名称 - 博客项目使用的数据库
49+
DB_NAME=blogs-db
50+
51+
# 集合名称 - 数据库中的表,存储博客文档
52+
COLLECTION_NAME=blogs-db-dev
53+
```
54+
55+
## 2. 初始化指令
56+
57+
**作用:** 在 MongoDB 中创建数据库和集合,初始化项目
58+
59+
```javascript
60+
// 连接到 MongoDB 服务(使用实际的用户名和密码)
61+
mongosh "mongodb://localhost:27017" --username <user> --password <pwd>
62+
63+
// 切换到 blogs-db 数据库(不存在则自动创建)
64+
use blogs-db;
65+
66+
// 插入初始文档,同时创建 blogs-db-dev 集合
67+
db["blogs-db-dev"].insertOne({test: "init"});
68+
69+
// 验证集合已创建
70+
show collections;
71+
72+
// 退出 mongosh
73+
.exit
74+
```
75+
76+
## 3. Go 代码使用
77+
78+
**作用:** 在后端代码中连接和操作 MongoDB 数据库
79+
80+
```go
81+
// 第一步:连接 MongoDB 服务
82+
// 使用 .env 中的 MONGO_URI,包含认证信息
83+
client, _ := mongo.Connect(ctx, options.Client().ApplyURI(os.Getenv("MONGO_URI")))
84+
85+
// 第二步:获取数据库对象
86+
// DB_NAME = "blogs-db"
87+
db := client.Database(os.Getenv("DB_NAME"))
88+
89+
// 第三步:获取集合对象
90+
// COLLECTION_NAME = "blogs-db-dev",相当于传统数据库中的表
91+
collection := db.Collection(os.Getenv("COLLECTION_NAME"))
92+
93+
// 第四步:执行数据库操作
94+
collection.Find(ctx, filter) // 查询数据
95+
collection.InsertOne(ctx, doc) // 插入单条数据
96+
collection.UpdateOne(ctx, filter, update) // 更新数据
97+
collection.DeleteOne(ctx, filter) // 删除数据
98+
```

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111

1212
require (
1313
github.com/golang/snappy v0.0.1 // indirect
14+
github.com/joho/godotenv v1.5.1 // indirect
1415
github.com/klauspost/compress v1.13.6 // indirect
1516
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
1617
github.com/xdg-go/pbkdf2 v1.0.0 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
88
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
99
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
1010
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
11+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
12+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
1113
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
1214
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
1315
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=

main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ import (
1414
"blog/services"
1515

1616
"github.com/gorilla/mux"
17+
"github.com/joho/godotenv"
1718
"go.mongodb.org/mongo-driver/mongo"
1819
"go.mongodb.org/mongo-driver/mongo/options"
1920
)
2021

2122
func main() {
23+
// 加载挂载的 .env 文件
24+
_ = godotenv.Load("/app/.env") // 不存在时忽略,优先环境变量
2225
// 从环境变量读取配置,若未设置使用默认值
2326
mongoURI := getEnv("MONGO_URI", "mongodb://localhost:27017")
24-
// MongoDB 数据库名称
2527
dbName := getEnv("DB_NAME", "blogs-db-dev")
26-
// MongoDB 集合名称
2728
collectionName := getEnv("COLLECTION_NAME", "blogs-db")
2829

2930
// 连接到 MongoDB
@@ -51,7 +52,7 @@ func main() {
5152
blogService := services.NewBlogService(client, dbName, collectionName)
5253

5354
// 初始化认证服务
54-
jwtSecret := getEnv("JWT_SECRET", "your-secret-key") // 在生产环境中请通过环境变量注入
55+
jwtSecret := getEnv("JWT_SECRET", "default-jwt-secret") // 在生产环境中请通过环境变量注入
5556
authService := services.NewAuthService(client, dbName, "users", jwtSecret)
5657

5758
// 初始化处理器

0 commit comments

Comments
 (0)