Для разработчиков доступно все больше опций « Платформа как услуга» , поэтому неудивительно, что Zend присоединился к этой партии. На данный момент PHP Cloud является общедоступным предварительным просмотром, но он уже предлагает ключевые функции, такие как: доступ к MySQL, управление исходным кодом через Git, развертывание в других облачных сервисах и доступ по SFTP.
В этой статье я покажу вам, как настроить установку CakePHP в контейнере приложения в PHP Cloud. Попутно вы узнаете, как получить доступ к MySQL, развернуть код и использовать SFTP из вашего FTP-клиента для доступа к контейнеру приложения.
Сначала получите учетную запись на Zend.com и приглашение на phpcloud.com.
Вам нужно будет создать учетную запись на zend.com (это бесплатно), если у вас ее еще нет. Тогда вам нужно будет запросить приглашение . Обычно Zend отправляет вам приглашение в течение 24 часов.
Ключи доступа
После того, как вы получили приглашение и создали учетную запись, в первую очередь необходимо настроить ключи доступа (из меню слева после входа в систему). Если у вас уже есть пара RSA, вы можете загрузить свой существующий открытый ключ. Если нет, или если вы хотите создать его только для PHP Cloud, вы можете использовать опцию для генерации новой пары ключей:
Затем вы можете скачать файл .pem (закрытый ключ) и безопасно сохранить его на своем компьютере.
Создать контейнер
Чтобы создать контейнер, нажмите «Мои контейнеры» в меню слева после входа в систему. Появится форма, запрашивающая основную информацию о контейнере, который вы хотите настроить:
Обратите внимание, что вы также можете настроить контейнер, чтобы иметь возможность отправлять электронную почту тоже. Затем вас попросят немного подождать, пока ваш контейнер подготовлен:
Это все, что нужно для создания контейнера.
Несколько слов о доступе по SSH / Shell
На момент написания статьи не предусмотрено доступа к оболочке. Доступ к SSH ограничен. Вы можете получить доступ к своему экземпляру MySQL или Zend Studio для удаленной отладки. Кажется, что с этим есть проблема, я столкнулся с множеством проблем с подключением по SSH, в основном из-за:
Connection timed out during banner exchange
Имейте в виду, что это предварительная сборка на данный момент, поэтому обязательно возникнут проблемы с прорезыванием зубов. Мы можем обойти эту проблему сейчас.
Доступ к базе данных
Другой способ получить доступ — через установленную установку phpMyAdmin. В контейнере приложения выберите управление -> управление базой данных:
Это предоставит ссылку на phpMyAdmin:
Теперь вы можете работать как обычно с MySQL, импортируя данные, создавая таблицы и так далее. Чтобы иметь возможность подключиться к вашей базе данных через ваш код, вам потребуется следующее:
- Хост базы данных: mycontainer-db.my.phpcloud.com
- Порт базы данных: 3306
- Имя схемы базы данных: mycontainer
- Пользователь базы данных: mycontainer
- Пароль базы данных: ваш пароль контейнера
Git Access
Вы можете работать со своим источником напрямую через Git:
Кнопка предоставит URL для хранилища, которое вы можете клонировать:
cd ~/sites
git clone https://[email protected]/git/container-root.git myproject
Очевидно, вам необходимо изменить каталог, в котором вы хотите хранить свой код, а также добавить имя контейнера, которое вы использовали вместо mycontainer .
Доступ к SFTP
Если вы используете FTP-клиент, который поддерживает STFP, вы также можете получить доступ к своему контейнеру. Вам понадобится следующая информация:
- Имя пользователя: mycontainer
- Имя хоста: mycontainer.my.phpcloud.com
- Порт: 22 (это порт SFTP по умолчанию, и обычно нет необходимости указывать это)
- Закрытый ключ RSA: путь к вашему файлу закрытого ключа
Путь к закрытому ключу должен указывать на файл .pem, который вы создали ранее, или на ваш существующий закрытый ключ.
Как только вы подключитесь, вы увидите файловую структуру, подобную этой:
Ваш код предназначен для перехода в общую папку. Вы увидите, что я добавил файлы и папки, которые относятся к установке CakePHP.
Вы можете работать через Git или загружать через SFTP, выбор за вами.
Попробуйте — простое приложение CakePHP
Мы установим CakePHP и создадим простое приложение для блога, чтобы доказать, что все работает на Zend Cloud.
Обычная установка CakePHP требует, чтобы вы изменили разрешения для определенных папок и файлов. Поскольку PHPCloud не имеет доступа к оболочке, вам нужно будет получить доступ к установке через SFTP.
Загрузите свежую копию стабильной версии CakePHP, распакуйте ее, а затем загрузите в контейнер, используя описанный выше метод SFTP. Убедитесь, что вы загружаете все файлы; В CakePHP есть несколько скрытых файлов, которые вам необходимо обязательно загрузить.
1. Измените права доступа — app / tmp
Затем измените разрешения для папки app / tmp на 777 (чтение и запись), используя предпочитаемый (S) FTP-клиент. Cake использует эту папку для хранения данных сеанса, журналов, кэша и результатов теста.
2. Обновите app / config / core.php
Прокрутите вниз до строки 182 и измените соль безопасности на свою собственную. Также измените значение cipherSeed на случайную числовую строку.
3. Добавьте настройки вашей базы данных
Настройки базы данных, которые вы использовали для phpMyAdmin, должны быть добавлены в app / config / database.php (вам нужно будет переименовать файл в database.php.default).
4. Протестируйте свой сайт
Зайдите на ваш сайт, нажав на ссылку в контейнере приложения:
И если повезет, вы увидите что-то вроде скриншота выше.
4. Добавить таблицу в базу данных
Войдите в свой экземпляр phpMyAdmin в контейнере, щелкните имя базы данных в левой части окна, а затем скопируйте и вставьте следующий код SQL в текстовое поле на вкладке SQL. Нажмите кнопку «Перейти», и ваша таблица будет создана:
/* First, create our posts table: */
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);
/* Then insert some posts for testing: */
INSERT INTO posts (title,body,created)
VALUES ('The title', 'This is the post body.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('A title once again', 'And the post body follows.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('Title strikes back', 'This is really exciting! Not.', NOW());
На этом этапе вы можете вернуться к использованию Git сейчас, так как проблемы с разрешениями файлов были решены.
Клонировать ваш репозиторий
Я собираюсь предположить, что у вас установлен Git, и вы знаете, как его использовать. Вернувшись в свой контейнер, вы можете найти URL клона здесь:
Откройте свой терминал / консоль и перейдите в каталог, где вы хотели бы сохранить свой проект. Затем клонируйте репозиторий:
git clone https://your_container.my.phpcloud.com/git/container-root.git myproject
Время для некоторого кода
Мы начнем с создания кода для обработки сообщений в блоге.
1. Создайте модель поста
Создайте новый файл в app / Model с именем Post.php и добавьте следующий код:
<?php
class Post extends AppModel {
public $name = 'Post';
}
2. Создайте контроллер сообщений
Мы создадим общую схему для нашего контроллера:
<?php
class PostsController extends AppController {
public $name = 'Posts';
public $helpers = array('Html', 'Form');
}
Вы заметите, что мы также загрузили некоторых общих помощников. Далее мы добавим действие для извлечения всех записей в нашей таблице сообщений:
public function index() {
$this->set('posts', $this->Post->find('all'));
}
3. Добавить файл просмотра
Создайте новый файл в app / views / Posts с именем index.ctp и добавьте следующий код:
<!-- File: /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>
<!-- Here is where we loop through our $posts array, printing out post info -->
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php
echo $this->Html->link($post['Post']['title'],
array('controller' => 'posts', 'action' => 'view', $post['Post']['id']));
?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
</table>
4. Проверка прогресса
Кажется, проблема в том, как PHP Cloud в настоящее время обрабатывает файлы .htaccess. Чтобы все заработало, перейдите в app / config / core.php и сделайте так, как советовали здесь:
/**
* To configure CakePHP *not* to use mod_rewrite and to
* use CakePHP pretty URLs, remove these .htaccess
* files:
*
* /.htaccess
* /app/.htaccess
* /app/webroot/.htaccess
*
* And uncomment the App.baseUrl below:
*/
Configure::write('App.baseUrl', env('SCRIPT_NAME'));
Теперь вы можете посетить свой сайт по адресу: http://my-container.my.phpcloud.com/index.php/posts/index:
5. Добавление действия просмотра
Вы заметите, что нажатие на ссылки вызывает ошибку. Это потому, что у нас нет действия view в контроллере posts и связанного файла view.
Поэтому в app / Controller / PostsController.php добавьте необходимое действие:
public function view($id = null) {
$this->Post->id = $id;
$this->set('post', $this->Post->read());
}
Затем в app / View / Posts добавьте view.ctp:
<!-- File: /app/View/Posts/view.ctp -->
<h1><?php echo $post['Post']['title']?></h1>
<p><small>Created: <?php echo $post['Post']['created']?></small></p>
<p><?php echo $post['Post']['body']?></p>
Теперь вы можете нажимать на ссылки для просмотра отдельных сообщений.
В заключение…
Итак, вы увидели, как запустить простое приложение на PHP Cloud. Есть еще некоторые проблемы, но как только они будут решены, это, несомненно, будет сильное решение облачного хостинга.
Возможность входа через SFTP важна, но отсутствует доступ к оболочке. Однако, благодаря phpMyAdmin, Git и возможности развертывания в других облачных сервисах, PHP Cloud уже может многое предложить.