Configure sua própria rede privada com o OpenVPN
O Vultr oferece uma incrível conectividade de rede privada para servidores executando no mesmo local. Mas às vezes você quer dois servidores em países diferentes
A Integração Contínua é uma prática de desenvolvimento de software DevOps que permite que os desenvolvedores mesclem frequentemente o código modificado no repositório compartilhado várias vezes ao dia. Após cada mesclagem, compilações e testes automáticos são executados para detectar problemas no código. Ele permite que os desenvolvedores encontrem e resolvam os erros rapidamente, para melhorar a qualidade do software e fornecer a entrega contínua do software. Mudar de um lado para o outro do Concourse é muito fácil, pois mantém toda a sua configuração em arquivos declarativos que podem ser verificados no controle de versão. Ele também fornece uma interface com o usuário da web que exibe as informações de construção interativamente.
Certifique-se de substituir todas as ocorrências 192.0.2.1
e ci.example.com
com seu endereço IP público e nome de domínio reais da Vultr.
Atualize seu sistema básico usando o guia Como atualizar o CentOS 7 . Depois que seu sistema for atualizado, continue com a instalação do PostgreSQL.
O PostgreSQL é um sistema de banco de dados relacional de objetos. Concourse armazena seus dados de pipeline em um banco de dados PostgreSQL. Adicione o repositório PostgreSQL.
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Instale o servidor de banco de dados PostgreSQL.
sudo yum -y install postgresql96-server postgresql96-contrib
Inicialize o banco de dados.
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
initdb
cria um novo cluster de banco de dados PostgreSQL, que é uma coleção de bancos de dados gerenciados por uma única instância do servidor. Edite o pg_hba.conf
arquivo para habilitar a autenticação baseada em MD5.
sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf
Encontre as seguintes linhas e altere os valores peer
e ident
na METHOD
coluna para trust
e md5
, respectivamente.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Uma vez atualizada, a configuração deve ficar assim.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Inicie o servidor PostgreSQL e ative-o automaticamente no momento da inicialização.
sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6
Mude a senha do usuário padrão do PostgreSQL.
sudo passwd postgres
Faça o login como usuário do PostgreSQL:
sudo su - postgres
Crie um novo usuário do PostgreSQL para o Concourse CI.
createuser concourse
Nota : O usuário padrão do PostgreSQL pode ser usado para autenticação do banco de dados, mas é recomendável usar um usuário dedicado para autenticação do banco de dados Concourse em uma configuração de produção.
O PostgreSQL fornece um shell para executar consultas no banco de dados. Alterne para o shell do PostgreSQL executando:
psql
Defina uma senha para o usuário do banco de dados do Concourse recém-criado.
ALTER USER concourse WITH ENCRYPTED password 'DBPassword';
Importante : Substitua DBPassword
por uma senha forte. Anote a senha, conforme exigida posteriormente no tutorial.
Crie um novo banco de dados para o Concourse.
CREATE DATABASE concourse OWNER concourse;
Saia do psql
shell.
\q
Mude para o usuário sudo do usuário atual do postgres.
exit
Baixe a versão mais recente do Concourse executável e armazene-a /usr/bin
para que possa ser executada diretamente. A versão mais recente dos binários Concourse e Fly pode ser encontrada na página de download do Concourse . Novos lançamentos são muito frequentes. Substitua o link abaixo pelo novo link da versão mais recente.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse
Da mesma forma, baixe a versão mais recente do executável fly e armazene-a /usr/bin
.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly
Fly é a interface da linha de comandos para conectar-se à API ATC do Concourse CI. O Fly está disponível para várias plataformas, como Linux, Windows e MacOS.
Atribua permissão de execução aos binários concourse
e baixados fly
.
sudo chmod +x /usr/bin/concourse /usr/bin/fly
Verifique se Concourse e Fly estão funcionando corretamente, verificando sua versão.
concourse -version
fly -version
Os pares de chaves RSA fornecem uma maneira de criptografar a comunicação entre os componentes do Concourse.
Para o concurso funcionar, pelo menos três pares de chaves devem ser gerados. Para criptografar os dados da sessão, gere a session_signing_key
. Essa chave também será usada pela TSA para assinar os pedidos feitos ao ATC. Para proteger o servidor TSA SSH, gere a tsa_host_key
. Por fim, gere um worker_key
para cada trabalhador.
Crie um novo diretório para armazenar as chaves e a configuração relacionadas ao IC do Concourse.
sudo mkdir /opt/concourse
Gere as chaves necessárias.
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key
Autorize a chave pública dos trabalhadores, copiando seu conteúdo para o authorized_worker_keys
arquivo:
sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys
O Concourse fornece dois componentes separados que precisam ser iniciados, a web e o trabalhador. Inicie a web do Concourse.
sudo concourse web \
--basic-auth-username admin \
--basic-auth-password StrongPass \
--session-signing-key /opt/concourse/session_signing_key \
--tsa-host-key /opt/concourse/tsa_host_key \
--tsa-authorized-keys /opt/concourse/authorized_worker_keys \
--postgres-user=concourse \
--postgres-password=DBPassword \
--postgres-database=concourse \
--external-url http://192.0.2.1:8080
Altere o nome de usuário e a senha do, basic-auth
se desejar. Verifique se o caminho para os arquivos de chave está correto e se o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL é fornecido.
Nota : O ATC escutará a porta padrão 8080
e o TSA escutará a porta 2222
. Se a autenticação não for desejada, passe a --no-really-i-dont-want-any-auth
opção após remover as opções básicas de autenticação.
Depois que o servidor da web é iniciado, a seguinte saída deve ser exibida.
{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}
Pare o servidor por enquanto, pois mais algumas coisas ainda precisam ser configuradas.
Inicie o Concourse CI Worker.
sudo concourse worker \
--work-dir /opt/concourse/worker \
--tsa-host 127.0.0.1 \
--tsa-public-key /opt/concourse/tsa_host_key.pub \
--tsa-worker-private-key /opt/concourse/worker_key
O comando acima assumirá que o TSA está sendo executado no host local e escutando a porta padrão 2222
.
Embora a web e o trabalhador do Concourse possam ser iniciados facilmente usando os comandos acima, é recomendável usar o Systemd para gerenciar o servidor.
O uso do serviço Systemd para gerenciar o aplicativo garante que o aplicativo seja iniciado automaticamente em caso de falhas e no momento da inicialização. O servidor Concourse não aceita dados de nenhum arquivo de configuração, mas pode acessar os dados de variáveis de ambiente. Em vez de definir variáveis de ambiente globais, crie um novo arquivo para armazenar as variáveis de ambiente e depois passe as variáveis para o Concourse CI usando o serviço Systemd.
Crie um novo arquivo de ambiente para a web do Concourse.
sudo nano /opt/concourse/web.env
Preencher o arquivo.
CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse
CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080
Altere o nome de usuário e a senha do, BASIC_AUTH
se desejar. Verifique se o caminho para os arquivos de chave está correto e se o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL é fornecido.
Da mesma forma, crie um arquivo de ambiente para o trabalhador.
sudo nano /opt/concourse/worker.env
Preencher o arquivo.
CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1
Como os arquivos de ambiente contêm nome de usuário e senhas, altere suas permissões para que não possam ser acessados por outros usuários.
sudo chmod 600 /opt/concourse/*.env
Agora crie um novo usuário para o Concourse para executar o ambiente da web. Isso garantirá que o servidor da web esteja sendo executado em um ambiente isolado.
sudo adduser --system concourse
Conceda ao usuário do concurso a propriedade do diretório do arquivo de IC do concurso.
sudo chown -R concourse:concourse /opt/concourse
Crie um novo arquivo de serviço systemd para o serviço da web Concourse.
sudo nano /etc/systemd/system/concourse-web.service
Preencher o arquivo.
[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service
[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web
[Install]
WantedBy=multi-user.target
Salve e feche o arquivo. Crie um novo arquivo de serviço para o serviço do trabalhador do Concourse.
sudo nano /etc/systemd/system/concourse-worker.service
Preencher o arquivo.
[Unit]
Description=Concourse CI worker process
After=concourse-web.service
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker
[Install]
WantedBy=multi-user.target
O serviço da web e do trabalhador agora pode ser iniciado diretamente executando:
sudo systemctl start concourse-web concourse-worker
Para permitir que o processo de trabalho e da Web seja iniciado automaticamente no momento da inicialização, execute:
sudo systemctl enable concourse-worker concourse-web
Para verificar o status dos serviços, execute:
sudo systemctl status concourse-worker concourse-web
Se o serviço não for iniciado, ou no FAILED
estado, remova o cache do /tmp
diretório.
sudo rm -rf /tmp/*
Reinicie os serviços.
sudo systemctl restart concourse-worker concourse-web
Observe que desta vez os serviços foram iniciados corretamente. A saída ao verificar o status dos serviços deve ser semelhante.
[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3037 (concourse)
CGroup: /system.slice/concourse-worker.service
└─3037 /usr/bin/concourse worker
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}
...
● concourse-web.service - Concourse CI web server
Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3036 (concourse)
CGroup: /system.slice/concourse-web.service
└─3036 /usr/bin/concourse web
Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.
Ajuste seu firewall para permitir a porta 8080, na qual o ATS está sendo executado, e a porta 2222, no qual o TSA está em execução.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
Depois que o servidor é iniciado, a interface da web do Concourse CI pode ser acessada acessando http://192.0.2.1:8080
qualquer navegador. Efetue login usando o nome de usuário e a senha fornecidos no arquivo de ambiente.
Para conectar-se ao servidor usando o Fly, execute:
fly -t my-ci login -c http://192.0.2.1:8080
O comando acima é usado para o logon inicial no servidor. -t
é usado para fornecer um nome de destino. substitua my-ci
por qualquer nome de destino desejado. O comando acima fará login na equipe padrão main
. Ele solicitará o nome de usuário e a senha fornecidos no arquivo de ambiente.
A saída será semelhante à seguinte.
[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'
username: admin
password:
target saved
O login de destino será salvo por um dia. Depois disso, ele expirará.
Para sair imediatamente.
fly -t my-ci logout
O fly pode ser usado para efetuar login no servidor fora da rede, mas apenas se o servidor tiver um endereço IP público e puder ser acessado de fora da rede. O binário do Windows ou MacOS pode ser baixado do site de download ou da interface do usuário da web do servidor.
Logins e outras informações enviadas pela interface da web para o servidor Concourse não são protegidos. A conexão não está criptografada. Um proxy reverso Nginx pode ser configurado com um SSL grátis Let's Encrypt.
Instale o servidor da web Nginx e o Certbot, que é o aplicativo cliente da autoridade de certificação Let's Encrypt.
sudo yum -y install certbot-nginx nginx
Inicie e ative o Nginx para iniciar automaticamente no momento da inicialização:
sudo systemctl start nginx
sudo systemctl enable nginx
Antes que uma solicitação possa ser feita para os certificados, as portas 80 e 443, ou serviços HTTP e HTTPS padrão, devem ser ativados pelo firewall. O Certbot verificará a autoridade do domínio antes de emitir certificados.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
A porta 8080 não precisa mais ser permitida pelo firewall, porque o Concourse agora será executado na porta HTTPS padrão. Remova a entrada do firewall para permitir a porta 8080.
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload
Nota
Para obter certificados da Let's Encrypt CA, o domínio para o qual os certificados devem ser gerados deve estar apontado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do domínio e aguarde a propagação do DNS antes de fazer a solicitação de certificado novamente. O Certbot verifica a autoridade do domínio antes de fornecer os certificados.
Gere os certificados SSL.
sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com
Os certificados gerados provavelmente serão armazenados no /etc/letsencrypt/live/ci.example.com/
diretório O certificado SSL será armazenado como fullchain.pem
e a chave privada será armazenada como privkey.pem
.
Vamos criptografar certificados expiram em 90 dias, portanto, é recomendável que a renovação automática seja feita usando cronjobs. Cron é um serviço do sistema usado para executar tarefas periódicas.
Abra o arquivo de tarefa cron.
sudo crontab -e
Adicione a seguinte linha no final do arquivo.
30 5 * * 1 /usr/bin/certbot renew --quiet
O trabalho cron acima será executado toda segunda-feira às 05:30. Se o certificado estiver vencido, ele será renovado automaticamente.
Crie um novo host virtual.
sudo nano /etc/nginx/conf.d/concourse-ssl.conf
Preencher o arquivo.
server {
listen 80;
server_name ci.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name ci.example.com;
ssl_certificate /etc/letsencrypt/live/ci.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ci.example.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/concourse.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://ci.example.com;
}
}
Nota : Substitua ci.example.com
pelo domínio real.
Edite o arquivo de ambiente criado para o concurso da Web.
sudo nano /opt/concourse/web.env
Altere o valor de CONCOURSE_EXTERNAL_URL
e também adicione mais duas linhas no final do arquivo.
CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080
Salve o arquivo e reinicie o servidor da web Concourse Web, Worker e Nginx:
sudo systemctl restart concourse-worker concourse-web nginx
Todos os dados enviados para e do navegador agora estão protegidos com criptografias SSL.
O Vultr oferece uma incrível conectividade de rede privada para servidores executando no mesmo local. Mas às vezes você quer dois servidores em países diferentes
Usando um sistema diferente? Introdução O CyberPanel é um dos primeiros painéis de controle do mercado, tanto de código aberto quanto de OpenLiteSpeed. What thi
Usando um sistema diferente? O ESpeak pode gerar arquivos de áudio de conversão de texto em fala (TTS). Isso pode ser útil por vários motivos, como criar seu próprio Turim
Usando um sistema diferente? O LibreNMS é um sistema de monitoramento de rede de código aberto completo. Ele usa o SNMP para obter os dados de diferentes dispositivos. Uma variedade
Usar um usuário sudo para acessar um servidor e executar comandos no nível raiz é uma prática muito comum entre o Linux e o Unix Systems Administrator. O uso de um sud
Usando um sistema diferente? O RabbitMQ é um intermediário de mensagens de código aberto amplamente usado, escrito na linguagem de programação Erlang. Como um middleware orientado a mensagens
Usando um sistema diferente? O RTMP é ótimo para veicular conteúdo ao vivo. Quando o RTMP é emparelhado com o FFmpeg, os fluxos podem ser convertidos em várias qualidades. Vultr i
Usando um sistema diferente? Gradle é um conjunto de ferramentas de automação de compilação de código aberto e gratuito baseado nos conceitos do Apache Ant e Apache Maven. Gradle fornece
Usando um sistema diferente? Neste guia, veremos como configurar um servidor FTP (ProFTPd) para transferir arquivos entre o seu PC e o seu servidor.
Usando um sistema diferente? O Netdata é uma estrela em ascensão no campo do monitoramento de métricas do sistema em tempo real. Comparado com outras ferramentas do mesmo tipo, o Netdata:
Usando um sistema diferente? O Apache Cassandra é um sistema de gerenciamento de banco de dados NoSQL gratuito e de código aberto, projetado para fornecer escalabilidade, alta
Neste tutorial, aprenda como configurar um servidor multiplayer Just Cause 2. Pré-requisitos Verifique se o sistema está totalmente atualizado antes de começarmos
Usando um sistema diferente? Neste tutorial, explicarei como configurar um servidor Starbound no CentOS 7. Pré-requisitos Você precisa ser o proprietário deste jogo
O ZNC é um segurança IRC gratuito e de código aberto que permanece permanentemente conectado a uma rede para que os clientes possam receber mensagens enviadas enquanto estiverem offline. Thi
O Django é uma estrutura Python popular para escrever aplicativos da web. Com o Django, você pode criar aplicativos mais rapidamente, sem reinventar a roda. Se você quiser você
Outubro é um sistema de gerenciamento de conteúdo de código aberto baseado no Laravel PHP Framework. Com uma interface elegante e uma arquitetura modular concisa
Após alterar a porta SSH, configurar a batida na porta e fazer outros ajustes para a segurança SSH, talvez haja mais uma maneira de protegê-lo
Introdução O MyCLI é um cliente de linha de comando para MySQL e MariaDB que permite concluir automaticamente e ajuda na sintaxe de seus comandos SQL. MyCL
Usando um sistema diferente? O Directus 6.4 CMS é um sistema de gerenciamento de conteúdo sem cabeça (CMS) poderoso e flexível, gratuito e de código aberto que fornece
Usando um sistema diferente? O Reader Self 3.5 é um leitor de RSS auto-hospedado, simples e flexível, gratuito e de código aberto, e uma alternativa ao Google Reader. Leitor Sel
Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane
ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.
O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+
Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.
Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais
13 Ferramentas de Extração de Dados Comerciais de Big Data
Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true
À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.
Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1
A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA na área da saúde ainda está crescendo dia a dia.