Manual de instalação

WoofedCRM

Hospede o Woofed CRM em seu servidor. Seja o proprietário dos dados de seus clientes e cresça com baixo custo.

Portainer & Traefik

Passo a passo

Este guia visa uma instalação limpa em uma vps com ubuntu 20.04

Obs: Todo local que estiver < NOME > você deverá subistituir pelo nome que deseja removendo os sinais "< >" .

Configurando a VPS

Atualizando

							
							
					sudo apt update && sudo apt upgrade -y				
			

Definindo Time zone

							
							
					sudo timedatectl set-timezone America/Sao_Paulo				
			

Definindo nome do Host do servidor

							
							
					hostnamectl set-hostname <NOME_DO_SERVIDOR>				
			
							
							
					sudo sed -i "s/127.0.0.1[[:space:]]localhost/127.0.0.1 <NOME_DO_SERVIDOR>/g" /etc/hosts				
			
							
							
					sudo apt-get update				
			

Instalando dependencia

							
							
					sudo apt-get install -y apparmor-utils				
			

Docker Swarm

Guardar ip da VPS em uma variável

							
							
					ip=$(curl -s ifconfig.me)				
			

Instalando docker

							
							
					curl -fsSL https://get.docker.com | bash				
			

iniciando Swarm

							
							
					docker swarm init --advertise-addr $ip				
			

Criando rede interna

							
							
					docker network create --driver=overlay <NOME_DA_REDE_INTERNA>				
			

Traefik

Criando stack do traefik

							
							
					nano traefik.yaml				
			

Edite todos os campos comentados com #

							
							
					version: "3.7"

services:
  traefik:
    image: traefik:latest
    command:
      - "--api.dashboard=true"
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=NOME_DA_REDE_INTERNA" ## ---> NOME DA REDE INTERNA <--- ##
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      - "--entrypoints.web.http.redirections.entrypoint.permanent=true"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencryptresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencryptresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencryptresolver.acme.storage=/etc/traefik/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencryptresolver.acme.email=SEU_EMAIL_AQUI" ## ---> SEU EMAIL <--- ##
      - "--log.level=DEBUG"
      - "--log.format=common"
      - "--log.filePath=/var/log/traefik/traefik.log"
      - "--accesslog=true"
      - "--accesslog.filepath=/var/log/traefik/access-log"
    deploy:
      placement:
        constraints:
          - node.role == manager
      labels:
        - "traefik.enable=true"
        - "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"
        - "traefik.http.middlewares.redirect-https.redirectscheme.permanent=true"
        - "traefik.http.routers.http-catchall.rule=Host(\`{host:.+}\`)"
        - "traefik.http.routers.http-catchall.entrypoints=web"
        - "traefik.http.routers.http-catchall.middlewares=redirect-https@docker"
        - "traefik.http.routers.http-catchall.priority=1"
    volumes:
      - "vol_certificates:/etc/traefik/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host
    networks:
      - NOME_DA_REDE_INTERNA ## ---> NOME DA REDE INTERNA <--- ##

volumes:
  vol_shared:
    external: true
    name: volume_swarm_shared
  vol_certificates:
    external: true
    name: volume_swarm_certificates

networks:
  NOME_DA_REDE_INTERNA: ## ---> NOME DA REDE INTERNA <--- ##
    external: true
    name: NOME_DA_REDE_INTERNA ## ---> NOME DA REDE INTERNA <--- ##				
			

Subindo o a stack do traefik

							
							
					docker stack deploy --prune --resolve-image always -c traefik.yaml traefik > /dev/null 2>&1				
			

Portainer

Criando stack do Portainer

							
							
					nano portainre.yaml				
			

Edite todos os campos comentados com #

							
							
					version: "3.7"

services:
  agent:
    image: portainer/agent:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - NOME_DA_REDE_INTERNA ## ---> NOME DA REDE INTERNA <--- ##
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer-ce:latest
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    volumes:
      - portainer_data:/data
    networks:
      - NOME_DA_REDE_INTERNA ## ---> NOME DA REDE INTERNA <--- ##
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.portainer.rule=Host(`URL_DO_PORTAINER`)" ## ---> URL DO PORTAINER <--- ##
        - "traefik.http.services.portainer.loadbalancer.server.port=9000"
        - "traefik.http.routers.portainer.tls.certresolver=letsencryptresolver"
        - "traefik.http.routers.portainer.service=portainer"
        - "traefik.docker.network=NOME_DA_REDE_INTERNA" ## ---> NOME DA REDE INTERNA <--- ##
        - "traefik.http.routers.portainer.entrypoints=websecure"
        - "traefik.http.routers.portainer.priority=1"

networks:
  NOME_DA_REDE_INTERNA: ## ---> NOME DA REDE INTERNA <--- ##
    external: true
    attachable: true
    name: NOME_DA_REDE_INTERNA ## ---> NOME DA REDE INTERNA <--- ##

volumes:
  portainer_data:
    external: true
    name: portainer_data				
			

Edite todos os campos comentados com #

							
							
					docker stack deploy --prune --resolve-image always -c portainer.yaml portainer				
			

Aguarde de 1 a 2 minutos após esse comando e entre na URL que definiu para o Portainer, após isso, crie uma conta no portainer.

Postgres

Agora que estamos dentro do portainer, vá até a seção Stacks

depois clique em Add stack:

Preencha com um nome para a stack (recomendamos deixar postgres:

Cole a stack do postgres abaixo no seu portainer:

							
							
					version: "3.7"

services:
  postgres:
    image: postgres:14
    environment:
      - POSTGRES_PASSWORD=SENHA_POSTGRES ## ---> SENHA POSTGRES <--- ##
    networks:
      - NOME_DA_REDE_INTERNA ## ---> REDE INTERNA <--- ##
    #ports: ## ---> DESCOMENTAR CASO DESEJE ACESSAR O POSTGRES EXTERNAMENTE <--- ##
    #  - 5432:5432 ## ---> DESCOMENTAR CASO DESEJE ACESSAR O POSTGRES EXTERNAMENTE <--- ##
    volumes:
      - postgres_data:/var/lib/postgresql/data
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          cpus: "0.5"
          memory: 1024M

volumes:
  postgres_data:
    external: true
    name: postgres_data

networks:
  NOME_DA_REDE_INTERNA: ## ---> SENHA POSTGRES <--- ##
    external: true
    name: NOME_DA_REDE_INTERNA ## ---> SENHA POSTGRES <--- ##				
			

Obs: Lembre-se de alterar todos os campos comentados com as informações necessárias.

Após toda alteração, podemos desativar o Enable access control e clicar em Deploy the stack

Obs: Lembre-se de alterar todos os campos comentados com as informações necessárias.

Agora que fizemos o deploy, precisamos de criar um banco de dados dentro do postgres para o woofedCRM. Para isso vamos até Containers

E clicamos no simbolo do console