- Создаем общий каталог для проекта. Там будет располагаться каталог веб-сервера (или несколько, если одновременно будут существовать несколько копий), находиться служебные скрипты и пр.
Например,
/sites/mysite
(здесь и далее обозначен как@
).
-
Если рабочая площадка уже есть - получаем доступ по SSH, логинимся.
-
Проверяем, есть ли на сервере
git
(если нет - выясняем, можно ли его установить).
-
Добавляем публичные ключи с помощью
echo "..." >> ~/.ssh/authorized_keys
:- с локального компьютера (открываем
key.ppk
для putty, копируем публичный ключ) - ключ с сервера разработки
- логинимся на него
- делаем
cat ~/.ssh/id_rsa.pub
; если такого файла нет:- запускаем
ssh-keygen
- два раза нажимаем
Enter
- при желании, редактируем комментарий (последовательность символов до последнего пробела)
- повторяем
cat
- запускаем
- копируем публичный ключ и записываем его на целевой сервер
ВНИМАНИЕ! при использовании
putty
между командойcat
и копированием ключа в буфер окно не ресайзить! Иначе в строке появятся разрывы, которые потом попадут в буфер и ключ будет скопирован неправильно.
- с локального компьютера (открываем
-
Создаем каталог
@/scripts/
, в нём - файл_config.sh
, куда заносим данные production-сервера:
prod_user="имя_пользователя на production"
prod_host="хост или ip-адрес"
prod_mysql_user="..."
prod_mysql_password="..."
prod_mysql_database="..."
-
На production-сервере инициализируем в каталоге веб-сервера репозиторий
git
. Просматриваем содержимое каталогов (лучше с помощьюWinSCP
) и аккуратно вручную их добавляем.
Полезно сразу определить, какие из каталогов занимают больше всех места - возможно, их содержимое не нужно добавлять в репозиторий (например, изображения товаров или кэш CMS). Для этого служит командаdu -B 1 -h -d 1
(-d 1
- показывать только первый уровень вложенности). Даем командуgit config receive.denyCurrentBranch updateInstead
, чтобы можно было пушить изменения из подчиненных репозиториев прямо сюда (иначе не даст). -
На сервере разработки создаем каталог веб-сервера для dev-версии (например,
/sites/mysite/dev
) и выполняем тамgit clone ssh://username@domain/~/.../.git .
; или проще - из локального каталога:git clone ../prod .
.
- запускаем интерактивный shell рута с помощью
su
или выполняем все команды с помощьюsudo
- создаем файл конфигурации:
touch /etc/nginx/sites-enabled/mysite
, пример здесь - при необходимости, меняем ему владельца или права так, чтобы было удобно редактировать
- сохраняем конфигурацию, перезапускаем:
nginx -s reload
-
На 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;
-
Получаем данные для доступа к базе данных на production - имя пользователя, пароль и название БД (также посмотреть хост, хотя он обычно localhost). Их заносим в
@/scripts/_config.sh
. -
Создаем скрипт
@/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
Запускаем его каждый раз, когда нужно обновить содержимое базы данных.