Update / Agora Esta mais Serio
This commit is contained in:
parent
10617775df
commit
d57920afa6
|
|
@ -1,11 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# INSTALADOR DO SERVIÇO PROXY-SINC (VERSÃO AVANÇADA)
|
# INSTALADOR DO SERVIÇO PROXY-SINC (VERSÃO PROFISSIONAL)
|
||||||
#
|
#
|
||||||
# Autor: A sua IA Assistente & Equipa de Infraestrutura iT Guys
|
# Autor: A sua IA Assistente & Equipa de Infraestrutura iT Guys
|
||||||
# Descrição: Instala e configura o serviço de versionamento automático, com
|
# Descrição: Instala e configura um serviço de versionamento robusto e
|
||||||
# autenticação por Token, gestão de SSL e identidade de commit automática.
|
# auto-documentado para configurações de servidor.
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
@ -15,6 +15,9 @@ REPO_DIR="/opt/config_repo"
|
||||||
SCRIPT_INSTALL_DIR="/usr/local/sbin"
|
SCRIPT_INSTALL_DIR="/usr/local/sbin"
|
||||||
SYSTEMD_DIR="/etc/systemd/system"
|
SYSTEMD_DIR="/etc/systemd/system"
|
||||||
MAN_DIR="/usr/share/man/man8"
|
MAN_DIR="/usr/share/man/man8"
|
||||||
|
CONFIG_DIR="/etc/proxy-sinc"
|
||||||
|
PATHS_FILE="${CONFIG_DIR}/paths.conf"
|
||||||
|
UPDATE_REPO_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder.git" # URL para o script de atualização
|
||||||
|
|
||||||
# --- Funções de Ajuda ---
|
# --- Funções de Ajuda ---
|
||||||
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
|
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
|
||||||
|
|
@ -22,7 +25,7 @@ error() { echo -e "\e[31m[ERRO]\e[0m $1" >&2; exit 1; }
|
||||||
warn() { echo -e "\e[33m[AVISO]\e[0m $1"; }
|
warn() { echo -e "\e[33m[AVISO]\e[0m $1"; }
|
||||||
|
|
||||||
# --- Início da Execução ---
|
# --- Início da Execução ---
|
||||||
info "Iniciando a instalação do serviço Proxy-Sinc..."
|
info "Iniciando a instalação/atualização do serviço Proxy-Sinc..."
|
||||||
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
error "Este script precisa de ser executado como root."
|
error "Este script precisa de ser executado como root."
|
||||||
|
|
@ -37,35 +40,45 @@ info "Dependências satisfeitas."
|
||||||
# --- 2. Configuração das Credenciais e do Repositório ---
|
# --- 2. Configuração das Credenciais e do Repositório ---
|
||||||
info "Configurando a autenticação para o Gitea..."
|
info "Configurando a autenticação para o Gitea..."
|
||||||
|
|
||||||
# Pede as informações ao utilizador
|
|
||||||
read -p "Por favor, insira a URL HTTP ou HTTPS do seu repositório Gitea: " GIT_URL
|
read -p "Por favor, insira a URL HTTP ou HTTPS do seu repositório Gitea: " GIT_URL
|
||||||
read -p "Por favor, insira o seu NOME DE UTILIZADOR do Gitea: " GITEA_USERNAME
|
read -p "Por favor, insira o seu NOME DE UTILIZADOR do Gitea: " GITEA_USERNAME
|
||||||
read -s -p "Por favor, insira o seu TOKEN DE ACESSO do Gitea (ficará oculto): " GITEA_TOKEN
|
read -s -p "Por favor, insira o seu TOKEN DE ACESSO do Gitea (ficará oculto): " GITEA_TOKEN
|
||||||
echo ""
|
echo ""
|
||||||
read -p "O seu servidor Gitea usa um certificado SSL auto-assinado ou inválido? (s/n): " SSL_VERIFY_CHOICE
|
|
||||||
|
|
||||||
# Verifica se os campos foram preenchidos
|
|
||||||
if [ -z "$GIT_URL" ] || [ -z "$GITEA_USERNAME" ] || [ -z "$GITEA_TOKEN" ]; then
|
if [ -z "$GIT_URL" ] || [ -z "$GITEA_USERNAME" ] || [ -z "$GITEA_TOKEN" ]; then
|
||||||
error "Todos os campos (URL, Utilizador, Token) são obrigatórios."
|
error "Todos os campos (URL, Utilizador, Token) são obrigatórios."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extrai o protocolo e o caminho da URL para construir a nova URL com autenticação
|
|
||||||
GIT_PROTOCOL=$(echo "$GIT_URL" | grep -o '^https\?://')
|
GIT_PROTOCOL=$(echo "$GIT_URL" | grep -o '^https\?://')
|
||||||
GIT_DOMAIN_PATH=$(echo "$GIT_URL" | sed -e 's|https\?://||')
|
GIT_DOMAIN_PATH=$(echo "$GIT_URL" | sed -e 's|https\?://||')
|
||||||
AUTH_GIT_URL="${GIT_PROTOCOL}${GITEA_USERNAME}:${GITEA_TOKEN}@${GIT_DOMAIN_PATH}"
|
AUTH_GIT_URL="${GIT_PROTOCOL}${GITEA_USERNAME}:${GITEA_TOKEN}@${GIT_DOMAIN_PATH}"
|
||||||
|
|
||||||
# Gera a identidade para os commits automaticamente
|
|
||||||
SERVER_HOSTNAME=$(hostname -f)
|
SERVER_HOSTNAME=$(hostname -f)
|
||||||
GIT_COMMIT_NAME="$SERVER_HOSTNAME"
|
GIT_COMMIT_NAME="$SERVER_HOSTNAME"
|
||||||
GIT_COMMIT_EMAIL="${SERVER_HOSTNAME}@itguys.com.br"
|
GIT_COMMIT_EMAIL="${SERVER_HOSTNAME%%.*}@itguys.com.br"
|
||||||
info "O autor dos commits será definido como: $GIT_COMMIT_NAME <$GIT_COMMIT_EMAIL>"
|
info "O autor dos commits será definido como: $GIT_COMMIT_NAME <$GIT_COMMIT_EMAIL>"
|
||||||
|
|
||||||
# --- 3. Clonar o Repositório e Configurar ---
|
# --- 3. Teste de Conexão SSL e Configuração do Git ---
|
||||||
if [ -d "$REPO_DIR" ]; then
|
info "A testar a conexão com o Gitea..."
|
||||||
|
SSL_VERIFY="true"
|
||||||
|
if ! git -c http.sslVerify=true ls-remote "$GIT_URL" &> /dev/null; then
|
||||||
|
warn "A conexão com verificação SSL falhou. A tentar novamente sem verificação..."
|
||||||
|
if ! git -c http.sslVerify=false ls-remote "$GIT_URL" &> /dev/null; then
|
||||||
|
error "Não foi possível conectar ao repositório Git. Verifique a URL, o token e a conectividade de rede."
|
||||||
|
else
|
||||||
|
warn "Conexão bem-sucedida sem verificação SSL. O repositório será configurado para ignorar os erros de certificado."
|
||||||
|
SSL_VERIFY="false"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
info "Conexão com verificação SSL bem-sucedida."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 4. Clonar/Atualizar o Repositório ---
|
||||||
|
if [ -d "$REPO_DIR/.git" ]; then
|
||||||
warn "O diretório do repositório $REPO_DIR já existe. A reconfigurar..."
|
warn "O diretório do repositório $REPO_DIR já existe. A reconfigurar..."
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
git remote set-url origin "$AUTH_GIT_URL"
|
git remote set-url origin "$AUTH_GIT_URL"
|
||||||
info "URL do remoto 'origin' atualizada com as novas credenciais."
|
info "URL do remoto 'origin' atualizada."
|
||||||
else
|
else
|
||||||
info "A clonar o repositório para $REPO_DIR..."
|
info "A clonar o repositório para $REPO_DIR..."
|
||||||
git clone "$GIT_URL" "$REPO_DIR"
|
git clone "$GIT_URL" "$REPO_DIR"
|
||||||
|
|
@ -74,69 +87,129 @@ else
|
||||||
git remote set-url origin "$AUTH_GIT_URL"
|
git remote set-url origin "$AUTH_GIT_URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configura o nome, email e verificação SSL DENTRO deste repositório
|
|
||||||
git config user.name "$GIT_COMMIT_NAME"
|
git config user.name "$GIT_COMMIT_NAME"
|
||||||
git config user.email "$GIT_COMMIT_EMAIL"
|
git config user.email "$GIT_COMMIT_EMAIL"
|
||||||
|
git config http.sslVerify "$SSL_VERIFY"
|
||||||
if [[ "$SSL_VERIFY_CHOICE" == "s" || "$SSL_VERIFY_CHOICE" == "S" ]]; then
|
|
||||||
info "A desativar a verificação de certificado SSL para este repositório."
|
|
||||||
git config http.sslVerify false
|
|
||||||
else
|
|
||||||
git config http.sslVerify true
|
|
||||||
fi
|
|
||||||
info "Repositório configurado com sucesso."
|
info "Repositório configurado com sucesso."
|
||||||
|
|
||||||
|
# --- 5. Gerar Ficheiro de Deploy (se for a primeira vez) ---
|
||||||
|
DEPLOY_LOG_DIR="$REPO_DIR/_deployment_logs"
|
||||||
|
DEPLOY_LOG_FILE="${DEPLOY_LOG_DIR}/${SERVER_HOSTNAME}.md"
|
||||||
|
if [ ! -f "$DEPLOY_LOG_FILE" ]; then
|
||||||
|
info "A criar o registo de deploy inicial..."
|
||||||
|
mkdir -p "$DEPLOY_LOG_DIR"
|
||||||
|
echo "# Registo de Deploy do Proxy-Sinc" > "$DEPLOY_LOG_FILE"
|
||||||
|
echo "" >> "$DEPLOY_LOG_FILE"
|
||||||
|
echo "**Servidor:** ${SERVER_HOSTNAME}" >> "$DEPLOY_LOG_FILE"
|
||||||
|
echo "**Instalado por:** ${GITEA_USERNAME}" >> "$DEPLOY_LOG_FILE"
|
||||||
|
echo "**Data de Instalação:** $(date)" >> "$DEPLOY_LOG_FILE"
|
||||||
|
|
||||||
|
git add "$DEPLOY_LOG_FILE"
|
||||||
|
git commit -m "[Deploy] Instalação inicial do serviço de sincronização em ${SERVER_HOSTNAME}"
|
||||||
|
git push origin main
|
||||||
|
info "Registo de deploy enviado para o Gitea."
|
||||||
|
fi
|
||||||
|
|
||||||
# --- 4. Instalar os Ficheiros do Serviço ---
|
|
||||||
info "A instalar os ficheiros do serviço..."
|
|
||||||
# (O script commit_configs.sh é gerado aqui. Ele não precisa de alterações,
|
|
||||||
# pois o git irá ler a configuração local que acabámos de definir.)
|
|
||||||
|
|
||||||
cat > ./commit_configs.sh << 'EOF'
|
# --- 6. Instalar os Ficheiros do Serviço ---
|
||||||
|
info "A instalar/atualizar os ficheiros do serviço..."
|
||||||
|
|
||||||
|
# Cria o diretório de configuração e o ficheiro de caminhos, se não existirem
|
||||||
|
mkdir -p "$CONFIG_DIR"
|
||||||
|
if [ ! -f "$PATHS_FILE" ]; then
|
||||||
|
info "A criar o ficheiro de caminhos padrão em $PATHS_FILE"
|
||||||
|
echo "/etc/nginx" > "$PATHS_FILE"
|
||||||
|
echo "/etc/fail2ban" >> "$PATHS_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Gera o script principal de commit
|
||||||
|
cat > "$SCRIPT_INSTALL_DIR/commit_configs.sh" << 'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
REPO_PATH="/opt/config_repo"
|
REPO_PATH="/opt/config_repo"
|
||||||
NGINX_SOURCE="/etc/nginx"
|
CONFIG_DIR="/etc/proxy-sinc"
|
||||||
FAIL2BAN_SOURCE="/etc/fail2ban"
|
PATHS_FILE="${CONFIG_DIR}/paths.conf"
|
||||||
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz")
|
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/usr/local/sbin/proxy-sinc-update" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz" "${PATHS_FILE}")
|
||||||
AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/"
|
AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/"
|
||||||
echo "--- Iniciando a verificação de sincronização de configurações [$(date)] ---"
|
|
||||||
if [ "$EUID" -ne 0 ]; then echo "ERRO CRÍTICO: O script deve ser executado como root." >&2; exit 1; fi
|
log_info() { echo "[INFO] $1"; }
|
||||||
if [ ! -d "$REPO_PATH" ]; then echo "ERRO CRÍTICO: O diretório do repositório $REPO_PATH não foi encontrado." >&2; exit 1; fi
|
|
||||||
echo "[INFO] Sincronizando ficheiros de configuração..."
|
log_info "--- Iniciando a verificação de sincronização [$(date)] ---"
|
||||||
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled/' --exclude='modules-enabled/' --exclude='/var/log/' --exclude='/var/run/' --exclude='/var/cache/' "$NGINX_SOURCE/" "$REPO_PATH/nginx/"
|
if [ "$EUID" -ne 0 ]; then echo "[ERRO] O script deve ser executado como root." >&2; exit 1; fi
|
||||||
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='/var/log/' --exclude='/var/run/' "$FAIL2BAN_SOURCE/" "$REPO_PATH/fail2ban/"
|
if [ ! -d "$REPO_PATH" ]; then echo "[ERRO] O diretório do repositório $REPO_PATH não foi encontrado." >&2; exit 1; fi
|
||||||
echo "[INFO] Sincronizando ficheiros de automação..."
|
|
||||||
|
log_info "Sincronizando ficheiros de configuração definidos em $PATHS_FILE..."
|
||||||
|
if [ ! -f "$PATHS_FILE" ]; then
|
||||||
|
echo "[AVISO] O ficheiro de caminhos $PATHS_FILE não foi encontrado. Nenhum ficheiro de configuração foi sincronizado."
|
||||||
|
else
|
||||||
|
while IFS= read -r path_to_sync || [ -n "$path_to_sync" ]; do
|
||||||
|
if [ -z "$path_to_sync" ] || [[ "$path_to_sync" =~ ^# ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "$path_to_sync" ]; then
|
||||||
|
dest_name=$(basename "$path_to_sync")
|
||||||
|
log_info "A sincronizar '$path_to_sync' para '$REPO_PATH/$dest_name/'..."
|
||||||
|
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled/' --exclude='modules-enabled/' --exclude='/var/log/' --exclude='/var/run/' --exclude='/var/cache/' "$path_to_sync/" "$REPO_PATH/$dest_name/"
|
||||||
|
else
|
||||||
|
echo "[AVISO] O caminho '$path_to_sync' definido em $PATHS_FILE não existe. A ignorar."
|
||||||
|
fi
|
||||||
|
done < "$PATHS_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Sincronizando ficheiros de automação..."
|
||||||
mkdir -p "$AUTOMATION_FILES_DEST"
|
mkdir -p "$AUTOMATION_FILES_DEST"
|
||||||
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
|
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
|
||||||
if [ -f "$file" ]; then
|
if [ -f "$file" ]; then
|
||||||
rsync -aR "$file" "$AUTOMATION_FILES_DEST"
|
rsync -aR "$file" "$AUTOMATION_FILES_DEST"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "[INFO] Sincronização de ficheiros concluída."
|
|
||||||
cd "$REPO_PATH"
|
cd "$REPO_PATH"
|
||||||
echo "[INFO] A verificar o status do repositório Git..."
|
log_info "A verificar o status do repositório Git..."
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
echo "[INFO] Alterações detetadas. A preparar o commit."
|
log_info "Alterações detetadas. A preparar o commit."
|
||||||
echo "[INFO] A puxar alterações do repositório remoto para evitar conflitos..."
|
log_info "A puxar alterações do repositório remoto para evitar conflitos..."
|
||||||
git pull --ff-only
|
git pull --ff-only
|
||||||
echo "[INFO] A adicionar alterações ao stage..."
|
log_info "A adicionar alterações ao stage..."
|
||||||
git add .
|
git add .
|
||||||
COMMIT_MESSAGE="[Auto-Sync] Atualização das configurações em $(hostname -f) - $(date +'%Y-%m-%d %H:%M:%S')"
|
COMMIT_MESSAGE="[Auto-Sync] Atualização das configurações em $(hostname -f) - $(date +'%Y-%m-%d %H:%M:%S')"
|
||||||
echo "[INFO] A fazer o commit com a mensagem: $COMMIT_MESSAGE"
|
log_info "A fazer o commit com a mensagem: $COMMIT_MESSAGE"
|
||||||
git commit -m "$COMMIT_MESSAGE"
|
git commit -m "$COMMIT_MESSAGE"
|
||||||
echo "[INFO] A enviar as alterações para o Gitea (git push)..."
|
log_info "A enviar as alterações para o Gitea (git push)..."
|
||||||
git push origin main
|
git push origin main
|
||||||
echo "[SUCESSO] As alterações foram enviadas para o repositório remoto!"
|
echo "[SUCESSO] As alterações foram enviadas para o repositório remoto!"
|
||||||
else
|
else
|
||||||
echo "[INFO] Nenhuma alteração de configuração detetada. O repositório está atualizado."
|
log_info "Nenhuma alteração de configuração detetada. O repositório está atualizado."
|
||||||
fi
|
fi
|
||||||
echo "--- Verificação de sincronização concluída com sucesso [$(date)] ---"
|
log_info "--- Verificação de sincronização concluída [$(date)] ---"
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# ... (o resto do script que gera proxy-sinc.service, proxy-sinc.timer e proxy-sinc.8 continua aqui, exatamente como antes) ...
|
# Gera o script de atualização
|
||||||
cat > ./proxy-sinc.service << 'EOF'
|
cat > "$SCRIPT_INSTALL_DIR/proxy-sinc-update" << EOF
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
echo "A procurar por atualizações para o serviço Proxy-Sinc..."
|
||||||
|
UPDATE_SCRIPT_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder/raw/branch/main/setup.sh"
|
||||||
|
TEMP_SCRIPT="/tmp/setup_latest.sh"
|
||||||
|
echo "A baixar a versão mais recente do instalador de: \$UPDATE_SCRIPT_URL"
|
||||||
|
if curl -k -L "\$UPDATE_SCRIPT_URL" -o "\$TEMP_SCRIPT"; then
|
||||||
|
chmod +x "\$TEMP_SCRIPT"
|
||||||
|
echo "Instalador baixado com sucesso. A executar a atualização..."
|
||||||
|
sudo "\$TEMP_SCRIPT"
|
||||||
|
rm "\$TEMP_SCRIPT"
|
||||||
|
echo "Atualização concluída!"
|
||||||
|
else
|
||||||
|
echo "ERRO: Falha ao baixar o script de atualização." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Gera os ficheiros de serviço do systemd
|
||||||
|
cat > "$SYSTEMD_DIR/proxy-sinc.service" << 'EOF'
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Serviço de Sincronização de Configurações do Nginx para o Git
|
Description=Serviço de Sincronização de Configurações do Nginx para o Git
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
@ -144,7 +217,8 @@ After=network.target
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=/usr/local/sbin/commit_configs.sh
|
ExecStart=/usr/local/sbin/commit_configs.sh
|
||||||
EOF
|
EOF
|
||||||
cat > ./proxy-sinc.timer << 'EOF'
|
|
||||||
|
cat > "$SYSTEMD_DIR/proxy-sinc.timer" << 'EOF'
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Executa o serviço de sincronização de configurações a cada minuto
|
Description=Executa o serviço de sincronização de configurações a cada minuto
|
||||||
[Timer]
|
[Timer]
|
||||||
|
|
@ -154,61 +228,69 @@ Unit=proxy-sinc.service
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=timers.target
|
WantedBy=timers.target
|
||||||
EOF
|
EOF
|
||||||
cat > ./proxy-sinc.8 << 'EOF'
|
|
||||||
|
# Gera a nova man page
|
||||||
|
cat > "/tmp/proxy-sinc.8" << 'EOF'
|
||||||
.TH PROXY-SINC 8 "Setembro 2025" "iT Guys - Equipa de Infraestrutura" "Ferramentas de Sistema"
|
.TH PROXY-SINC 8 "Setembro 2025" "iT Guys - Equipa de Infraestrutura" "Ferramentas de Sistema"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
proxy-sinc \- Serviço de versionamento automático de configurações de servidor
|
proxy-sinc \- Serviço de versionamento automático de configurações de servidor
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
Este serviço é gerido pelo systemd e não se destina a ser executado manualmente.
|
.B systemctl status proxy-sinc.timer
|
||||||
.br
|
.br
|
||||||
Para verificar o status: \fBsystemctl status proxy-sinc.timer\fR
|
.B journalctl -u proxy-sinc.service
|
||||||
.br
|
.br
|
||||||
Para ver os logs: \fBjournalctl -u proxy-sinc.service\fR
|
.B proxy-sinc-update
|
||||||
|
.br
|
||||||
|
.B man proxy-sinc
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B proxy-sinc
|
.B proxy-sinc
|
||||||
é um serviço de sistema que automatiza o controlo de versões de ficheiros de configuração críticos. A cada minuto, ele executa um script que sincroniza os diretórios de configuração do Nginx e do Fail2ban para um repositório Git local. Se forem detetadas alterações, ele cria um commit com um timestamp e envia as alterações para um repositório Git remoto (Gitea).
|
é um serviço de sistema que automatiza o controlo de versões de ficheiros de configuração críticos. A cada minuto, ele executa um script que sincroniza os ficheiros e diretórios definidos em \fI/etc/proxy-sinc/paths.conf\fR para um repositório Git. Se forem detetadas alterações, ele cria um commit e envia as alterações para um repositório Git remoto (Gitea).
|
||||||
.PP
|
.PP
|
||||||
A autenticação com o Gitea é feita através de um Token de Acesso, e a identidade do committer é definida automaticamente com o hostname do servidor. A verificação de certificados SSL pode ser desativada durante a instalação para uso com servidores Gitea internos.
|
Esta abordagem garante um histórico completo de todas as alterações, facilita a recuperação de desastres e serve como um backup centralizado.
|
||||||
.SH CONFIGURAÇÃO
|
.SH CONFIGURAÇÃO
|
||||||
Os ficheiros principais deste serviço estão localizados nos seguintes caminhos:
|
A gestão dos ficheiros e diretórios a serem sincronizados é feita através do ficheiro de texto:
|
||||||
|
.TP
|
||||||
|
\fB/etc/proxy-sinc/paths.conf\fR
|
||||||
|
Este ficheiro contém a lista de caminhos absolutos a serem versionados. Adicione um caminho por linha. Linhas vazias ou que começam com '#' são ignoradas. O script irá sincronizar cada caminho para um subdiretório com o mesmo nome dentro do repositório Git.
|
||||||
|
.SH ATUALIZAÇÃO
|
||||||
|
Para atualizar o serviço e os seus scripts para a versão mais recente, execute o seguinte comando como root:
|
||||||
|
.sp
|
||||||
|
\fBproxy-sinc-update\fR
|
||||||
|
.sp
|
||||||
|
Este comando irá baixar e executar a versão mais recente do script de instalação a partir do repositório Git oficial, atualizando todos os componentes necessários.
|
||||||
|
.SH FICHEIROS
|
||||||
.TP
|
.TP
|
||||||
\fB/usr/local/sbin/commit_configs.sh\fR
|
\fB/usr/local/sbin/commit_configs.sh\fR
|
||||||
O script principal que executa a lógica de sincronização e commit.
|
O script principal que executa a lógica de sincronização e commit.
|
||||||
.TP
|
.TP
|
||||||
|
\fB/usr/local/sbin/proxy-sinc-update\fR
|
||||||
|
O script que gere a auto-atualização do serviço.
|
||||||
|
.TP
|
||||||
\fB/etc/systemd/system/proxy-sinc.service\fR
|
\fB/etc/systemd/system/proxy-sinc.service\fR
|
||||||
O ficheiro de unidade do systemd que define como executar o script.
|
O ficheiro de unidade do systemd que define como executar o script.
|
||||||
.TP
|
.TP
|
||||||
\fB/etc/systemd/system/proxy-sinc.timer\fR
|
\fB/etc/systemd/system/proxy-sinc.timer\fR
|
||||||
O ficheiro de timer do systemd que define a frequência de execução (a cada minuto).
|
O ficheiro de timer do systemd que define a frequência de execução.
|
||||||
.TP
|
.TP
|
||||||
\fB/opt/config_repo\fR
|
\fB/opt/config_repo\fR
|
||||||
O diretório local onde o repositório Git é clonado e as configurações são preparadas antes do commit.
|
O diretório local onde o repositório Git é clonado.
|
||||||
.SH LOGGING
|
|
||||||
Toda a saída do script (tanto a standard como a de erro) é automaticamente capturada pelo \fBjournald(1)\fR. Para ver os logs em tempo real, use:
|
|
||||||
.sp
|
|
||||||
\fIjournalctl -u proxy-sinc.service -f\fR
|
|
||||||
.SH SEGURANÇA
|
|
||||||
O script usa \fBrsync(1)\fR para copiar as configurações para uma área de "staging" antes do commit. Isto é uma prática de segurança deliberada para evitar os perigos de usar um diretório de configuração do sistema (ex: /etc/nginx) diretamente como um repositório Git. Um comando \fBgit checkout\fR acidental poderia alterar a configuração em produção instantaneamente, causando paragens de serviço.
|
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
.BR git (1),
|
.BR git (1),
|
||||||
.BR rsync (1),
|
.BR rsync (1),
|
||||||
.BR systemd.service (5),
|
.BR systemd.service (5),
|
||||||
.BR systemd.timer (5),
|
.BR systemd.timer (5)
|
||||||
.BR crontab (5)
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# --- 7. Mover ficheiros para os locais corretos e instalar ---
|
||||||
# --- Mover ficheiros para os locais corretos e instalar ---
|
|
||||||
mv ./commit_configs.sh "$SCRIPT_INSTALL_DIR/"
|
|
||||||
chmod +x "$SCRIPT_INSTALL_DIR/commit_configs.sh"
|
chmod +x "$SCRIPT_INSTALL_DIR/commit_configs.sh"
|
||||||
mv ./proxy-sinc.service "$SYSTEMD_DIR/"
|
chmod +x "$SCRIPT_INSTALL_DIR/proxy-sinc-update"
|
||||||
mv ./proxy-sinc.timer "$SYSTEMD_DIR/"
|
# (os ficheiros de serviço já foram criados no sítio certo)
|
||||||
mkdir -p "$MAN_DIR"
|
mkdir -p "$MAN_DIR"
|
||||||
mv ./proxy-sinc.8 "$MAN_DIR/"
|
mv "/tmp/proxy-sinc.8" "$MAN_DIR/"
|
||||||
gzip -f "$MAN_DIR/proxy-sinc.8"
|
gzip -f "$MAN_DIR/proxy-sinc.8"
|
||||||
info "Ficheiros instalados com sucesso."
|
info "Ficheiros instalados com sucesso."
|
||||||
|
|
||||||
# --- Ativar o Serviço ---
|
# --- 8. Ativar o Serviço ---
|
||||||
info "A recarregar o systemd e a ativar o timer..."
|
info "A recarregar o systemd e a ativar o timer..."
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable --now proxy-sinc.timer
|
systemctl enable --now proxy-sinc.timer
|
||||||
|
|
@ -217,7 +299,7 @@ info "Serviço ativado e a correr!"
|
||||||
# --- Conclusão ---
|
# --- Conclusão ---
|
||||||
echo ""
|
echo ""
|
||||||
info "======================================================================"
|
info "======================================================================"
|
||||||
info " Instalação Concluída!"
|
info " Instalação/Atualização Concluída!"
|
||||||
info "======================================================================"
|
info "======================================================================"
|
||||||
info "O serviço 'proxy-sinc' está agora ativo e irá sincronizar as suas"
|
info "O serviço 'proxy-sinc' está agora ativo e irá sincronizar as suas"
|
||||||
info "configurações para o Gitea a cada minuto."
|
info "configurações para o Gitea a cada minuto."
|
||||||
|
|
@ -227,5 +309,9 @@ info " Ver o status do timer: systemctl status proxy-sinc.timer"
|
||||||
info " Ver os logs da última execução: systemctl status proxy-sinc.service"
|
info " Ver os logs da última execução: systemctl status proxy-sinc.service"
|
||||||
info " Ver o histórico de logs: journalctl -u proxy-sinc.service"
|
info " Ver o histórico de logs: journalctl -u proxy-sinc.service"
|
||||||
info " Ler o manual de ajuda: man proxy-sinc"
|
info " Ler o manual de ajuda: man proxy-sinc"
|
||||||
|
info " Para atualizar o serviço no futuro: proxy-sinc-update"
|
||||||
|
info ""
|
||||||
|
info "Para adicionar novos ficheiros/pastas à sincronização, edite:"
|
||||||
|
info " /etc/proxy-sinc/paths.conf"
|
||||||
info ""
|
info ""
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue