我有一个Rails API和React前端应用程序,我想在DigitalOcean中部署。
结构如下所示:
|- api/
|- front/
|- docker-compose.yml
所以当我跑步的时候
docker compose up
所有的集装箱都造好了。
我的
docker-compose.yml
看起来是这样的:
version: "3.8"
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-user}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
api:
build:
context: ./api/
dockerfile: Dockerfile
command: /bin/sh -c "rm -f /myapp-api/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- "3000:3000"
volumes:
- ./api:/myapp-api
environment:
TZ: Asia/Tokyo
RAILS_ENV: ${RAILS_ENV:-development}
DEVISE_JWT_SECRET_KEY: ${DEVISE_JWT_SECRET_KEY}
GMAIL_SMTP_USER: ${GMAIL_SMTP_USER}
GMAIL_SMTP_PASSWORD: ${GMAIL_SMTP_PASSWORD}
APP_NAME: ${APP_NAME}
REDIS_URL: ${REDIS_URL}
SHOP_FRONTEND_URL: ${SHOP_FRONTEND_URL}
API_DATABASE_PASSWORD: ${API_DATABASE_PASSWORD}
depends_on:
- db
- redis
front:
build:
context: ./front/
dockerfile: Dockerfile
command: sh -c "cd myapp-front && npm install && npm start"
ports:
- "3001:3000"
volumes:
- ./front:/usr/src/app
environment:
REACT_APP_API_URL: ${REACT_APP_API_URL}
redis:
image: redis
command: redis-server
ports:
- "6379:6379"
sidekiq:
build:
context: ./api/
dockerfile: Dockerfile
command: bundle exec sidekiq
volumes:
- ./api:/myapp-api
environment:
REDIS_URL: ${REDIS_URL}
GMAIL_SMTP_USER: ${GMAIL_SMTP_USER}
GMAIL_SMTP_PASSWORD: ${GMAIL_SMTP_PASSWORD}
APP_NAME: ${APP_NAME}
SHOP_FRONTEND_URL: ${SHOP_FRONTEND_URL}
SHOP_API_URL: ${SHOP_API_URL}
depends_on:
- db
- redis
访问时在本地运行良好
http://localhost:3001
在dev和prod环境中。
现在,我在DigitalOcean的一个液滴中部署了该应用程序。url现在看起来是这样的:
http://<public ipv4 of droplet>:3001
所以我更新了
.env
相应地归档。
我还更新了防火墙。它看起来是这样的:
Status: active
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
2375/tcp ALLOW Anywhere
2376/tcp ALLOW Anywhere
3000/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
3001/tcp ALLOW Anywhere
22/tcp (v6) LIMIT Anywhere (v6)
2375/tcp (v6) ALLOW Anywhere (v6)
2376/tcp (v6) ALLOW Anywhere (v6)
3000/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
3001/tcp (v6) ALLOW Anywhere (v6)
但是,当我尝试在浏览器中访问它时,如:
http://<液滴的公共ipv4>:3001
它不起作用。我做错了什么?
注意:
不过我可以访问sidekiq:
http://<public ipv4 of droplet>:3000/sidekiq
非常感谢。