我正在打包我的应用程序并尝试将其部署到我的服务器上。
我已经在我的服务器 MySQL 上安装并运行了一个数据库,并且我有一个 Express Node.js 应用程序想要与该数据库进行通信。
Express 应用程序将在 Docker 容器内工作,Dockerfile 是这样的:
FROM node:20-alpine
COPY . /app
WORKDIR /app
EXPOSE 3001
CMD npm install && npm run build && npm run start
这是我的
.env
文件,我用它来读取环境变量:
DATABASE_HOST= "localhost" # string ex: localhost | ip
DATABASE_PORT= 3306 # number
DATABASE_NAME= "mydatabase" # string
DATABASE_USERNAME= "myuser" # string
DATABASE_PASSWORD= "mypassword" # string
我使用
docker compose
来运行我的 Docker 容器,因为我有前端:
$ docker compose up
这是我的
docker-compose.yml
文件:
services:
webadmin:
build: ./web
ports:
- 3000:3000
api:
build: ./api
ports:
- 3001:3001
我对我的
.env
文件进行了以下编辑,首先,我将主机设置为我的公共服务器 IP 地址:
HOST= "96.xxx.xxx.xxx" // the public ip
数据库主机是本地主机:
DATABASE_HOST= "localhost"
并且在
docker-compose
文件中,我使用了 network_mode
选项:
services:
webadmin:
build: ./web
ports:
- 3000:3000
api:
build: ./api
ports:
- 3001:3001
network_mode: host # <<<<<<<<<<<<<< here
现在,从 API 容器的角度来看,localhost 就像是服务器本身(主机)上的 localhost。
现在它可以工作了,我的 API 服务可以与数据库通信,并且现在已向互联网公开。