Skip to content

Instantly share code, notes, and snippets.

@1234ru
Last active April 18, 2023 12:00
Show Gist options
  • Save 1234ru/5d8cb0b35aa6d297d253c247e0ab91f7 to your computer and use it in GitHub Desktop.
Save 1234ru/5d8cb0b35aa6d297d253c247e0ab91f7 to your computer and use it in GitHub Desktop.
Первые шаги при развёртывании окружения для разработки

Подготовка сервера разработки

  1. Создаем общий каталог для проекта. Там будет располагаться каталог веб-сервера (или несколько, если одновременно будут существовать несколько копий), находиться служебные скрипты и пр. Например, /sites/mysite (здесь и далее обозначен как @).

Организация доступа к production-серверу (если есть)

  1. Если рабочая площадка уже есть - получаем доступ по SSH, логинимся.

  2. Проверяем, есть ли на сервере git (если нет - выясняем, можно ли его установить).

Настраиваем удобство доступа

  1. Добавляем публичные ключи с помощью echo "..." >> ~/.ssh/authorized_keys:

    • с локального компьютера (открываем key.ppk для putty, копируем публичный ключ)
    • ключ с сервера разработки
      • логинимся на него
      • делаем cat ~/.ssh/id_rsa.pub; если такого файла нет:
        • запускаем ssh-keygen
        • два раза нажимаем Enter
        • при желании, редактируем комментарий (последовательность символов до последнего пробела)
        • повторяем cat
      • копируем публичный ключ и записываем его на целевой сервер ВНИМАНИЕ! при использовании putty между командой cat и копированием ключа в буфер окно не ресайзить! Иначе в строке появятся разрывы, которые потом попадут в буфер и ключ будет скопирован неправильно.
  2. Создаем каталог @/scripts/, в нём - файл _config.sh, куда заносим данные production-сервера:

prod_user="имя_пользователя на production"
prod_host="хост или ip-адрес"
prod_mysql_user="..."
prod_mysql_password="..."
prod_mysql_database="..."

Копирование движка

  1. На production-сервере инициализируем в каталоге веб-сервера репозиторий git. Просматриваем содержимое каталогов (лучше с помощью WinSCP) и аккуратно вручную их добавляем.
    Полезно сразу определить, какие из каталогов занимают больше всех места - возможно, их содержимое не нужно добавлять в репозиторий (например, изображения товаров или кэш CMS). Для этого служит команда du -B 1 -h -d 1 (-d 1 - показывать только первый уровень вложенности). Даем команду git config receive.denyCurrentBranch updateInstead, чтобы можно было пушить изменения из подчиненных репозиториев прямо сюда (иначе не даст).

  2. На сервере разработки создаем каталог веб-сервера для dev-версии (например, /sites/mysite/dev) и выполняем там git clone ssh://username@domain/~/.../.git .; или проще - из локального каталога: git clone ../prod ..

Настройка nginx

  • запускаем интерактивный shell рута с помощью su или выполняем все команды с помощью sudo
  • создаем файл конфигурации: touch /etc/nginx/sites-enabled/mysite, пример здесь
  • при необходимости, меняем ему владельца или права так, чтобы было удобно редактировать
  • сохраняем конфигурацию, перезапускаем: nginx -s reload

База данных

  1. На dev-сервере подключаемся к MySQL под рутом, создаем БД и пользователя под проект. С версии 5.7 для этого не нужно значить пароль рута в MySQL, достаточно подключиться от имени рута ОС через sudo или su (пароль для 1234ru.net см. в письме от paulmd 24 мая 2017 г.):

    • su - вводим пароль
    • mysql - подключаемся, проверяем командой SHOW GRANTS; - всё должно быть для root
    • CREATE DATABASE (mysite)_dev CHARACTER SET UTF8;
    • GRANT ALL ON (mysite)_dev.* TO (mysite) IDENTIFIED BY '(придумать пароль)';
    • выходим из mysql и из su, пробуем авторизоваться под вновь созданным пользователем в консоли mysql, делаем SHOW GRANTS;
  2. Получаем данные для доступа к базе данных на production - имя пользователя, пароль и название БД (также посмотреть хост, хотя он обычно localhost). Их заносим в @/scripts/_config.sh.

  3. Создаем скрипт @/scripts/db-refresh.sh для копирования базы данных с prod на dev:

    dir="$(dirname "$0")"
    . $dir/_config.sh # обязательно с $dir, иначе пишет not found
    ssh $prod_user@$prod_host "mysqldump -u $prod_mysql_user -p$prod_mysql_password $prod_mysql_db" | \
        mysql -u $dev_mysql_user -p$dev_mysql_password $dev_mysql_db
    

    Запускаем его каждый раз, когда нужно обновить содержимое базы данных.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment