Docker برای فینچ

فینچ برای استقرار با Docker طراحی شده است. این راهنما یک پیکربندی کامل Docker را پوشش می‌دهد.

Dockerfile

FROM dart:stable AS build

WORKDIR /app
COPY pubspec.* ./
RUN dart pub get

COPY . .
RUN dart compile exe bin/finch.dart -o bin/server

FROM debian:bullseye-slim

WORKDIR /app
COPY --from=build /app/bin/server ./bin/server
COPY --from=build /app/public ./public
COPY --from=build /app/lib/views ./lib/views
COPY --from=build /runtime/ /runtime/

RUN chmod +x bin/server

EXPOSE 8080
CMD ["./bin/server"]

docker-compose.yaml

version: '3.8'

services:
  finch:
    build: .
    ports:
      - "8080:8080"
    environment:
      APP_ENV: production
      MONGODB_HOST: mongodb
      MONGODB_PORT: 27017
      MONGODB_DATABASE: myapp
      MYSQL_HOST: mysql
      MYSQL_PORT: 3306
      MYSQL_DATABASE: myapp
      MYSQL_USER: app_user
      MYSQL_PASS: secret
    depends_on:
      - mongodb
      - mysql

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - finch

  mongodb:
    image: mongo:6
    volumes:
      - mongo_data:/data/db
    environment:
      MONGO_INITDB_DATABASE: myapp

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootsecret
      MYSQL_DATABASE: myapp
      MYSQL_USER: app_user
      MYSQL_PASSWORD: secret
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mongo_data:
  mysql_data:

متغیرهای محیطی

متغیر توضیح
APP_ENV local یا production
MONGODB_HOST hostname سرویس MongoDB
MONGODB_DATABASE نام پایگاه داده MongoDB
MYSQL_HOST hostname سرویس MySQL
MYSQL_DATABASE نام پایگاه داده MySQL
MAIL_HOST سرور SMTP

اجرا

# بیلد و اجرا
docker-compose up --build

# اجرا در پس‌زمینه
docker-compose up -d

# مشاهده لاگ‌ها
docker-compose logs -f finch