Статьи

Поднимите свой PHP в облако

Эта статья проведет вас через облачный хостинг для вашего PHP-приложения с Pagoda Box . В нем будет подробно описано, как обрабатывать зависимости PHP, запускать и запускать ваши базы данных MySQL (и отлаживать локально), а также легко настраивать различные аспекты PHP.


Как разработчик, который играет с PHP с 11 лет, трудно вспомнить многие вещи, которые полностью изменили мой способ развития. В 2007 году я взял CodeIgniter , что заставило меня переосмыслить, как я структурирую свой код и использую ООП для достижения цели. В 2010 году я начал работать с Git и Git Flow для совместной работы и ветвления, но в последнее время самой большой вещью, которая изменила мой рабочий процесс разработки, была одна «Платформа как услуга», называемая Pagoda Box .

Вы можете быть разработчиком Rockstar, который знает, как настроить стек LAMP, но сколько времени вы потратите на его настройку, оптимизацию, защиту, блокировку, масштабирование ресурсов и мониторинг трафика.

Каждый день я замечаю, как разработчик борется за защиту своего сервера от какой-то группы хакеров или сценаристов, заполняя порт, испытывая затруднения при работе какого-то случайного исправления безопасности, пытаясь перейти на более крупные и мощные серверы, злюсь, пытаясь настроить Capistrano. , список можно продолжить. Такие сервисы, как Pagoda Box, могут помочь вам пропустить все это; так что посмотрим как.


Первый шаг — захватить себе аккаунт. Это бесплатно, так что давай .

Register

Каждое приложение должно иметь уникальное имя, поскольку они также используются для предварительного просмотра URL. Вы можете называть это приложение как хотите, так как вскоре вы будете скрывать его за доменом, но назовите его очевидным и запоминающимся.

SSH Key form

Git — чрезвычайно полезная система управления версиями. Сейчас он очень популярен благодаря таким сайтам, как GitHub, которые предоставляют бесплатный хостинг для социального кода, но он также отлично подходит для развертывания вашего кода.

Если вы новичок в Git, попробуйте ускоренный курс .

Если вы еще этого не сделали, настройте Git . Их документация поможет вам начать. Для пользователей Windows это будет немного сложнее, чем для пользователей OSX или Linux, поэтому, если у вас есть виртуальная машина Ubuntu, сейчас самое время ее запустить.


Чтобы отправить свой код в Pagoda Box, вам необходимо авторизовать свой компьютер, чтобы иметь принудительный доступ к приложениям в вашей учетной записи. Создайте ключ SSH и вставьте его здесь.

SSH Key form

Сначала создайте папку для своего приложения и настройте пульты Git. Remotes по сути являются псевдонимами для URL хранилища. Настроив этот пульт, мы дадим знать нашему местному репозиторию Git, как передавать код в Pagoda Box.

1
2
3
4
$ mkdir my-awesome-app && cd my-awesome-app
$ git init
Initialized empty Git repository in /Users/phil/Sites/my-awesome-app/.git/
$ git remote add pagoda [email protected]:my-awesome-app.git

Теперь, когда все настройки учетной записи и среды выполнены, мы можем начать развертывание кода. Сейчас мы развернем простое приложение Hello World:

1
$ echo ‘<?php echo «Hello World!»;?>’ > index.php

Это небольшая хитрость командной строки для помещения некоторого текста в файл. В качестве альтернативы вы можете создать этот файл с вашим любимым текстовым редактором или IDE.

1
2
3
4
5
$ git add index.php
$ git commit -m «OH HAI»
[master (root-commit) 6aa23f4] OH HAI
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 index.php

До сих пор мы создали новую папку для нашего веб-сайта, инициализировали Git, добавили пульт, который сообщает Git о том, где находится приложение Pagoda Box, и добавили новый файл index.php , который просто скажет Hello World! , Следующий:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
$ git push pagoda master
Counting objects: 3, done.
Writing objects: 100% (3/3), 244 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
 
:: Auto deploy enabled for ‘master’
 +> to change, visit https://dashboard.pagodabox.com/apps/my-awesome-app/admin
:: Deploying to 6aa23f4 on master
:: Parsing Boxfile
:: Executing deploy
 +> Init submodules
 +> Booting web1.1
  — [22-Feb-2012 20:38:41] NOTICE: fpm is running, pid 54
  — [22-Feb-2012 20:38:41] NOTICE: ready to handle connections
 +> Propagating network updates
:: Cleaning up
 
To [email protected]:my-awesome-app.git
 * [new branch] master -> master

Здесь происходит волшебство. Вы отправите Git remote, как и любой другой репозиторий, но затем вы увидите, как вывод Pagoda Box вступит во владение и создаст развертывание. Это будет каждый раз запускать новый экземпляр и мгновенно переключаться с реального экземпляра на этот новый, что означает немедленные обновления — в отличие от медленных систем развертывания файлов на основе FTP. Кроме того, в отличие от некоторых подобных сервисов, все ваши временные файлы (кеш, журналы, загрузка изображений и т. Д.) Будут там после любого изменения размера или повторного развертывания. Потрясающие!

Теперь, если вы обновите страницу Pagoda Box, вы увидите панель инструментов со всеми видами опций.


Pagoda Box имеет специальный конфигурационный файл: Boxfile . Это идет в корне вашего приложения. Расширенный пример может выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
web1:
 
  ################################################
  ## GENERAL SETTINGS
  ################################################
  shared_writable_dirs: [/system/cms/cache, /system/cms/logs, /uploads, /addons]
 
  ################################################
  ## WEB SPECIFIC SETTINGS
  ################################################
  index_list: [index.php]
 
  ################################################
  ## PHP SPECIFIC SETTINGS
  ################################################
  php_version: 5.3.8
  php_extensions: [mysqli, curl, gd, mbstring]
  php_date_timezone: Europe/London
  php_max_execution_time: 30
  php_max_input_time: 60
  php_post_max_size: 25M
  php_file_uploads: On
  php_upload_max_filesize: 20M
  php_max_file_uploads: 20

Этот пример дает вам возможность создавать доступные для записи папки, устанавливать свой index_list (по умолчанию index.php ) и изменять всевозможные настройки PHP, которые обычно находятся в файле php.ini .

Самая важная строка здесь:

1
php_extensions: [mysqli, curl, gd, mbstring]

Pagoda Box позволяет вам перечислить зависимости ваших приложений. Драйвер « mysqli » — это «MySQL Improved», который вы должны начать использовать, так как «mysql» будет устаревшим в PHP 5.4. «curl» и «gd» довольно стандартны, а «mbstring» помогает вам работать с кодом UTF-8.

Приятно знать, что они доступны — наряду с множеством других — но для этого урока нам понадобится только следующее:

1
php_extensions: [pdo, pdo_mysql]

Итак, давайте создадим наш новый Boxfile и сохраним его:

1
2
web1:
  php_extensions: [pdo, pdo_mysql]

Мы будем использовать это позже.


На момент написания этой статьи Pagoda Box поддерживает только базы данных MySQL, и это прекрасно, так как именно этим пользуется большинство разработчиков.

Мы можем бесплатно запустить столько маленьких экземпляров базы данных, сколько захотим; мы только начинаем платить, когда они становятся больше, поэтому вы не будете удивлены огромным счетом только за создание веб-сайта. Так же, как и веб-экземпляры, они также могут быть расширены с ростом вашего сайта.

New Database

Чтобы создать новый, нажмите значок + и дайте ему имя. Вы увидите индикатор выполнения, пока он строится; тогда страница обновится.


Подключение через PHP является легким. Вам дано несколько переменных $_SERVER , которые содержат учетные данные для каждой вашей базы данных. Это означает, что вы можете хранить жестко запрограммированные пароли в своем приложении — это очень полезно, если вы не хотите, чтобы все ваши разработчики видели живые пароли, или если у вас есть полный веб-сайт на GitHub, как это делают некоторые люди. ,

1
$db = new PDO(sprintf(‘mysql:host=%s;dbname=%s;port=%s’, $_SERVER[‘DB1_HOST’], $_SERVER[‘DB1_NAME’], $_SERVER[‘DB1_PORT’]), $_SERVER[‘DB1_USER’], $_SERVER[‘DB1_PASS’]);

Это базовый пример используемых переменных — подключение к базе данных MySQL через расширение PDO. Если вы используете фреймворк, такой как CodeIgniter, вы можете вставить эти переменные в файлы конфигурации database.php .


На некоторых веб-серверах, особенно на обычных установках cPanel, установлен phpMyAdmin, и его можно настроить для обеспечения удаленного доступа к базам данных MySQL.

Вместо этого, Pagoda Box использует Ruby Gem для создания, среди прочего, временного безопасного SSH-туннеля. Это означает, что ваши базы данных MySQL заблокированы за брандмауэром и доступны только через это безопасное соединение SSH.

Итак, чтобы установить гем, запустите:

1
$ sudo gem install pagoda

Затем, чтобы создать туннель, просто запустите:

1
$ pagoda tunnel db1

При первом запуске этой (или любой другой команды pagoda gem) вас попросят ввести имя пользователя и пароль. Это ваше имя пользователя и пароль Pagoda Box, оно необходимо для того, чтобы гем мог действовать от вашего имени и не иметь никакого отношения к вашей базе данных.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ pagoda tunnel db1
it appears this is the first time you have used our client
  Username: someguy
  Password:
 
Tunnel Established!
————————————————
 
HOST : 127.0.0.1 (or localhost)
PORT : 3307
USER : (found in pagodabox dashboard)
PASS : (found in pagodabox dashboard)
 
————————————————
(note : ctrl-c To close this tunnel)

Перейдите на панель инструментов и нажмите на базу данных, затем нажмите «Показать учетные данные», чтобы увидеть информационное окно, подобное этому:

Database Credentials

Используйте эти учетные данные для подключения. Не забудьте указать, какой порт; он указан в выводе из самоцвета выше, а не в зеленом поле. Помните, что вы подключаетесь к локальному туннелю, а не напрямую к базе данных.


Какого рода это будет учебное пособие, если оно не будет включать создание блога за 20 минут?

Для всей разработки вы должны создавать вещи локально, используя MAMP, XAMPP, WAMP и т. Д., А затем развертывать изменения кода и базы данных с помощью некоторого рода «миграций» или отслеживания изменений схемы, но мы сделаем это по старинке.

Сначала подключитесь к вашей базе данных удаленно через туннель, затем выполните этот запрос, чтобы создать новую таблицу:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
CREATE TABLE posts (
  ‘id’ int(11) NOT NULL AUTO_INCREMENT,
  ‘title’ varchar(255) NOT NULL,
  ‘slug’ varchar(255) NOT NULL,
  ‘summary’ text NOT NULL,
  ‘body’ text NOT NULL,
  ‘created_at’ int(11) NOT NULL,
  ‘updated_at’ int(11) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;
 
INSERT INTO posts VALUES
(‘1’, ‘Women love guys who use FuelPHP’, ‘women-love-guys-who-use-fuelphp’, ‘It is a well proven fact that girls love developers, but things have never been so good for PHP developers. Everyone who starts using FuelPHP gets 150% more women within the first month. Fact.’, ‘It is a well proven fact that girls love developers, but things have never been so good for PHP developers. Everyone who starts using FuelPHP gets 150% more women within the first month. Fact.’, ‘1322825332’, ‘1322934052’),
(‘2’, ‘People who echo HTML from apps die younger’, ‘bad-practises’, ‘Scientists have proven that PHP developers who echo HTML directly our of PHP files die younger. Often it happens while the developer is in the office. While sat at their chairs they suffer multiple wounds, but apparently there are no witnesses, even though their colleagues were in the office \»refactoring bad code\» all day.’, ‘Important body text’, ‘1322826479’, ‘1322826479’);

Имея несколько тестовых постов, мы можем создать этот index.php:

01
02
03
04
05
06
07
08
09
10
<?php
 
    $db = new PDO(sprintf(‘mysql:host=%s;dbname=%s;port=%s’, $_SERVER[‘DB1_HOST’], $_SERVER[‘DB1_NAME’], $_SERVER[‘DB1_PORT’]), $_SERVER[‘DB1_USER’], $_SERVER[‘DB1_PASS’]);
     
    $posts = array();
    foreach ($db->query(‘SELECT * from posts’) as $row)
    {
        echo «<h2>{$row[‘title’]}</h2>»;
        echo «<p><em>Posted: «.date(‘l jS \of F Y’, $row[‘created_at’]).»</em><br />»;
    }

Сохранив этот файл и установив наш новый Boxfile (из шага 6), мы можем внедрить эти новые изменения:

1
2
3
$ git add Boxfile index.php
$ git commit -m «Added Boxfile and deployed index.php changes»
$ git push pagoda master

Перейдите на «http://my-awesome-app.pagodabox.com» и посмотрите вывод:

Database Credentials

Это явно не то, что вы хотите запустить на своем сайте, но этого достаточно. Вы можете видеть, что содержимое вашей базы данных выводится в браузер, и ваш демонстрационный URL работает. Вы можете заменить это на свою CMS или создать что-то свое.


Нет никакого смысла иметь ваш замечательный новый блог на поддомене pagodabox.com ; так что давайте припарковать домен поверх него.

Сначала на вкладке DNS / SSL панели управления добавьте несколько записей для своего домена:

Database Credentials

Теперь, когда ваше приложение готово принять домен, вам следует обратиться к тому, кто обрабатывает DNS для вашего домена. Перейдите в область управления DNS и установите для записи "myawesomedomain.com" значение "50.97.141.37" есть IP-адрес, указанный в интерфейсе вашего приложения. Эти IP-адреса не являются уникальными для каждого приложения, но не всегда будут одинаковыми. Установите запись CNAME для "www.myawesomedomain.com" в псевдоним "myawesomedomain.com" и все должно быть готово.


Может показаться, что все это несколько отличается от того, как вы работаете в данный момент, но начните думать о том, сколько работы вы экономите в долгосрочной перспективе. Использование PaaS — это та же причина, по которой мы используем jQuery вместо нативного JavaScript или PHP-фреймворки вместо написания нативного PHP. Зачем возиться с мелкими деталями, если вместо этого вы можете сосредоточиться на создании потрясающего приложения?

Другими альтернативами, которые вы могли бы рассмотреть, являются PHPFog и Orchestr.io , которые предлагают аналогичные услуги. Веселитесь, и спасибо за чтение!