diff --git a/env.template b/env.template index bb1f150..63839d0 100644 --- a/env.template +++ b/env.template @@ -27,25 +27,3 @@ SERVER_IP=your_server_ip_here # Status Page Configuration STATUS_PAGE_PASSWORD=admin123 - -# Ansible Configuration (for one-time server setup) -# Основные настройки проекта -PROJECT_ROOT=/home/prod -DEPLOY_USER=deploy -DEPLOY_UID=1001 -DEPLOY_GID=1001 - -# Старый сервер для миграции -OLD_SERVER=root@77.223.98.129 - -# Настройки мониторинга для Ansible -MONITORING_USERNAME=admin -MONITORING_PASSWORD=admin123 - -# SSL настройки -USE_LETSENCRYPT=false - -# Logrotate настройки -LOGROTATE_RETENTION_DAYS=30 -LOGROTATE_COMPRESS=true -LOGROTATE_DELAYCOMPRESS=true diff --git a/infra/ansible/playbook.yml b/infra/ansible/playbook.yml index 5951076..01db943 100644 --- a/infra/ansible/playbook.yml +++ b/infra/ansible/playbook.yml @@ -5,13 +5,13 @@ vars: # Основная директория проекта - project_root: "{{ lookup('env', 'PROJECT_ROOT') | default('/home/prod') }}" + project_root: "/home/prod" # Пользователь и группа - deploy_user: "{{ lookup('env', 'DEPLOY_USER') | default('deploy') }}" - uid: "{{ lookup('env', 'DEPLOY_UID') | default('1001') }}" - gid: "{{ lookup('env', 'DEPLOY_GID') | default('1001') }}" + deploy_user: "deploy" + uid: 1001 + gid: 1001 # Старый сервер для копирования данных - old_server: "{{ lookup('env', 'OLD_SERVER') | default('root@77.223.98.129') }}" + old_server: "root@77.223.98.129" # Опция: пересоздавать папку /home/prod (по умолчанию — нет) recreate_project: false # Grafana настройки @@ -332,6 +332,218 @@ group: "{{ deploy_user }}" mode: '0600' + # ======================================== + # КОПИРОВАНИЕ КОНФИГУРАЦИИ ZSH (ROOT) + # ======================================== + + - name: "[4/10] Создать директорию .zsh для пользователя deploy" + file: + path: "/home/{{ deploy_user }}/.zsh" + state: directory + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0755' + + - name: "[4/10] Копировать .zshrc со старого сервера" + fetch: + src: "/home/prod/.zshrc" + dest: "/tmp/deploy_zshrc" + flat: yes + delegate_to: "{{ old_server }}" + ignore_errors: yes + + - name: "[4/10] Переместить .zshrc на новое место" + copy: + src: "/tmp/deploy_zshrc" + dest: "/home/{{ deploy_user }}/.zshrc" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + ignore_errors: yes + + - name: "[4/10] Копировать .zshenv со старого сервера" + fetch: + src: "/home/prod/.zshenv" + dest: "/tmp/deploy_zshenv" + flat: yes + delegate_to: "{{ old_server }}" + ignore_errors: yes + + - name: "[4/10] Переместить .zshenv на новое место" + copy: + src: "/tmp/deploy_zshenv" + dest: "/home/{{ deploy_user }}/.zshenv" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + ignore_errors: yes + + - name: "[4/10] Копировать .zprofile со старого сервера" + fetch: + src: "/home/prod/.zprofile" + dest: "/tmp/deploy_zprofile" + flat: yes + delegate_to: "{{ old_server }}" + ignore_errors: yes + + - name: "[4/10] Переместить .zprofile на новое место" + copy: + src: "/tmp/deploy_zprofile" + dest: "/home/{{ deploy_user }}/.zprofile" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + ignore_errors: yes + + - name: "[4/10] Копировать .zlogin со старого сервера" + fetch: + src: "/home/prod/.zlogin" + dest: "/tmp/deploy_zlogin" + flat: yes + delegate_to: "{{ old_server }}" + ignore_errors: yes + + - name: "[4/10] Переместить .zlogin на новое место" + copy: + src: "/tmp/deploy_zlogin" + dest: "/home/{{ deploy_user }}/.zlogin" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + ignore_errors: yes + + - name: "[4/10] Копировать .zlogout со старого сервера" + fetch: + src: "/home/prod/.zlogout" + dest: "/tmp/deploy_zlogout" + flat: yes + delegate_to: "{{ old_server }}" + ignore_errors: yes + + - name: "[4/10] Переместить .zlogout на новое место" + copy: + src: "/tmp/deploy_zlogout" + dest: "/home/{{ deploy_user }}/.zlogout" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + ignore_errors: yes + + - name: "[4/10] Копировать директорию .zsh со старого сервера (если существует)" + command: > + rsync -avz --progress --stats --partial --verbose + root@77.223.98.129:/home/prod/.zsh/ + /home/{{ deploy_user }}/.zsh/ + ignore_errors: yes + + - name: "[4/10] Установить правильные права на все zsh файлы" + file: + path: "/home/{{ deploy_user }}/.zsh" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0755' + recurse: yes + + - name: "[4/10] Создать базовый .zshrc если файлы не были скопированы" + copy: + content: | + # Zsh configuration + # This file was created automatically by Ansible + # Original configuration files were not found on the old server + + # Enable completion system + autoload -Uz compinit + compinit + + # Enable colors + autoload -Uz colors + colors + + # History configuration + HISTFILE=~/.zsh_history + HISTSIZE=10000 + SAVEHIST=10000 + setopt HIST_IGNORE_DUPS + setopt HIST_IGNORE_ALL_DUPS + setopt HIST_SAVE_NO_DUPS + setopt HIST_FIND_NO_DUPS + setopt SHARE_HISTORY + + # Directory navigation + setopt AUTO_CD + setopt AUTO_PUSHD + setopt PUSHD_IGNORE_DUPS + setopt PUSHD_SILENT + + # Completion + setopt AUTO_LIST + setopt AUTO_MENU + setopt COMPLETE_IN_WORD + setopt ALWAYS_TO_END + + # Prompt + PROMPT='%F{blue}%n@%m%f %F{green}%~%f %# ' + + # Aliases + alias ll='ls -la' + alias la='ls -A' + alias l='ls -CF' + alias ..='cd ..' + alias ...='cd ../..' + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' + + # Docker aliases + alias d='docker' + alias dc='docker-compose' + alias dps='docker ps' + alias dpsa='docker ps -a' + alias di='docker images' + alias dex='docker exec -it' + + # Git aliases + alias gs='git status' + alias ga='git add' + alias gc='git commit' + alias gp='git push' + alias gl='git log --oneline' + alias gd='git diff' + + # Project specific + alias prod='cd /home/prod' + alias bots='cd /home/prod/bots' + alias logs='cd /home/prod/bots/*/logs' + + # Environment + export PATH="$PATH:/usr/local/bin" + export EDITOR=vim + + # Load additional configurations if they exist + [ -f ~/.zshrc.local ] && source ~/.zshrc.local + dest: "/home/{{ deploy_user }}/.zshrc" + owner: "{{ deploy_user }}" + group: "{{ deploy_user }}" + mode: '0644' + when: ansible_check_mode == false + + - name: "[4/10] Очистить временные файлы zsh конфигурации" + file: + path: "{{ item }}" + state: absent + loop: + - "/tmp/deploy_zshrc" + - "/tmp/deploy_zshenv" + - "/tmp/deploy_zprofile" + - "/tmp/deploy_zlogin" + - "/tmp/deploy_zlogout" + ignore_errors: yes + # ======================================== # ЭТАП 5: КЛОНИРОВАНИЕ РЕПОЗИТОРИЕВ (DEPLOY) # ======================================== @@ -622,6 +834,7 @@ - "{{ project_root }}/infra/uptime-kuma/backup" - "{{ project_root }}/infra/alertmanager" - "{{ project_root }}/infra/grafana/dashboards" + - "{{ project_root }}/infra/logrotate" - "{{ project_root }}/scripts" - /etc/nginx/passwords @@ -643,6 +856,7 @@ group: www-data mode: '0640' create: yes + state: present - name: "[8/10] Сгенерировать самоподписанный SSL сертификат (fallback)" command: > @@ -912,6 +1126,7 @@ group: root mode: '0644' backup: yes + remote_src: yes - name: "[9.5/10] Настроить logrotate для системных сервисов" template: @@ -921,6 +1136,7 @@ group: root mode: '0644' backup: yes + remote_src: yes - name: "[9.5/10] Создать директории для логов ботов" file: @@ -953,6 +1169,7 @@ name: "Logrotate daily" job: "0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf" user: root + state: present # ======================================== # ЭТАП 10: ЗАПУСК ПРИЛОЖЕНИЙ И ПРОВЕРКИ (DEPLOY + ROOT) diff --git a/infra/logrotate/logrotate_bots.conf.j2 b/infra/logrotate/logrotate_bots.conf.j2 index 15a25ab..d0c318e 100644 --- a/infra/logrotate/logrotate_bots.conf.j2 +++ b/infra/logrotate/logrotate_bots.conf.j2 @@ -4,9 +4,9 @@ {{ project_root }}/bots/*/logs/*.log { daily missingok - rotate {{ lookup('env', 'LOGROTATE_RETENTION_DAYS') | default('30') }} - {% if lookup('env', 'LOGROTATE_COMPRESS') | default('true') | lower == 'true' %}compress{% endif %} - {% if lookup('env', 'LOGROTATE_DELAYCOMPRESS') | default('true') | lower == 'true' %}delaycompress{% endif %} + rotate 30 + compress + delaycompress notifempty create 0644 {{ deploy_user }} {{ deploy_user }} postrotate @@ -20,9 +20,9 @@ {{ project_root }}/bots/*/bot_stderr.log { daily missingok - rotate {{ lookup('env', 'LOGROTATE_RETENTION_DAYS') | default('30') }} - {% if lookup('env', 'LOGROTATE_COMPRESS') | default('true') | lower == 'true' %}compress{% endif %} - {% if lookup('env', 'LOGROTATE_DELAYCOMPRESS') | default('true') | lower == 'true' %}delaycompress{% endif %} + rotate 30 + compress + delaycompress notifempty create 0644 {{ deploy_user }} {{ deploy_user }} postrotate diff --git a/infra/logrotate/logrotate_system.conf.j2 b/infra/logrotate/logrotate_system.conf.j2 index e669014..11da2d7 100644 --- a/infra/logrotate/logrotate_system.conf.j2 +++ b/infra/logrotate/logrotate_system.conf.j2 @@ -5,9 +5,9 @@ /var/log/nginx/*.log { daily missingok - rotate {{ lookup('env', 'LOGROTATE_RETENTION_DAYS') | default('30') }} - {% if lookup('env', 'LOGROTATE_COMPRESS') | default('true') | lower == 'true' %}compress{% endif %} - {% if lookup('env', 'LOGROTATE_DELAYCOMPRESS') | default('true') | lower == 'true' %}delaycompress{% endif %} + rotate 30 + compress + delaycompress notifempty create 0644 www-data adm sharedscripts