This gateway owns ports 80 and 443 for all projects on this server.
It routes traffic to 4 different containers:
tools.hashtax.io->hashtax_frontend:3000tools-api.hashtax.io->hashtax_backend:5000hashimpact.io->hashimpact_frontend:8081api.hashimpact.io->hashimpact_backend:8080
Make sure the shared Docker network exists before starting any app:
docker network create hashtax_networkStart the app containers from their respective folders:
cd "$REMOTE_BASE_DIR/hash_tax/hashtax_tools_fe"
docker compose up -d --build
cd "$REMOTE_BASE_DIR/hash_tax/hashtax_be"
docker compose up -d --build
cd "$REMOTE_BASE_DIR/HashImpact/website"
docker compose up -d --build frontend
cd "$REMOTE_BASE_DIR/HashImpact/backend"
docker compose up -d --build backendHashImpact is split into service-owned compose files:
HashImpact/website/docker-compose.ymlownshashimpact_frontend.HashImpact/backend/docker-compose.ymlownshashimpact_backend.- Both services must stay attached to the external
hashtax_networkand keep these aliases, because the gateway routes tohashimpact_frontend:8081andhashimpact_backend:8080.
Go to this nginx_gateway folder:
cd "$REMOTE_BASE_DIR/nginx_gateway"Run the automated script to issue all SSL certificates. This script will:
- Start Nginx in HTTP-only mode to pass the ACME challenges.
- Use Certbot to fetch certificates for all domains.
- Automatically activate the HTTPS
.ssl.conf.disabledtemplates. - Reload Nginx.
bash issue_all_ssl.sh hello@hashtax.ioTo make sure your SSL certificates renew automatically, add this to your live server's cron jobs:
crontab -eAdd this line at the bottom to run the renewal check every day at 3 AM:
0 3 * * * cd "$REMOTE_BASE_DIR/nginx_gateway" && bash renew_ssl.sh >> /var/log/ssl_renew.log 2>&1
conf.d/hashimpact.confandconf.d/tools.confare the active configs.conf.d/*.http.conf.disabledare HTTP-only templates used for first-time ACME challenges.conf.d/*.ssl.conf.disabledare the HTTPS templates thatissue_all_ssl.shautomatically copies and activates.00-resolver.confhelps Nginx dynamically resolve container IPs when containers restart.