QPANC são as iniciais de Quasar PostgreSQL ASP NET Core.
- Source
- Introdução
- Parte I - ASP.NET - Inicializando os Projetos
- Parte 2 - PostgreSQL
- Parte 3 - ASP.NET - Registrando Serviços e Lendo Variáveis de Ambiente
- Parte 4 - ASP.NET - Entity Framework e ASP.NET Core Identity
- Parte 5 - ASP.NET - Documentação Interativa com Swagger
- Parte 6 - ASP.NET - Regionalização
- Parte 7 - ASP.NET - Autenticação e Autorização
- Parte 8 - ASP.NET - CORS
- Parte 9 - Quasar - Criação e Configuração do Projeto
- Parte 10 - Quasar - Configurações e Customizações
- Parte 11 - Quasar - Componentes - Diferença entre SPA e SSR
- Parte 12 - Quasar - Serviços
- Parte 13 - Quasar - Regionalização e Stores
- Parte 14 - Quasar - Consumindo a API
- Parte 15 - Quasar - Login
- Parte 16 - Quasar - Áreas Protegidas
- Parte 17 - Quasar - Registro
- Parte 18 - Docker - Maquina Virtual Linux
- Parte 19 - Docker - Registro e Build
- Parte 20 - Docker - Traefik e Publicação
- Demo Online
40 Configurando os serviços na VM
Para orquestrar as requisições na VM, iremos utilizar o traefik
, porém iremos utilizar autenticação basic
para proteger o seu painel, desta forma, precisamos primeiro codificar uma senha, para tal, execute o seguinte comando na terminal SSH
conectado a VM
.
sudo apt-get install apache2-utils echo $(htpasswd -nb ${user} ${password}) | sed -e s/\\$/\\$\\$/g
por exemplo, para o usuario qpanc
e a senha exposed
:
echo $(htpasswd -nb qpanc exposed) | sed -e s/\\$/\\$\\$/g qpanc:$$apr1$$U0UpF78N$$3AxgB876rR09fJ5OuylKk/
Agora, podemos montar o compose.yml
que será utilizado na VM
:
version: '3.4' services: qpanc.api: restart: always container_name: qpanc_api depends_on: - qpanc.database image: qpanc.azurecr.io/api:latest ports: - "34512:80" volumes: - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro networks: qpanc.network: qpanc.internal: ipv4_address: "172.18.18.3" environment: - ASPNETCORE_ENVIRONMENT=Production - ASPNETCORE_URLS=http://+:80 - DEFAULT_CONNECTION=Server=qpanc.database;Port=5432;Database=postgres;User Id=postgres;Password=keepitsupersecret; - JWTBEARER_VALIDISSUER=https://api.your_domain.com/ - JWTBEARER_VALIDAUDIENCE=https://api.your_domain.com/ - JWTBEARER_ISSUERSIGNINGKEY=itUXC7iVRsofSDWNeg/aLYpc4bMzHAsMPzeItE1PQi2tMK2f4t0InRgTE5B/4IAjhAX5LQSIGL1CaUHSSzED8A== - JWTBEARER_TOKENDECRYPTIONKEY=7hfboHG0d4GnXjVng0ukMo+IgrKKrPLUMtOvnt4S514= - CORS_HOSTS__0=your_domain.com labels: - "traefik.enable=true" - "traefik.http.services.qpanc_api.loadbalancer.server.port=80" - "traefik.http.routers.qpanc_api.rule=Host(`api.your_domain.com`)" - "traefik.http.routers.qpanc_api.entrypoints=web" - "traefik.http.routers.qpanc_api.service=qpanc_api" - "traefik.http.routers.qpanc_api-secure.rule=Host(`api.your_domain.com`)" - "traefik.http.routers.qpanc_api-secure.tls=true" - "traefik.http.routers.qpanc_api-secure.tls.certresolver=le" - "traefik.http.routers.qpanc_api-secure.entrypoints=websecure" - "traefik.http.routers.qpanc_api-secure.service=qpanc_api" - "traefik.docker.network=external_network" qpanc.app: restart: always container_name: qpanc_app image: qpanc.azurecr.io/app:latest ports: - "34515:3000" volumes: - webapp:/app networks: qpanc.network: qpanc.internal: ipv4_address: "172.18.18.6" labels: - "traefik.enable=true" - "traefik.http.services.qpanc_app.loadbalancer.server.port=3000" - "traefik.http.routers.qpanc_app.rule=Host(`your_domain.com`)" - "traefik.http.routers.qpanc_app.entrypoints=web" - "traefik.http.routers.qpanc_app.service=qpanc_app" - "traefik.http.routers.qpanc_app-secure.rule=Host(`your_domain.com`)" - "traefik.http.routers.qpanc_app-secure.tls=true" - "traefik.http.routers.qpanc_app-secure.tls.certresolver=le" - "traefik.http.routers.qpanc_app-secure.entrypoints=websecure" - "traefik.http.routers.qpanc_app-secure.service=qpanc_app" - "traefik.docker.network=external_network" qpanc.database: restart: always image: postgres:latest ports: - "34514:5432" volumes: - database:/var/lib/postgresql/database networks: qpanc.network: qpanc.internal: ipv4_address: "172.18.18.9" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: keepitsupersecret POSTGRES_DB: postgres traefik: container_name: traefik image: traefik:latest depends_on: - qpanc.app - qpanc.api networks: qpanc.network: qpanc.internal: ipv4_address: "172.18.18.12" command: - "--api=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.traefik.address=:8080" - "--certificatesResolvers.le.acme.email=your_email@provider.com" - "--certificatesResolvers.le.acme.storage=acme.json" - "--certificatesResolvers.le.acme.tlsChallenge=true" - "--certificatesResolvers.le.acme.httpChallenge=true" - "--certificatesResolvers.le.acme.httpChallenge.entryPoint=web" ports: - "80:80" - "443:443" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/acme.json:/acme.json labels: - "traefik.enable=true" - "traefik.http.routers.traefik.rule=Host(`traefik.your_domain.com`)" - "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.traefik.middlewares=admin" - "traefik.http.routers.traefik.tls.certresolver=le" - "traefik.http.routers.traefik.entrypoints=websecure" - "traefik.http.middlewares.admin.basicauth.users=qpanc:$$apr1$$U0UpF78N$$3AxgB876rR09fJ5OuylKk/" volumes: webapp: database: networks: qpanc.internal: internal: true driver: bridge ipam: driver: default config: - subnet: 172.18.18.0/24 qpanc.network:
Não esqueça de atualizar o label traefik.http.middlewares.admin.basicauth.users
, afinal, você não vai querer usar a senha exposed
Ele é basicamente a combinação do QPANC/docker-compose.yml
e do QPANC/docker-compose.production.yml
, porém sem a parte do build
.
A outra diferença, é que agora estamos a configurar o traefik
, é ele que irá receber todas as requisições e transferir para o serviço apropriado.
Por exemplo, as requisições feitas para o host traefik.your_domain.com
serão redirecionadas para o painel do traefik. as feitas ao host api.your_domain.com
irão para à API
e por fim, as feitas para qpanc.your_domain.com
para o app feito usando o Quasar.
Outro ponto importante, é que traefik
é responsavel por configurar o SSL
, gerenciando a integração com o Let's Encrypt
. porém, precisamos de um domínio valido para isto.
Dado estas informações, conecte à VM
usando o SSH
, crie o arquivo data/acme.json
, e modifique o seu nível de acesso para 600:
mkdir data cd data > acme.json touch acme.json chmod 600 acme.json cd ..
Agora, vamos criar o aquivo docker-compose.yml
:
sensible-editor docker-compose.yml
Caso pergunte qual é o editor da sua preferencia, na duvida escolha o nano.
Então, copie o conteúdo do docker-compose
acima, apenas lembre-se de alterar o your_mail@provider.com
para o seu email e your_domain.com
para o endereço da aplicação.
Após salvar o docker-compose.yml
, precisamos garantir que o docker-compose up
será executado sempre que a VM
for inicializada:
sudo systemctl enable docker
E antes de podemos levantar os nossos serviços, precisamos logar no docker
usando uma conta que possa baixar as imagens:
docker login -u ${username} -p ${password} ${login_server}
no meu caso:
docker login -u qpanc -p ************************ qpanc.azurecr.io
E agora levante os serviços
sudo docker-compose up -d
Caso precise atualizar os serviços, podemos executar um script como o seguinte:
sudo docker-compose down sudo docker pull qpanc.azurecr.io/api:latest sudo docker pull qpanc.azurecr.io/app:latest sudo docker-compose up -d
Top comments (0)