diff --git a/conf/mime.types b/conf/mime.types new file mode 100644 index 00000000..62bd4b66 --- /dev/null +++ b/conf/mime.types @@ -0,0 +1,48 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + application/x-javascript js; + text/plain txt; + text/x-component htc; + text/mathml mml; + image/png png; + image/x-icon ico; + image/x-jng jng; + image/vnd.wap.wbmp wbmp; + application/java-archive jar war ear; + application/mac-binhex40 hqx; + application/pdf pdf; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/zip zip; + application/octet-stream deb; + application/octet-stream bin exe dll; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + audio/mpeg mp3; + audio/x-realaudio ra; + video/mpeg mpeg mpg; + video/quicktime mov; + video/x-flv flv; + video/x-msvideo avi; + video/x-ms-wmv wmv; + video/x-ms-asf asx asf; + video/x-mng mng; +} \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf new file mode 100644 index 00000000..101c31f0 --- /dev/null +++ b/conf/nginx.conf @@ -0,0 +1,45 @@ +#user www www; ## Default: nobody +worker_processes 5; ## Default: 1 +error_log logs/error.log; +pid logs/nginx.pid; +worker_rlimit_nofile 8192; + +events { + worker_connections 4096; ## Default: 1024 +} + + +http { + include conf/mime.types; + #include /etc/nginx/proxy.conf; + #include /etc/nginx/fastcgi.conf; + index index.html index.htm index.php; + + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] $status ' + '"$request" $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log logs/access.log main; + sendfile on; + tcp_nopush on; + server_names_hash_bucket_size 128; # this seems to be required for some vhosts + + + upstream balsam { + server gunicorn1:8001 weight=5; + server gunicorn2:8002 weight=5; + } + + server { # simple load balancing + listen 80; + server_name localhost; + access_log logs/balsam.access.log main; + + location / { + proxy_pass http://balsam; + + include uwsgi_params; + } + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 3c22c339..28447768 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,51 @@ version: "3.9" services: - gunicorn: - container_name: gunicorn + nginx: + image: nginx:latest + container_name: nginx + depends_on: + - gunicorn1 + - gunicorn2 + volumes: + - ./conf/nginx.conf:/etc/nginx/nginx.conf + - ./conf/mime.types:/etc/nginx/conf/mime.types + - ./logs:/etc/nginx/logs + ports: + - 80:80 + - 443:443 + + gunicorn1: + container_name: gunicorn1 + build: . + image: masalim2/balsam + restart: always + ports: + - 8001:8001 + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_started + # Vars in env_file are exported to the containers + # Vars in ".env" specifically are also usable in the compose file as ${VAR} + env_file: ".env" + environment: + SERVER_PORT: 8001 + BALSAM_LOG_DIR: ${BALSAM_LOG_DIR} + volumes: + - "${BALSAM_LOG_DIR}:/balsam/log" + - "./balsam:/balsam/balsam:ro" + - "./tests:/balsam/tests:ro" + - "${PWD}/${GUNICORN_CONFIG_FILE}:/balsam/gunicorn.conf.py:ro" # Must be abs path + + gunicorn2: + container_name: gunicorn2 build: . image: masalim2/balsam restart: always ports: - - ${SERVER_PORT}:${SERVER_PORT} + - 8002:8002 depends_on: postgres: condition: service_healthy @@ -17,7 +55,7 @@ services: # Vars in ".env" specifically are also usable in the compose file as ${VAR} env_file: ".env" environment: - SERVER_PORT: ${SERVER_PORT} + SERVER_PORT: 8002 BALSAM_LOG_DIR: ${BALSAM_LOG_DIR} volumes: - "${BALSAM_LOG_DIR}:/balsam/log" @@ -36,7 +74,7 @@ services: POSTGRES_PASSWORD: postgres POSTGRES_DB: balsam volumes: - - "pgdata:/var/lib/postgresql/data" + - "balsamdata:/var/lib/postgresql/data" command: "-c log_min_duration_statement=0" logging: options: @@ -57,4 +95,4 @@ services: - 6379:6379 volumes: - pgdata: + balsamdata: