docker-compose에서 Nginx+Gunicorn+Flask+MariaDB+phpMyAdmin

즉시 사용할 수 있는 환경을 원했고 docker-compose를 사용하여 Nginx-(Gunicorn-Flask)-MariaDB-phpMyAdimn(4개의 컨테이너가 기동)의 환경을 작성했습니다.

예정목차



어디까지나 예정입니다만 이번 구축한 환경을 사용해 만들어 보려고 생각합니다.
1. 환경 구축 ※본 기사
2. Flask+RoboBrowser로 스크래핑한 결과를 Bootstrap(honoka)으로 표시
3. flask-sqlalchemy 사용 (MariaDB와 연결)
4. flask-login 사용 (로그인 기능 구현)

참고 자료



아래의 기사의 조합으로 작성하고 있습니다.
매우 도움이되었습니다. 이 자리를 빌려 감사드립니다.
· Compose file version3 참조
※docker-compose.yml의 depends_on이나 env_file등 파라미터에 대해서 참고로 했습니다.

· docker-compose에서 gunicorn+nginx+flask를 움직여 본 이야기
※nginx+gunicorn+flask 부분을 그대로 이용하였습니다.
변경 사항: nginx의 default.conf를 다음과 같이 변경하지 않으면 시작할 수 없습니다.

default.conf
  server_name  web:5000;

· docker-compose로 MySQL 환경을 쉽게 구축
※초기 테이블 작성 부분에서 참고로 했습니다.
※phpmyadmin 부분의 구축에 이용하였습니다.

· gunicorn에서 Python 웹 애플리케이션을 실행하자.
※Gunicorn의 기동 방법에 대해서 참고로 했습니다.

· 혼다 다카시 씨가 "Flask를 처음부터 잘 이해하는 책 : 파이썬으로 만드는 웹 응용 프로그램 개발 시작"Kindle 버전.
※파일 분할의 방법을 참고로 했습니다.

환경



호스트 OS: CentOS Linux release 7.6.1810 (Core)
Docker version 18.09.7, build 2d0083d
docker-compose version 1.24.0, build 0aa59064
git 버전 2.9.5

컨테이너 웹에 설치할 모듈



빌드 시 자동 설치됩니다. 그 밖에 필요한 것이 있으면 requirements.txt에 추기하면 OK입니다.

requirements.txt
Flask==1.1.1
Flask-SQLAlchemy==2.4.0 ※
gunicorn==19.9.0
PyMySQL==0.9.3 ※
SQLAlchemy==1.3.5 ※

※이번은 사용하고 있지 않습니다만 나중에 사용하기 위해서 인스톨하고 있습니다.

출처



htps : // 기주 b. 코 m / k7679 / ngin x-f ぁsk 마리아

디렉토리 구성


.
├── db
│   ├── Dockerfile
│   ├── backup
│   │   └── init.sql ※DBの初期化用ファイル
│   └── conf.env  ※DBの設定ファイル
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   ├── default.conf
│   ├── log
│   │   ├── access.log
│   │   └── error.log
│   └── nginx.conf
├── phpmyadmin
│   ├── Dockerfile
│   └── conf.env ※宛先データベース記載
└── web
    ├── Dockerfile
    ├── application
    │   ├── __init__.py  ※アプリケーション本体ファイル
    │   └── views.py
    ├── requirements.txt ※追加pythonのモジュール記載
    └── startup.py  ※アプリケーション起動ファイル

docker-compose.yml


  • 타임존을 일본에 ※1
  • 데이터베이스 초기화시 init.sql에서 sample01과 test_table을 작성. ※ 2
  • 데이터베이스 ID/pass는 conf.env를 다시 작성하십시오. ※ 3
  • nginx 및 phpmyadmin 포트는 사용 환경에 맞게 변경하십시오. ※ 4
  • 데이터베이스의 데이터를 영속화 ※5

  • docker-compose.yml
    version: '3'
    services:
    
      web:
        build: ./web
        container_name: web01
        expose:
          - 5000
        depends_on:
          - db
        networks:
          - test_network
    
      nginx:
        build: ./nginx
        container_name: nginx01
        ports:
          - 8889:80 ※4
        depends_on:
          - web
        environment:  ※1
          - "TZ=Japan"
        restart: always
        networks:
          - test_network
        volumes:
          - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
          - ./nginx/log:/var/log/nginx
    
      db:
        build: ./db
        container_name: db01
        volumes:
          - test_db_data:/val/lib/mysql ※5
          - ./db/backup:/docker-entrypoint-initdb.d ※2
        env_file:
          - ./db/conf.env ※3
        environment:  ※1
          - "TZ=Japan"
        restart: always
        networks:
          - test_network
    
    phpmyadmin:
        build: ./phpmyadmin
        container_name: phpmyadmin01
        env_file:
          - ./phpmyadmin/conf.env
        depends_on:
          - db
        ports:
          - 8888:80 ※4
        networks:
          - test_network
    
    volumes:
        test_db_data: {} ※5
    
    networks:
      test_network:
        driver: bridge
    
    

    동작 확인



    \$ git clone htps : // 기주 b. 이 m/k k7679/응진 x-fぁsk 마리아. 기 t
    \$cd nginx-flask-maria
    \$docker-compose up -d --build
    \$docker-compose ps


    http://[Docker 호스트 주소]:8889


    http://[Docker 호스트 주소]:8888


    phpMyAdmin 인증에 대한 보충

    /etc/phpmyadmin/config.inc.php
    ###途中省略###
       if (isset($_ENV['PMA_USER'])) {
            $cfg['Servers'][$i]['auth_type'] = 'config';
            $cfg['Servers'][$i]['user'] = $_ENV['PMA_USER'];
            $cfg['Servers'][$i]['password'] = isset($_ENV['PMA_PASSWORD']) ? $_ENV['PMA_PASSWORD'] : '';
        } else {
            $cfg['Servers'][$i]['auth_type'] = 'cookie';
        }
    ###途中省略###
    

    위와 같이 구성 파일을 확인하면 PMA_USER를 conf.env로 설정하면 인증 화면이 표시되지 않습니다.
    (auth_type이 config가 됨)
    그 때문에 「 docker-compose로 MySQL 환경을 쉽게 구축 」에서는 PMA_USER, PMA_PASSWORD를 세트 하고 있습니다만 이번은 삭제했습니다.
    루트 로그인은 금지되어 있지 않습니다. db의 conf.env에서 설정한 ID/PASS로 로그인할 수 있습니다.
    또한 서버에 [db]를 입력합니다. (db 컨테이너가 대상 서버를 위해)

    좋은 웹페이지 즐겨찾기