Como instalar o TicketZ no painel ICP

Como instalar o TicketZ no painel ICP

Este tutorial mostra como subir o TicketZ usando contêineres Docker de forma simples e organizada, ideal para iniciantes, para isso iremos usar o Painel ICP da Integrator Host.

Neste tutorial, você verá:

✔️ Criar o docker compose
✔️ Instalar o PostgreSQL
✔️ Instalar o Redis
✔️ Configurar um domínio com SSL para acessar o TicketZ (https://example.com).
✔️ Acesse o Administrador do TicketZ

📌 Passo 1: Vamos instalar o postgreSQL via painel ICP


📌 Passo 2: Vamos instalar o Redis


Agora que temos configurado os bancos de dados PostgreSQL e Redis, vamos criar o nosso banco para usar o TicketZ

📌 Passo 3: Criar o banco de dados PostgreSQL

Pronto temos o nosso banco PostgreSQL criado

Ao clicar em Informações de Conexão temos o Host, Porta, Usuário e Senha

📌 Passo 4: Agora vamos instalar algumas extensões em nosso postgreSQL necessário para rodar os migrations do Ticketz

Acesse o terminal SSH usando o painel ICP


Altere os dados de usuário, senha e host de acordo com o que foi criado no passo anterior.

# 0) Conferir search_path atual (só informativo)
docker exec -it ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz -c 'SHOW search_path;'

# 1) Extensões no schema public (idempotente)
docker exec -i ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz <<'SQL'
CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS pg_trgm  WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS citext   WITH SCHEMA public;
CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
SQL

# 2) Função IMUTÁVEL (para índices), no public (idempotente)
docker exec -i ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz <<'SQL'
CREATE OR REPLACE FUNCTION public.immutable_unaccent(text)
RETURNS text
LANGUAGE sql
IMMUTABLE
PARALLEL SAFE
AS $$
  SELECT public.unaccent('public.unaccent'::regdictionary, $1)
$$;
SQL

# 3) Garantir schema do usuário e search_path (criação vai para public; "$user" como fallback)
docker exec -i ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz <<'SQL'
CREATE SCHEMA IF NOT EXISTS "ticketz" AUTHORIZATION ticketz;
ALTER ROLE ticketz IN DATABASE ticketz SET search_path = public, "$user";
GRANT USAGE, CREATE ON SCHEMA public   TO ticketz;
GRANT USAGE, CREATE ON SCHEMA "ticketz" TO ticketz;
SQL

# 4) Wrappers em pg_catalog (cliente pode chamar unaccent() sem schema)
docker exec -i ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz <<'SQL'
CREATE OR REPLACE FUNCTION pg_catalog.unaccent(text)
RETURNS text
LANGUAGE sql
STABLE
AS $$
  SELECT public.unaccent('public.unaccent'::regdictionary, $1)
$$;

CREATE OR REPLACE FUNCTION pg_catalog.unaccent(regdictionary, text)
RETURNS text
LANGUAGE sql
STABLE
AS $$
  SELECT public.unaccent($1, $2)
$$;
SQL

# 5) Sanity checks
docker exec -it ic-postgresql-HZe8 psql -U ticketz     -d ticketz -c 'SHOW search_path;'
docker exec -it ic-postgresql-HZe8 psql -U user_KiRSZ2 -d ticketz -c '\dx'
docker exec -it ic-postgresql-HZe8 psql -U ticketz     -d ticketz -c "SELECT unaccent('coração') AS sem_schema, public.unaccent('coração') AS qualificado, public.immutable_unaccent('coração') AS imutavel;"


📌 Passo 5: Enviar o Docker Compose personalizado para executar no ICP usando o Gerenciador de Arquivos:

ATENÇÃO: Usar a pasta /home para criar seus projetos

1) Crie duas pastas com os nome: private e public
2) Crie um arquivo chamado docker-compose.yml
3) Crie um arquivo em BRANCO chamado disable-mime.conf

Ficando como na imagem abaixo:


Ajuste o docker-compose alterando o seu domínio, e-mail, usuário e senha do PostgreSQL e Redis

services:
  ticketz_backend:
    image: ghcr.io/ticketz-oss/ticketz-backend:latest
    ports:
      - "3001:3000"                           # host:3001 -> container:3000
    volumes:
      - /home/ticketz-v2/public:/usr/src/app/public
      - /home/ticketz-v2/private:/usr/src/app/private
    environment:
      - TZ=America/Sao_Paulo
      - NODE_ENV=production
      - PORT=3000
      - JWT_SECRET=9l7LhX9Jk4oJ3vAz1yTbK8gWn2sQ4fUv9p3jX0c5mNl2rTs5dG8aH1eF6qV7yWz
      # CORS / URLs externas
      - FRONTEND_URL=https://ticketz.vps000.panel-icp.integrator.com.br
      - BACKEND_URL=https://ticketzback.vps000.panel-icp.integrator.com.br
      # Banco / Redis
      - DB_DIALECT=postgres
      - DB_HOST=ic-postgresql-KYte
      - DB_PORT=5432
      - DB_USER=ticketz
      - DB_NAME=ticketz
      - DB_PASS=SENHAdoPOST
      - REDIS_URI=redis://:SENHA_REDIS@HOST:6379
      - VERIFY_TOKEN=ticketz
    networks:
      icontainer-network:
        aliases:
          - backend
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost:3000/ || exit 1"]
      interval: 20s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  ticketz_frontend:
    image: ghcr.io/ticketz-oss/ticketz-frontend:latest
    depends_on:
      - ticketz_backend
    ports:
      - "3000:80"
    volumes:
      - /home/ticketz-v2/public:/var/www/backend-public
      - /home/ticketz-v2/disable-mime.conf:/etc/nginx/conf.d/mimetypes.conf:ro
    environment:
      - FRONTEND_HOST=ticketz.vps000.panel-icp.integrator.com.br
      # >>> frontend chamará o back pelo domínio HTTPS dedicado
      - BACKEND_PROTOCOL=https
      - BACKEND_HOST=ticketzback.vps000.panel-icp.integrator.com.br
      - BACKEND_PORT=443
      - EMAIL_ADDRESS=admin@ticketz.host
    networks:
      - icontainer-network
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost/ || exit 1"]
      interval: 20s
      timeout: 5s
      retries: 5
    restart: unless-stopped

networks:
  icontainer-network:
    external: true
    name: icontainer-network

📌 Passo 6: Subir o Docker Compose através do ICP:

Ao finalizar o processo teremos dois container criados o de Backend e de Frontend

📌 Passo 7: Vamos agora criar o nosso domínio para acesso do TICKETZ com SSL

Vamos criar o domínio para acessar o FRONTEND que roda na porta 3000


Vamos criar o domínio para acessar o BACKEND que roda na porta 3001

Adicione o SSL nos dois domínios criados



📌 Passo 8: Após subir o docker acesse o TICKETZ

Usuário: admin@ticketz.host
Senha: 123456

📌 Passo 9: Como atualizar para uma nova versão?

Acesse o seu Container como mostra na imagem abaixo, e clique em atualizar.
Com isso baixa a ultima versão do Ticketz, fazer o mesmo para Frontend e Backend

Se tiver duvidas pode contar com o nosso suporte via WHATAPP

Até a próxima =)