Статьи

Создание вашего стартапа с помощью PHP: выбор и настройка производственного хостинга

Конечный продукт
Что вы будете создавать

Это руководство является частью серии « Создай свой стартап с помощью PHP» на Envato Tuts +. В этой серии я проведу вас через запуск стартапа от концепции до реальности, используя мое приложение Meeting Planner в качестве примера из реальной жизни. На каждом этапе я буду публиковать код Планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете извлечь уроки. Я также буду решать вопросы, связанные с бизнесом по мере их возникновения

В этом руководстве я расскажу о выборе идеальной хостинговой платформы для Meeting Planner и начальной конфигурации нашего сервера. Я проведу вас через весь процесс, пока я не переведу веб-сайт перед запуском в лучшую производственную среду для нашего предстоящего альфа-запуска.

Если вы еще не опробовали Планировщик собраний, запланируйте свою первую встречу . Я принимаю участие в комментариях ниже, так что скажите мне, что вы думаете! Мне особенно интересно, если вы хотите предложить функции или темы для будущих уроков.

Напоминаем, что весь код для Meeting Planner написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2 .

Для многих компаний Amazon AWS является новым решением для перехода. Когда AWS выходит из строя, то же самое делают многие из самых известных веб-сервисов. Но AWS также является дорогостоящим, часто слишком сложным, и им управляет компания, которая в прошлом враждебно относилась к сотрудникам , особенно к работницам и работникам склада. Кроме того, Amazon в одиночку оказала давление на быстрое чрезмерное развитие моего родного города Сиэтла таким образом, что коренным образом изменил город навсегда , но не обязательно навсегда .

Недавно я написал руководство по альтернативам Amazon для облачных вычислений. Есть много конкурентов, не таких больших, но гораздо лучше, доступнее и проще в использовании. По мере роста Планировщика собраний я могу снова рассмотреть вопрос об AWS, но сейчас я хочу поискать в другом месте.

В ближайшем будущем, самое большее, мне понадобится один или два сервера, на которых будут работать веб-службы и службы баз данных. Для этого отлично работают управляемые хостинговые компании, такие как Rackspace , Linode и мой любимый Digital Ocean .

На данный момент Meeting Planner может работать на одном сервере, но по мере его роста, возможно, мне потребуется несколько веб-серверов и серверов баз данных. Исходя из моего опыта, AWS облегчает реализацию этого, но опытные системные администраторы могут легко сделать это с вышеупомянутыми облачными провайдерами.

Из этого туториала вы узнаете, как запустить веб-сервер и сервер баз данных в облаках Digital Ocean.

Я написал несколько учебных пособий о Digital Ocean в Envato Tuts +, в том числе о том, как использовать их API для настройки сервера. Я также недавно написал о своем положительном опыте с партнерской программой Digital Ocean . Полное раскрытие информации: по запросу Digital Ocean предоставила небольшой счет для покрытия расходов на каплю для этой серии стартапов на срок до шести месяцев.

За последние два года, что я был там пользователем, они постоянно улучшали качество обслуживания, удобство использования, поддержку и набор функций. Некоторое время назад очень редко происходили замедления или простои, которые часто встречались на раннем рынке облачного хостинга.

Приступим к настройке начального рабочего сервера для Meeting Planner.

Экземпляры Digital Ocean называются каплями. Я уверен, что они думали назвать их головастиками или рыбами, но мы, разработчики, часто их уничтожаем, поэтому не чувствительная капелька — лучший термин.

В меню « Капли» мы создадим каплю . Сначала мы выбираем Ubuntu 14.04 для нашего образа и серверный вариант за 10 долларов:

Хостинг Планировщика собраний - создание капли

Затем я выбрал регион Сан-Франциско, потому что он мне ближе всего:

Хостинг Планировщика Встреч - Выберите Регион

Я также попросил Digital Ocean повторно использовать мой открытый ключ для установления логина; ключ входа более безопасен, чем пароль входа. Затем я выбрал имя хоста apps.meetingplanner.io для сервера:

Хостинг Планировщика собраний - выберите имя хоста

Когда вы нажмете « Создать» , вы увидите, что формируется капля:

Хостинг Планировщика Встреч - Статус Создаваемой Капли

Как только он будет готов, вам будет предоставлен IP-адрес, на который я сопоставил записи домена meetingplanner.io для начальной конфигурации:

Хостинг Планировщика собраний - обновление записей DNS для указания на каплю

Я подожду позже, чтобы сопоставить корневой домен meetingplanner.io с новым сервером.

Вот что вы увидите при первом входе на сервер:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ ssh -i ~/.ssh/id_lookahead [email protected]
You are required to change your password immediately (root enforced)
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-85-generic x86_64)
 
 * Documentation: https://help.ubuntu.com/
 
  System information as of Wed May 18 15:59:01 EDT 2016
 
  System load: 0.0 Memory usage: 5% Processes: 54
  Usage of /: 4.2% of 29.40GB Swap usage: 0% Users logged in: 0
 
  Graph this data and manage this system at:
    https://landscape.canonical.com/
 
0 packages can be updated.
0 updates are security updates.
 
 
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
 
Changing password for root.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:

Digital Ocean предлагает широкий выбор полезных руководств. Я создал нового пользователя для своей основной учетной записи без полномочий root и учетных записей развертывания, используя этот объяснитель .

Я также отредактировал конфигурацию SSH, чтобы исключить корневой вход в систему и настроить порт SSH по умолчанию с 22.

Затем я установил типичный сервер UAMP (Ubuntu, Apache, PHP и MySQL) на сервер. Возможно, я только что создал новую дочернюю аббревиатуру LAMP.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached php5-mcrypt
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
  apache2 apache2-bin apache2-data libaio1 libapache2-mod-php5 libapr1
  libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl
  libdbi-perl libhtml-template-perl libmemcached10 libmysqlclient18
  libterm-readkey-perl mysql-client-5.5 mysql-client-core-5.5 mysql-common
  mysql-server-5.5 mysql-server-core-5.5 php-pear php5-cli php5-common
  php5-json php5-readline ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils
  libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl
  libsql-statement-perl libipc-sharedcache-perl libcache-memcached-perl
  libmemcached tinyca mailx php5-dev php5-user-cache openssl-blacklist
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data libaio1 libapache2-mod-php5 libapr1
  libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl
  libdbi-perl libhtml-template-perl libmemcached10 libmysqlclient18
  libterm-readkey-perl memcached mysql-client-5.5 mysql-client-core-5.5
  mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php-pear
  php5 php5-cli php5-common php5-json php5-memcached php5-mysql php5-readline
  ssl-cert
0 upgraded, 31 newly installed, 0 to remove and 0 not upgraded.
Need to get 15.7 MB of archives.
After this operation, 126 MB of additional disk space will be used.
Do you want to continue?
Get:1 http://mirrors.digitalocean.com/ubuntu/ trusty/main libaio1 amd64 0.3.109-4 [6,364 B]
Get:2 http://mirrors.digitalocean.com/ubuntu/ trusty/main libapr1 amd64 1.5.0-1 [85.1 kB]
Enabling module mpm_prefork.
apache2_switch_mpm Switch to prefork
 * Restarting web server apache2 [ OK ]
apache2_invoke: Enable module php5
 * Restarting web server apache2 [ OK ]
Setting up php5 (5.5.9+dfsg-1ubuntu4.16) …
Processing triggers for libc-bin (2.19-0ubuntu6.7) …

Затем я настроил часовой пояс по умолчанию. Планировщик собраний работает по тихоокеанскому стандартному времени (PST). Я редактировал php.ini :

1
sudo nano /etc/php5/apache2/php.ini

И я добавил это:

1
date.timezone = ‘America/Los_Angeles’

Теперь пришло время разместить нашу кодовую базу на сервере.

Сначала я установил git :

1
sudo apt-get install git

Затем, как мой пользователь развертывания кода, я создал новый ключ SSH для установления безопасного соединения с GitHub:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ssh-keygen -t rsa -C «[email protected]»
Generating public/private rsa key pair.
Enter file in which to save the key (/home/deploy/.ssh/id_rsa):
Created directory ‘/home/deploy/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/deploy/.ssh/id_rsa.
Your public key has been saved in /home/deploy/.ssh/id_rsa.pub.
The key fingerprint is:
f7:84:37:b3:e4:7b:d3:9c:0c:60:b4:b7:4c:86:53:cb [email protected]
The key’s randomart image is:
+—[ RSA 2048]—-+
|
|
|
|
|
|
|
|
|
+——————+
deploy@apps:/var/www$ eval `ssh-agent -s`
Agent pid 7827
deploy@apps:/var/www$ ssh-add ~/.ssh/id_rsa
Identity added: /home/deploy/.ssh/id_rsa (/home/deploy/.ssh/id_rsa)
deploy@apps:/var/www$ cat < ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDM8JCAg7aPbB7The4Lmk42BpwPv9Eoc/k7As+N7nh5/JUVKK47AjxqvqeHvtntl8vbsaucNmuIM71OzH+36rbypqskfm2bbUk/bJk2qoqZK9V8Qc931Tj5i4IU9t90UOi55vwdZN0/xeEoJtzrerZn9l7xmJX2Ubarb4yKQSlSgiPHYQWYqD7QEGDtE4iUaqwwDWts/u1eajU/I+SubAyxbnT8WwwaqqA2Pm/N7PakKXgQdSquAdjh3mkvYxtL1kyTm/kFRi5tE/K3PIYfh0aLWhNiXEYnh6fQ2iXYRqT40F1IWEHF0Lv1ig5nTgFEUz2xaqzS18JDXw0lpwvZa3Sp [email protected]
deploy@apps:/var/www$ ssh -T [email protected]
The authenticity of host ‘github.com (192.30.252.122)’ can’t be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added ‘github.com,192.30.252.122’ (RSA) to the list of known hosts.
Hi newscloud!

Вы также должны вставить ключ в настройки своего аккаунта Git.

Далее я установил Composer:

1
2
$ curl -sS https://getcomposer.org/installer |
composer

Я очень люблю composer, потому что он экономит так много времени, но бывают дни, когда он раздражает его, когда он перестает работать из ниоткуда — например, когда Yii Framework требует, чтобы вы установили fxp / composer-asset-plugin для правильного использования :

1
2
$ composer global require «fxp/composer-asset-plugin:^1.0»
$ composer update

Правда, я использовал GitHub для синхронизации последнего кода, пока не вспомнил, что на самом деле Yii2 настраивает множество файлов, которые GitHub игнорирует, включая index.php. Существуют также файлы локальных ключей и загруженные изображения профиля пользователя. Итак, я использовал tar для сжатия активной кодовой базы:

1
tar czf mp_may2016.tar.gz mp

Затем я использовал SCP для перемещения файлов на новый сервер, а затем извлек его:

1
2
scp -i ~/.ssh/id_lookahead -P 3327 ~/mpmigrate/mp_may2016.tar.gz [email protected]:~
tar -xzf mp_may2016.tar.gz

В конечном итоге была проведена некоторая работа по проверке ключей локальной базы данных (которые я обновил на новом сервере) и проверке прав доступа к моим файлам.

Теперь давайте переместим базу данных.

Сначала я сбросил существующую базу данных в файл:

1
$ mysqldump -uroot -p —opt mp > mp_may2016.sql

Затем я переместил его на новый сервер с помощью scp:

1
$ scp -i ~/.ssh/id_lookahead -P 22533 [email protected]:~/mp_may2016.sql .

На новом сервере я создал новую базу данных с новыми данными и настроил некоторые разрешения для Apache:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.
Your MySQL connection id is 43
Server version: 5.5.49-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates.
owners.
Type ‘help;’
mysql> create database mp_database;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on mp_database.* TO «mp_master»@»localhost» identified by «xYxYZxZx1a»;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;

Наконец, я импортировал файл sql в новую базу данных:

1
$ mysql -u root -p mp_database < ~/mp_may2016.sql

Тогда пришло время настроить Apache.

Я создал файл .conf на новом сервере:

1
2
$ cd /etc/apache2/sites-available
$ sudo nano 000-mp.conf

Я смог извлечь большую часть из существующего файла .conf:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
VirtualHost *:80>
 ServerName meetingplanner.io
 ServerAlias www.meetingplanner.io
 ServerAlias alpha.meetingplanner.io
DocumentRoot «/var/www/mp/frontend/web»
<Directory «/var/www/mp/frontend/web»>
    # use mod_rewrite for pretty URL support
    RewriteEngine on
    # If a directory or a file exists, use the request directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Otherwise forward the request to index.php
    RewriteRule .
</Directory>
</VirtualHost>

Затем я активировал сайт и перезагрузил Apache:

1
2
sudo a2ensite 000-mp.conf
sudo service apache2 reload

Как я упоминал ранее, я должен был убедиться, что локальные файлы с ключами и путями среды были правильными на новом сервере.

Хотя были определенные неровности, в конечном итоге все сошлось.

Наконец, я заново сопоставил DNS для основного URL-адреса Планировщика собраний. Вскоре после этого новый сервер заработал:

Серия Startup - Домашняя страница Планировщика встреч

Вы можете заметить, что я использовал мой недавний учебник об удивительно удивительном Let’s Encrypt : я установил https для Meeting Planner перед тем, как сделать снимок экрана выше.

Планировщик собраний и Let’s Encrypt используют cron для запуска ключевых процессов в фоновом режиме. Итак, я перенес настройки crontab со старого сервера:

1
$ sudo crontab -e
1
2
3
# mh dom mon dow command
*/5 * * * * wget -O /dev/null http://meetingplanner.io/daemon/update
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

Прочтите это, если вам интересно, почему я ссылаюсь на cron в нижнем регистре .

Встреча Планировщика сделала огромный прогресс за последние несколько месяцев. Я запланировал деловые встречи, и несколько личных встреч решили запланировать вторые свидания со мной, используя приложение. Тем не менее, все еще есть много недостатков, и обратная связь от ранних пользователей имеет жизненно важное значение. Итак, в следующем уроке я собираюсь настроить систему сбора отзывов от пользователей, помогать им получать ответы на общие вопросы и учиться как можно лучше, чтобы сделать сервис лучше перед объявлением MVP и альфа-запуском.

Я надеюсь, вам понравился этот эпизод. Следите за будущими уроками в нашей серии « Построение стартапа с помощью PHP» — здесь также есть много полезной работы и еще несколько важных функций.

Пожалуйста, не стесняйтесь добавлять свои вопросы и комментарии ниже; Я обычно участвую в обсуждениях. Вы также можете связаться со мной через Twitter @reifman напрямую.