Files
server-mv/docker-compose.yml

1298 lines
45 KiB
YAML

#version: "3.9"
networks:
dockernet:
external: true
name: dockernet
# dockernet_stun:
# external: true
# name: dockernet_stun
services:
pihole:
# user: 1000:1000
container_name: pihole
# dns_opt:
# - ndots:15
deploy:
resources:
limits:
memory: 512M
hostname: dns-dcr.lua.net
build:
context: ./docker-pi-hole/src
# image: pihole/pihole:nightly
networks:
dockernet:
ipv4_address: 10.15.0.200
ipv6_address: 2001:db8:15::200
environment:
TZ: 'America/Araguaina'
FTLCONF_webserver_api_password: '34641747'
FTLCONF_dns_upstreams: '8.8.8.8;8.8.4.4;1.1.1.1;189.38.95.95;208.67.220.220'
FTLCONF_webserver_port: '80'
VIRTUAL_HOST: 'dns-cloud.doninet.net'
FTLCONF_dns_dnssec: 'true'
volumes:
- './docker/pi-hole/etc-pihole/:/etc/pihole/'
- './docker/pi-hole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
- '/var/run/docker.sock:/tmp/docker.sock:ro'
dns:
- 8.8.8.8
- 8.8.4.4
- 208.67.222.222
- 1.1.1.1
restart: unless-stopped
cap_add:
- NET_ADMIN
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
zabbix-server:
#user: 1000:1000
image: zabbix/zabbix-server-mysql:alpine-latest
container_name: zabbix-server
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./docker/zabbix:/etc/zabbix
environment:
- DB_SERVER_HOST=10.15.0.42
- MYSQL_USER=root
- MYSQL_PASSWORD=34641747
networks:
dockernet:
ipv4_address: 10.15.0.66
ipv6_address: 2001:db8:15::66
deploy:
resources:
limits:
memory: 512M
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
# docker-compose para frontend do zabbix server 4.0 (mysql) em php, utilizando como base nginx. Da mesma forma, utiliza macvlan para se conectar à rede.
zabbix-web-nginx-mysql:
#user: 1000:1000
image: zabbix/zabbix-web-nginx-mysql:alpine-latest
restart: always
container_name: zabbix-web
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
environment:
- DB_SERVER_HOST=10.15.0.42
- MYSQL_USER=root
- MYSQL_PASSWORD=34641747
- VIRTUAL_HOST=zabbix.doninet.net
- VIRTUAL_PORT=8080
- ZBX_SERVER_HOST=10.15.0.66
- PHP_TZ=America/Araguaina
networks:
dockernet:
ipv4_address: 10.15.0.215
ipv6_address: 2001:db8:15::215
deploy:
resources:
limits:
memory: 512M
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
mariadb:
#user: 1000:1000
deploy:
resources:
limits:
cpus: '1'
memory: 3G
reservations:
cpus: '0.5'
memory: 1G
image: mariadb:latest
container_name: mariadb
restart: 'always'
networks:
dockernet:
ipv4_address: 10.15.0.42
ipv6_address: 2001:db8:15::42
environment:
MYSQL_ROOT_PASSWORD: 34641747
# command: ['--innodb_read_only_compressed=OFF --innodb_buffer_pool_size=1G --innodb_log_file_size=256M --max_connections=500 --query_cache_size=128M']
command: [
'--innodb_read_only_compressed=OFF',
'--innodb_buffer_pool_size=2G',
'--innodb_log_file_size=256M',
'--max_connections=500',
'--query_cache_size=128M',
'--innodb_flush_log_at_trx_commit=2',
'--innodb_flush_method=O_DIRECT',
'--innodb_io_capacity=1000',
'--innodb_io_capacity_max=2000'
]
volumes:
- /etc/localtime:/etc/localtime:ro
- ./docker/database:/var/lib/mysql
- ./docker/mariadb/mariadb.conf.d/:/etc/mysql/mariadb.conf.d
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=2048
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
advx:
container_name: advx
build: ./advx
networks:
dockernet:
ipv4_address: 10.15.0.124
environment:
- DATABASE_URL=postgresql://advx:102030Rod@postgres:5432/advx
- PUPPETEER_PRODUCT=firefox
- DATABASE_HOST=postgres
- DATABASE_PORT=5432
- DATABASE_USER=advx
- LETSENCRYPT_HOST=advx.martinsevieira.adv.br
- FRONTEND_URL=https://advx.martinsevieira.adv.br
- PUBLIC_URL=https://advx.martinsevieira.adv.br/public
- BACKEND_URL=https://advx.martinsevieira.adv.br/api
- CORS_ORIGIN=https://advx.martinsevieira.adv.br
- DATABASE_PASSWORD=102030Rod
- JWT_SECRET=c05fb5a5ca9c920fc1eb25f264f376c0c45f1eabe081b499e0a5802f605c876b3a971eb33fa04f0032ecfd3d5f118f49309bda919d196ef7382d36c1759cdaccb352744432ae997bf8237f946efaa668a8337e0d4a9945c4b642ab3f40a3173294ec6a8a81d5b456dfe0c1b2f7732d20ac62b5d68be271cdea80fc630ee6f804217312e1265462fff6fd053bdc07317387c9cb50f052a183e0da72e67cfa0ac8e63a3b7a5441efcbbaa982c9db020d56becde8a0c24b15187c49f1639f88b106fb2ed23a38b538aaf6c7e0f6069bf7a3b837e81541867caa9c2fef9c828a58a2f92e91de0a3f522f8059f1c2c2834686ff2a17c003a1406d3ae1ff0ef6be404c
- REDIS_HOST=redis
- REDIS_PORT=6379
- VITE_NEXTCLOUD_URL=https://cloud.martinsevieira.adv.br/remote.php/dav/files/rodrigo/CLIENTES
- VITE_NEXTCLOUD_USER=rodrigo
- VITE_NEXTCLOUD_PASS=34641747
- VITE_TINYMCE_API_KEY=z89f562l976zmlvh8e1ybq89lvosje16hclpx56kor9kajit
- VITE_DATAJUD_API_KEY=cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==
- DATAJUD_API_KEY=cDZHYzlZa0JadVREZDJCendQbXY6SkJlTzNjLV9TRENyQk1RdnFKZGRQdw==
- VITE_API_URL=https://advx.martinsevieira.adv.br/api
depends_on:
- postgres
- redis
volumes:
- ./adv/storage:/usr/src/app/storage
- ./adv/uploads:/usr/src/app/public/uploads
- ./adv/public/uploads:/usr/src/app/public/uploads
- ./adv/logs:/usr/src/app/logs
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA_HOSTNAME=git.doninet.net
- GITEA_WEB_PORT=80
- GITEA_SSH_PORT=22
- GITEA_database_DB_TYPE=mysql
- GITEA__database__HOST=10.15.0.42:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=root
- GITEA__database__PASSWD=34641747
- MYSQL_DATABASE=gitea
- MYSQL_PASSWORD=34641747
- MYSQL_USER=root
- MYSQL_HOST=10.15.0.42
- MYSQL_ROOT_PASSWORD=34641747
volumes:
- ./docker/gitea:/data
restart: unless-stopped
networks:
dockernet:
ipv4_address: 10.15.0.12
ipv6_address: 2001:db8:15::12
deploy:
resources:
limits:
memory: 512M
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
nginx:
build: ./docker-nginx-http3-quictls
# image: nginxproxy/nginx-proxy
container_name: nginx
deploy:
resources:
# cpus:'4' antigo = sem limite real num host de 4 vCPUs (podia
# monopolizar a máquina e faminar PHP-FPM/Node dos outros apps
# sob carga de TLS/QUIC). Proxy reverso não precisa da máquina
# inteira; 2 cores é generoso e deixa margem pros apps.
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.5'
memory: 1G
restart: 'always'
user: root
#user: 1000:1000
# expose:
# - 80
# - 443
# - 22
# ports:
# - "80:80"
# - "443:443"
# - "22:22"
environment:
TZ: "America/Araguaina"
LETSENCRYPT_HOST: "www.giganetto.com.br, brasilianetto.com.br"
networks:
dockernet:
ipv4_address: 10.15.0.45
ipv6_address: 2001:db8:15::45
volumes:
- /etc/localtime:/etc/localtime:ro
# - ./docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./docker/nginx/nextcloud:/var/www/nextcloud
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./docker/nginx/sites:/etc/nginx/conf.d
# - ./docker/nginx/logs:/var/log/nginx
- ./docker/nginx/html:/usr/share/nginx/html
- ./docker/nginx/certs:/etc/nginx/certs:ro
- ./docker/nginx/dhparam:/etc/nginx/dhparam
# - ./docker/nginx/vhost.d:/etc/nginx/vhost.d
- ./docker/nginx/web:/web
- ./docker/nginx/bio:/bio
- ./docker/nginx/giganet:/giganet
- ./docker/nginx/brasilianet:/brasilianet
- /var/run/docker.sock:/tmp/docker.sock:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
# - /var/log/nginx:/var/log/nginx
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=2048
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
cap_add:
# https://man7.org/linux/man-pages/man7/capabilities.7.html
# SYS_ADMIN removido junto com "privileged: true" — praticamente
# equivale a root no host. BPF+NET_ADMIN+PERFMON já cobrem o que o
# sockmap eBPF do nginx (sockhash pinado nos PIDs do nginx) precisa.
# Se algo quebrar (ex: carregar/anexar o programa de dentro do
# container), o passo mais provável que falta é BPF_TOKEN via
# bpffs montado, não SYS_ADMIN de volta.
- BPF
- NET_ADMIN
- PERFMON
acme-companion:
#user: 1000:1000
image: nginxproxy/acme-companion
container_name: acme-companion
restart: always
depends_on:
- nginx
volumes:
- ./docker/nginx/vhost.d:/etc/nginx/vhost.d
- ./docker/nginx/html:/usr/share/nginx/html
- ./docker/nginx/dhparam:/etc/nginx/dhparam
- ./docker/nginx/certs:/etc/nginx/certs
- ./docker/acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NGINX_PROXY_CONTAINER=nginx-gen
networks:
dockernet:
ipv4_address: 10.15.0.74
ipv6_address: 2001:db8:15::74
postgres:
#user: 1000:1000
container_name: postgres
build: ./psql
# image: postgres:16-alpine
volumes:
- ./docker/postgresql:/var/lib/postgresql/data
environment:
- LETSENCRYPT_HOST=bio.martinsevieira.adv.br
- POSTGRES_USER=${POSTGRES_USER:-ticketz}
- POSTGRES_DB=${POSTGRES_DB:-ticketz}
- POSTGRES_HOST_AUTH_METHOD=trust
- TZ=${TZ:-America/Araguaina}
expose:
- 5432
restart: always
networks:
dockernet:
ipv4_address: 10.15.0.54
ipv6_address: 2001:db8:15::54
command: >-
postgres
-c shared_buffers=1GB
-c effective_cache_size=3GB
-c maintenance_work_mem=256MB
-c work_mem=16MB
-c max_parallel_workers_per_gather=2
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=65535
- net.ipv4.tcp_tw_reuse=1
# - net.ipv6.conf.all.disable_ipv6=1
# - net.ipv6.conf.all.forwarding=0
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
deploy:
resources:
limits:
cpus: '1'
memory: 3G
reservations:
cpus: '0.5'
memory: 1G
redis:
#user: 1000:1000
image: redis:7-alpine
# command: redis-server --appendonly yes
container_name: redis
command: >
redis-server
--appendonly yes
--maxmemory 1gb
--maxmemory-policy allkeys-lru
--save 900 1
--save 300 10
--save 60 10000
expose:
- 6379
restart: always
volumes:
- ./docker/redis:/data
networks:
dockernet:
ipv4_address: 10.15.0.55
ipv6_address: 2001:db8:15::55
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
# - net.ipv6.conf.all.disable_ipv6=1
# - net.ipv6.conf.all.forwarding=0
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
nextcloud:
container_name: nextcloud
build: ./nextcloud-docker/app
#user: 1000:1000
dns:
- 10.15.0.200
- 8.8.8.8
- 1.1.1.1
depends_on:
- mariadb
- redis
environment:
# database
- MYSQL_DATABASE=nextcloud
- MYSQL_HOST=10.15.0.42
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=@102030Rod
# redis
- REDIS_HOST=10.15.0.55
- LETSENCRYPT_HOST=cloud.martinsevieira.adv.br
- LETSENCRYPT_EMAIL=rodrigo@martinsevieira.adv.br
healthcheck:
test: ["CMD-SHELL", "php -r 'exit(0);'"]
interval: 60s
timeout: 10s
retries: 3
start_period: 120s
restart: always
volumes:
- ./docker/nginx/nextcloud:/var/www/html
# - ./nextcloud/php:/usr/local/etc/php
- ./nextcloud/scripts:/script
- ./docker/resolv.conf:/etc/resolv.conf:ro
- ./docker/hosts:/etc/hosts:ro
networks:
dockernet:
ipv4_address: 10.15.0.177
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
deploy:
resources:
limits:
memory: 8G
cron:
#user: 1000:1000
container_name: nextcloud-cron
build: ./nextcloud-docker/app/cron
depends_on:
- mariadb
- redis
entrypoint: /cron.sh
restart: always
volumes:
- ./docker/nginx/nextcloud:/var/www/html
networks:
dockernet:
ipv4_address: 10.15.0.178
deploy:
resources:
limits:
memory: 256M
notify-push:
container_name: nextcloud-notify-push
build: ./nextcloud-docker/app
entrypoint: sh -c "until [ -f /var/www/html/custom_apps/notify_push/bin/aarch64/notify_push ]; do sleep 5; done && chmod +x /var/www/html/custom_apps/notify_push/bin/aarch64/notify_push && /var/www/html/custom_apps/notify_push/bin/aarch64/notify_push /var/www/html/config/config.php"
depends_on:
- nextcloud
- mariadb
- redis
environment:
- PORT=7867
- NEXTCLOUD_URL=https://cloud.martinsevieira.adv.br
restart: always
volumes:
- ./docker/nginx/nextcloud:/var/www/html
- ./docker/resolv.conf:/etc/resolv.conf:ro
- ./docker/hosts:/etc/hosts:ro
networks:
dockernet:
ipv4_address: 10.15.0.179
deploy:
resources:
limits:
memory: 128M
onlyoffice:
build:
context: ./office
restart: unless-stopped
container_name: onlyoffice
depends_on:
- postgres
- onlyoffice-rabbitmq
- nextcloud
- nginx
environment:
- DB_TYPE=postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_NAME=onlyoffice
- DB_USER=onlyoffice
- AMQP_URI=amqp://rabbitmq:rabbitmq@10.15.0.212/?frameMax=0
# Uncomment strings below to enable the JSON Web Token validation.
- JWT_ENABLED=true
- JWT_HEADER=Authorization
- JWT_IN_BODY=true
- JWT_SECRET=@203050Rod
- LETSENCRYPT_HOST=office.martinsevieira.adv.br
stdin_open: true
stop_grace_period: 60s
networks:
dockernet:
ipv4_address: 10.15.0.211
volumes:
- ./docker/onlyoffice/data:/var/www/onlyoffice/Data
- ./docker/onlyoffice/log:/var/log/onlyoffice
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=2048
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
deploy:
resources:
limits:
memory: 768M
onlyoffice-rabbitmq:
container_name: rabbitmq
image: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: "rabbitmq"
RABBITMQ_DEFAULT_PASS: "rabbitmq"
RABBITMQ_DEFAULT_VHOST: "/"
restart: always
networks:
dockernet:
ipv4_address: 10.15.0.212
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=2048
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
deploy:
resources:
limits:
memory: 768M
# openproject:
# image: openproject/openproject:14
# container_name: openproject
# depends_on:
# - nginx
# - nextcloud
# dns:
# - 8.8.8.8
# - 8.8.4.4
# environment:
# EMAIL_DELIVERY_METHOD: smtp
# SMTP_ADDRESS: smtps.uhserver.com
# SMTP_PORT: 465
# SMTP_DOMAIN: "martinsevieira.adv.br"
# SMTP_AUTHENTICATION: login
## SMTP_ENABLE_STARTTLS_AUTO: "true"
# SMTP_USER_NAME: "escritorio@martinsevieira.adv.br"
# SMTP_PASSWORD: "102030Rod"
# OPENPROJECT_HTTPS: true
# OPENPROJECT_DEFAULT__LANGUAGE: pt-BR
# OPENPROJECT_SECRET_KEY_BASE: "@102030Rod"
# LETSENCRYPT_HOST: "projeto.martinsevieira.adv.br"
# LETSENCRYPT_EMAIL: "escritorio@martinsevieira.adv.br"
# USE_PUMA: true
# RAILS_MIN_THREADS: 2
# RAILS_MAX_THREADS: 4
# IMAP_SSL: true
# IMAP_SSL_VERIFICATION: true
# IMAP_PORT: 993
# IMAP_HOST: imap.uhserver.com
# IMAP_USERNAME: "escritorio@martinsevieira.adv.br"
# IMAP_PASSWORD: "@102030Rod"
# networks:
# dockernet:
# ipv4_address: 10.15.0.218
# ipv6_address: 2001:db8:15::218
# ulimits:
# nproc: 65535
# nofile:
# soft: 65535
# hard: 65535
# volumes:
# - ./docker/openproject/pgdata:/var/openproject/pgdata
# - ./docker/openproject/logs:/var/log/supervisor
# - ./docker/openproject/static:/var/openproject/assets
# - ./docker/openproject/enterprise_token.rb:/app/app/models/enterprise_token.rb:ro
# deploy:
# resources:
# limits:
# memory: 1G
kms:
build: ./kms
environment:
TZ: America/Araguaina
networks:
dockernet:
ipv4_address: 10.15.0.246
ipv6_address: 2001:db8:15::246
deploy:
resources:
limits:
cpus: '0.5'
memory: 256m
restart: unless-stopped
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_max_syn_backlog=65536
nginx-gen:
image: nginxproxy/nginx-proxy
container_name: nginx-gen
restart: 'always'
#user: 1000:1000
environment:
TZ: "America/Araguaina"
# LETSENCRYPT_HOST: "pit.martinsevieira.adv.br"
networks:
dockernet:
ipv4_address: 10.15.0.48
ipv6_address: 2001:db8:15::48
volumes:
- /etc/localtime:/etc/localtime:ro
- ./docker/nginx/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
telegram-bot:
build: ./rodrigonet
container_name: bot-ajuda-telegram
restart: unless-stopped
environment:
# Token do Bot do Telegram
- TELEGRAM_BOT_TOKEN=7673419014:AAGK7HNBYMMWl-bTNc5VBAl4FDLutMBx7pc
# Configurações do bot
- BOT_DEBUG=true
- NODE_ENV=production
# Usuários autorizados
- ALLOWED_USERS=593272271
- GUARAI_ALLOWED_USERS=1676175142,7222689324,5807598773,8360691637,8667337941,5244062341,8668809965
- PEDRO_AFONSO_ALLOWED_USERS=8105351046,8413938070
# Volumes para logs persistentes
- TOPSAPP_GUARAI_HOST=131.0.192.6
- TOPSAPP_GUARAI_USER=rodrigo
- TOPSAPP_GUARAI_PASS=2014Melancia
- TOPSAPP_PEDRO_AFONSO_HOST=45.189.140.18
- TOPSAPP_PEDRO_AFONSO_USER=rodrigo
- TOPSAPP_PEDRO_AFONSO_PASS=34641747
- JUNIPER_PEDRO_AFONSO_HOST=45.189.140.2
- JUNIPER_PEDRO_AFONSO_USER=rodrigo
- JUNIPER_PEDRO_AFONSO_PASS=2311@Goiania#2017
- JUNIPER_GUARAI_HOST=131.0.192.254
- JUNIPER_GUARAI_USER=rodrigo
- JUNIPER_GUARAI_PASS=@102030Rod
- TZ=America/Araguaina
- GENIEACS_GUARAI_URL=http://g.clicknetto.com.br
- GENIEACS_GUARAI_NBI_PORT=7557
- GENIEACS_GUARAI_USER=api
- GENIEACS_GUARAI_PASS=34641747
volumes:
- ./logs:/app/logs
# Health check
healthcheck:
test: ["CMD", "node", "-e", "console.log('Bot is running')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# Limites de recursos
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
reservations:
memory: 256M
cpus: '0.25'
# Logs
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
dockernet:
ipv4_address: 10.15.0.119
grafana:
#user: 1000:1000
image: grafana/grafana
container_name: grafana
environment:
- TZ=America/Araguaina
- VIRTUAL_HOST=grafana.doninet.net
- VIRTUAL_PORT=3000
volumes:
- ./docker/grafana:/var/lib/grafana
networks:
dockernet:
ipv4_address: 10.15.0.110
ipv6_address: 2001:db8:15::110
restart: unless-stopped
frontend:
#user: 1000:1000
container_name: frontend
build:
context: ./ticketz/frontend
dockerfile: ./Dockerfile
env_file:
- .env-frontend-acme
environment:
- TZ=America/Araguaina
- LETSENCRYPT_HOST=chat.martinsevieira.adv.br
restart: unless-stopped
depends_on:
- acme-companion
- backend
networks:
dockernet:
ipv4_address: 10.15.0.96
# ipv6_address: 2001:db8:15::96
deploy:
resources:
limits:
memory: 512M
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
backend:
#user: 1000:1000
container_name: backend
build:
context: ./ticketz/backend
dockerfile: ./Dockerfile
deploy:
resources:
limits:
memory: 512M
volumes:
- ./docker/backend_public:/usr/src/app/public
env_file:
- .env-backend-acme
environment:
- TZ=America/Araguaina
- LETSENCRYPT_HOST=api.chat.martinsevieira.adv.br
restart: unless-stopped
depends_on:
- acme-companion
- postgres
- redis
networks:
dockernet:
ipv4_address: 10.15.0.70
# ipv6_address: 2001:db8:15::70
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
wordpress:
image: wordpress:latest
container_name: wordpress
deploy:
resources:
limits:
cpus: '1'
memory: 768M
reservations:
cpus: '0.25'
memory: 256M
volumes:
- ./docker/wp-content:/var/www/html/wp-content
- ./docker/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
environment:
- LETSENCRYPT_HOST=www.martinsevieira.adv.br,martinsevieira.adv.br
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_TABLE_PREFIX=wp_
- WORDPRESS_DB_HOST=10.15.0.42
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=34641747
# WP_CACHE precisa estar "true" para o WordPress carregar o
# object-cache.php do plugin Redis — sem essa constante o Redis
# fica configurado mas o cache de objeto nunca entra em ação, e
# toda visita bate direto no MariaDB. Provavelmente a causa
# principal do WordPress "meio lento".
- WORDPRESS_CONFIG_EXTRA=define('WP_CACHE', true); define('WP_REDIS_HOST', '10.15.0.55'); define('WP_REDIS_PORT', 6379); define('WP_REDIS_DATABASE', 1); define('WP_CACHE_KEY_SALT', 'wp_mv_adv_'); define('DISABLE_WP_CRON', true);
depends_on:
- mariadb
restart: always
networks:
dockernet:
ipv4_address: 10.15.0.84
# ipv6_address: 2001:db8:15::70
sysctls:
- net.netfilter.nf_conntrack_acct=1
- net.netfilter.nf_conntrack_checksum=1
- net.netfilter.nf_conntrack_timestamp=1
- net.netfilter.nf_conntrack_tcp_loose=1
- net.netfilter.nf_conntrack_generic_timeout=600
- net.netfilter.nf_conntrack_tcp_timeout_established=86400
- net.netfilter.nf_conntrack_tcp_timeout_close=10
- net.netfilter.nf_conntrack_tcp_timeout_close_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_last_ack=10
- net.netfilter.nf_conntrack_tcp_timeout_time_wait=10
- net.netfilter.nf_conntrack_tcp_timeout_syn_recv=5
- net.netfilter.nf_conntrack_tcp_timeout_syn_sent=5
- net.netfilter.nf_conntrack_udp_timeout=10
- net.netfilter.nf_conntrack_udp_timeout_stream=180
- net.netfilter.nf_conntrack_icmp_timeout=10
- net.netfilter.nf_conntrack_icmpv6_timeout=10
- net.ipv4.tcp_congestion_control=bbr
- net.ipv4.tcp_tw_reuse=1
- net.core.somaxconn=65535
- net.ipv4.tcp_fastopen=3
- net.ipv4.tcp_slow_start_after_idle=0
- net.ipv4.tcp_no_metrics_save=1
anatomia-db:
container_name: anatomia-db
image: postgres:16-alpine
restart: unless-stopped
environment:
TZ: 'America/Araguaina'
POSTGRES_USER: ${POSTGRES_USER:-anatomia}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-anatomia}
POSTGRES_DB: ${POSTGRES_DB:-anatomia}
# Ajustado ao limite de 512M do container (padrão do Postgres é
# pensado para bare-metal com bem mais RAM disponível: shared_buffers
# de 128MB e sem effective_cache_size customizado deixa o planner
# pessimista sobre quanto cabe em cache).
command:
- postgres
- -c
- shared_buffers=128MB
- -c
- effective_cache_size=384MB
- -c
- work_mem=8MB
- -c
- maintenance_work_mem=32MB
- -c
- max_connections=50
volumes:
- anatomia_db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-anatomia}"]
interval: 5s
timeout: 5s
retries: 10
networks:
- dockernet
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.1'
anatomia-api:
container_name: anatomia-api
build:
context: ./anatomia/backend
restart: unless-stopped
depends_on:
anatomia-db:
condition: service_healthy
environment:
TZ: 'America/Araguaina'
DATABASE_URL: postgresql://${POSTGRES_USER:-anatomia}:${POSTGRES_PASSWORD:-anatomia}@anatomia-db:5432/${POSTGRES_DB:-anatomia}
PORT: 3333
MODELS_DIR: /app/models
ADMIN_EMAIL: ${ADMIN_EMAIL:-rodrigo@martinsevieira.adv.br}
ADMIN_PASSWORD: ${ADMIN_PASSWORD:-34641747}
ADMIN_JWT_SECRET: ${ADMIN_JWT_SECRET:-43aca599e81c2f164b6c1b2331157217c1beca57fa49e73e55c5cc83252a53e243aca599e81c2f164b6c1b2331157217c1beca57fa49e73e55c5cc83252a53e2}
volumes:
- anatomia_models_data:/app/models:ro
networks:
- dockernet
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.25'
anatomia-web:
container_name: anatomia-web
build:
context: ./anatomia
dockerfile: frontend/Dockerfile
restart: unless-stopped
depends_on:
- anatomia-api
environment:
TZ: 'America/Araguaina'
# Lido pelo acme-companion (pareado com nginx-gen) para emitir/renovar
# o certificado Let's Encrypt deste domínio.
LETSENCRYPT_HOST: ${ANATOMIA_DOMAIN:-atlas.martinsevieira.adv.br}
networks:
dockernet:
# IP fixo para o vhost manual em docker/nginx/sites/*.conf poder
# apontar (proxy_pass) direto para este container, no mesmo padrão
# já usado para "frontend"/"backend" (ticketz) e "nextcloud".
# Confirme que este IP está livre em dockernet antes de subir!
ipv4_address: ${ANATOMIA_WEB_IP:-10.15.0.93}
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
# One-off data pipeline: generates the seed GLB models + populates the DB.
# Run explicitly with: docker compose run --rm anatomia-pipeline
anatomia-pipeline:
container_name: anatomia-pipeline
build:
context: ./anatomia/data-pipeline
profiles: ["tools"]
depends_on:
anatomia-db:
condition: service_healthy
anatomia-api:
condition: service_started
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-anatomia}:${POSTGRES_PASSWORD:-anatomia}@anatomia-db:5432/${POSTGRES_DB:-anatomia}
volumes:
- anatomia_models_data:/app/seed/models
networks:
- dockernet
volumes:
anatomia_db_data:
anatomia_models_data: