Production deployment
This example describes production-ready deployment. It depends on running nginx-proxy service (see [Nginx Proxy])
This demo uses 2 example domains: your-demo.example.tld
and api.your-demo.example.tld
.
You should configure your DNS, add 2 hosts and point them to the IP address (A record) or hostname (CNAME record) of the server you’re using for Corteza deployment.
.env
# We'll use this in all variables in docker-compose.yml
DOMAIN=your-demo.example.tld
VERSION=2019.12.0
# Database connection
DB_DSN=corteza:change-me@tcp(db:3306)/corteza?collation=utf8mb4_general_ci
# Secret to use for JWT token
# Make sure you change it (>30 random characters) if
# you expose your deployment to outside traffic
AUTH_JWT_SECRET=this-is-only-for-demo-purpuses--make-sure-you-change-it-for-production
CORREDOR_ADDR=corredor:80
#CORREDOR_LOG_ENABLED=true
#CORREDOR_LOG_LEVEL=trace
#CORREDOR_LOG_PRETTY=true
# SMTP settings
# Point this to your local or external SMTP server
#SMTP_HOST=
#SMTP_USER=
#SMTP_PASS=
SMTP_HOST=smtp-server.example.tld:587
SMTP_USER=postmaster@smtp-server.example.tld
SMTP_USERNAM=postmaster@smtp-server.example.tld
SMTP_PASS=g80jrwoihghwefhweuifhweoiufhweuiofhwuie
SMTP_FROM='"Demo" <info@your-demo.example.tld>'
docker-compose.yaml
version: '3.5'
services:
db:
image: percona:8.0
restart: on-failure
environment:
# To be picked up by percona image when creating the database
# Must match with DB_DSN settings inside .env
MYSQL_DATABASE: corteza
MYSQL_USER: corteza
MYSQL_PASSWORD: change-me
MYSQL_ROOT_PASSWORD: change-me-too
healthcheck: { test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"], timeout: 20s, retries: 10 }
networks: [ internal ]
# Uncomment to use local fs for data persistence
# volumes: [ "./data/db:/var/lib/mysql" ]
server:
image: cortezaproject/corteza-server:${VERSION}
restart: on-failure
env_file: [ .env ]
depends_on: [ db, corredor ]
networks: [ proxy, internal ]
environment:
VIRTUAL_HOST: api.${DOMAIN}
LETSENCRYPT_HOST: api.${DOMAIN}
CORREDOR_API_BASE_URL_COMPOSE: https://api.${DOMAIN}/compose
CORREDOR_API_BASE_URL_MESSAGING: https://api.${DOMAIN}/messaging
CORREDOR_API_BASE_URL_SYSTEM: https://api.${DOMAIN}/system
# Uncomment to use local fs for data persistence
# volumes: [ "./data/server:/data" ]
corredor:
image: cortezaproject/corteza-server-corredor:${VERSION}
networks: [ internal ]
restart: on-failure
env_file: [ .env ]
webapp:
image: cortezaproject/corteza-webapp:${VERSION}
restart: on-failure
depends_on: [ server ]
networks: [ proxy ]
environment:
MONOLITH_API: "true"
VIRTUAL_HOST: ${DOMAIN}
LETSENCRYPT_HOST: ${DOMAIN}
networks:
internal: {}
proxy: { external: true }
Create an empty directory, with .env
and docker-compose.yaml
files and copy contents from the examples above.
Some operating systems do not like files that start with a dot so make sure .env
file is properly named.
We advise against merging/mixing Corteza and It can be done but requires some experience with Docker Compose. |
Make sure your nginx-proxy service is running before running. If nginx-proxy service is not started or you changed your configuration somehow, you might get error like:
ERROR: Network proxy declared as external, but could not be found. Please create the network manually using `docker network create proxy` and try again.
Inspect your configuration files and compare them with ones provied in this documentation.
docker-compose up -d
docker-compose ps
should produce something like: Name Command State Ports
-------------------------------------------------------------------------------------------
production_corredor_1 docker-entrypoint.sh node ... Up 80/tcp
production_db_1 /docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
production_server_1 /bin/corteza-server serve-api Up 80/tcp
production_webapp_1 /entrypoint.sh Up 80/tcp
You can see 4 services up and running. Your services should soon (under a couple of minutes) be available on the configured domains.
Direct your browser to http://your-demo.example.tld
.
On first visit, you should be redirected to /auth
where you can login, sign up, etc.
Create your account through the sign-up form. Corteza detects if the database is empty and auto-promotes first user to administration role.
docker-compose rm --force --stop -v
Other useful docker-compose commands:
docker-compose logs --follow --tail 20