Advertisement
  1. Code
  2. Yii

Создание своего стартапа: Запуск нескольких доменов

by
Read Time:10 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Error Logging
Building Your Startup: Designing a RESTful API

Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

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

Запуск второго веб-домена

Расширение осведомленности и использование Meeting Planner - моя самая большая задача прямо сейчас. Без большого количества вклада трудно улучшить продукт, а без быстрого роста трудно привлечь инвесторов.

У меня были опасения, что бренд Meeting Planner может привести к неправильному пониманию социальной полезности приложения, например, к планированию дружеских встреч, датам и вечеринкам.

Очевидно, что выбор имен ограничен доступностью домена и / или бюджетом, который вы должны инвестировать в покупку альтернатив. В то время планировщик встреч казался лучшим.

Недавно я заметил, что SimplePlanner.io был доступен, поэтому я зарегистрировал его и начал интегрировать домен вместе с существующей сервисом планировщика встреч.

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

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

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

Прежде чем начать, я хотел бы остановиться на одном аспекте проблемы создания стартапа.

Взгляд на жизнь при запуске

Я работал над этим эпизодом в течение выходных, «perk» #StartupLife. Я хотел рассказать о нескольких забавных вещах.

Во-первых, #StartupLife часто означает, что времени хватает только на то, чтобы собрать IKEA Furniture, только самый большой ящик:

Building Your Startup Multiple Domains - Photo of my IKEA dresser with one drawer built and others not builtBuilding Your Startup Multiple Domains - Photo of my IKEA dresser with one drawer built and others not builtBuilding Your Startup Multiple Domains - Photo of my IKEA dresser with one drawer built and others not built

Во-вторых, это также означает работу в кофейнях и в забавных местах ... В Five Point Roasters в Портленде, штат Орегон, случается, есть соседняя машина с пузырьками:

Теперь вернемся к теме сегодняшнего урока ...

Реализация нескольких доменов в Yii

Расширенный шаблон Yii2 позволяет вам запускать несколько сайтов в одной структуре кода. Я использовал его интерфейсную часть для создания Планировщика встреч и его back-end часть для создания набора административных инструментов. Сегодня, однако, я сосредоточусь на запуске другого домена поверх существующего - и всех мелких и больших сложностей, которые будут с этим связаны.

В следующем эпизоде я расскажу о создании сайтов на третьем или четвертом дереве кода, например, создание API REST или связанном с ним запуске в Planner Meeting (да, впереди есть интересные идеи).

Я предполагал, что будет довольно просто запустить Simple Planner, но это заняло несколько дней работы.

Простой работой была базовая конфигурация сервера и некоторая обработка кода с деревом Yii. Однако, поскольку Meeting Planner является интенсивной электронной почтой (приглашения на собрания, подтверждения, объявления, обновления и т. д.), Было важно отправить эти электронные письма с домена, из которого были созданы собрания, либо SimplePlanner.io, либо MeetingPlanner.io.

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

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

Настройка на основе адреса домена

Когда люди приходят на наш сайт с помощью запросов браузера, нам нужен центральный способ в Yii, чтобы проинструктировать по всем исполняемым кодам, какая услуга должна отображаться: Meeting Planner или Simple Planner?

В файле /frontend/config/main.php есть конфигурация загрузки с кэш-памятью (к сожалению, она называется Bootstrap), которая будет запускать код в начале вызова структуры:

Помимо вызова журналов выше, я создал компонент для этого, который называется SiteHelper:

Поэтому в SiteHelper находится весь код, чтобы настроить сервис на основе того, какой сайт работает. Например:

Эти функции меняют переменные, URL-адреса и строки на основе запрошенной службы. Они вызываются с помощью функции SiteHelper::init():

Вышеупомянутые функции также переопределяют параметры при вызове с localhost:8888 сайтов.

Планировщик встреч - SITE_MP, Simple Planner - SITE_SP, а SITE_FD - мой секрет от вас (пока).

Уникальная внешняя страница

На данный момент я решил быстро изменить внешний вид Simple Planner (SP) и Meeting Planner (MP), используя две стандартные панели навигации Bootstrap 3.0.

Как вы заметили выше, MP использкет Yii::$app->params['site']['navbar'] = 'navbar-default'; а SP использует 'navbar-inverse';.

В /frontend/views/layouts/home.php и main.php они применяются таким образом:

Это создает две разные цветовые схемы:

Building Your Startup Multiple Domains - Side by side looks at Simple Planner vs Meeting Planner home pageBuilding Your Startup Multiple Domains - Side by side looks at Simple Planner vs Meeting Planner home pageBuilding Your Startup Multiple Domains - Side by side looks at Simple Planner vs Meeting Planner home page

Но как насчет обложек? Я получил два игровых социальных изображения для SP и еще два серьезных профессиональных изображения для MP.

Изображения чередуются случайным образом в зависимости от активной службы, причем имена файлов изображений заканчиваются цифрами 0, 1, 2 или 3, например. /img/home/home-#.jpg.

Вот код макета home.php, который применяет это к выбранному изображению:

Если вы обновите домашние страницы для SimplePlanner.io или MeetingPlanner.io, вы увидите, что изображения будут осциллировать.

Обновление текста, изображений и ссылок

Переменные из SiteHelper выше помогают настраивать текстовые метки по всему сайту. И в будущем я могу это расширить:

В то время как MP вызывает Meetings, я мог бы глобально изменить SP, чтобы использовать более социальную фразу Meetups:

Настройка служб

Meeting Planner использует множество различных сервисов для планирования. Для их инициализации потребовалось больше всего времени.

Google Analytics и Search Console

Google несколько затрудняет использование нескольких доменов в Google Analytics, поэтому я просто разделил их на разные аккаунты. SiteHelper устанавливает код GA:

Затем они устанавливаются в представлениях Home.php и Main.php:

Для Google Search Console настроен домен, который я настроил у своего регистратора (как показано ниже):

Building Your Startup Multiple Domains - Google Search Console Verification TXT RecordBuilding Your Startup Multiple Domains - Google Search Console Verification TXT RecordBuilding Your Startup Multiple Domains - Google Search Console Verification TXT Record

Вход OAuth

И поскольку я добавил социальный логин через OAuth для Facebook, Google и LinkedIn, мне пришлось рассказать обо всех этих службах о домене SimplerPlanner.io. Google и LinkedIn являются наиболее запутанными, потому что каждое изменение аргумента запроса должно быть зарегистрировано этими гениями:

Вот Google:

Building Your Startup Multiple Domains - Google Developer Credential URLsBuilding Your Startup Multiple Domains - Google Developer Credential URLsBuilding Your Startup Multiple Domains - Google Developer Credential URLs

Вот простой LinkedIn:

Building Your Startup Multiple Domains - LinkedIn OAuth Configuration URLsBuilding Your Startup Multiple Domains - LinkedIn OAuth Configuration URLsBuilding Your Startup Multiple Domains - LinkedIn OAuth Configuration URLs

Но Facebook является самым простым и наименее придирчивым:

Building Your Startup Multiple Domains - Facebook Developers Configuration URLBuilding Your Startup Multiple Domains - Facebook Developers Configuration URLBuilding Your Startup Multiple Domains - Facebook Developers Configuration URL

Почта Mailgun

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

Building Your Startup Multiple Domains - Domain Configuration Requirements from MailgunBuilding Your Startup Multiple Domains - Domain Configuration Requirements from MailgunBuilding Your Startup Multiple Domains - Domain Configuration Requirements from Mailgun

Это потребовало тщательных изменений в моем регистраторе домена:

Building Your Startup Multiple Domains - Domain Registrar DNS Settings for MailgunBuilding Your Startup Multiple Domains - Domain Registrar DNS Settings for MailgunBuilding Your Startup Multiple Domains - Domain Registrar DNS Settings for Mailgun

SSL

Я использую Let's Encrypt для протокола https (SSL) совместно с Планировщиком встреч и его административной службой. Настройка для меня прошла довольно гладко. Но добавление SimplePlanner.io не помогло, и мне пришлось создать отдельные файлы конфигурации Apache (.conf) для SP и настроить файлы самостоятельно.

Вот файл http sp.conf, который перенаправляет на https:

Перенаправления просто не работают с двумя именами серверов и двумя псевдонимами серверов. Вот файл sp-ssl.conf:

Вот как я, в конечном счете, создал SSL-сертификаты с Let's Encrypt:

Let's Encrypt мне очень нравится, но они все еще молоды, и пока их скрипты продолжают становиться более устойчивыми, все еще есть проблемы, подобные этой.

Дифференциация почты в фоне

Самая большая проблема для меня в запуске Simple Planner заключалась в обработке фоновых писем, чтобы они приходили из надлежащего сервиса, то есть MP или SP, и все их ссылки также были корректными.

Поскольку я сохранил унифицированную базу данных для SP и MP, я также оставил фоновую обработку в домене MP. Поэтому мне пришлось расширить базу данных, чтобы таблица User and Meeting сохранила столбец site_id, чтобы указать, какой сервис создал каждую запись.

Вот миграция Yii:

Я использовал метод beforeSave() в модели Meeting, чтобы всегда настраивать site_id на основе текущей службы - вы можете помнить, что я создал этот метод, чтобы всегда генерировать безопасный уникальный идентификатор для каждой встречи:

Я создал похожий метод в модели User:

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

Я думал, что будет легко настроить эту команду в одном месте для ссылки на соответствующий домен сайта. Тем не менее это требует, чтобы этот часто используемый метод неоднократно запрашивал таблицу Meeting для site_id. Например, buildCommand() вызывается несколько раз для каждого участника для каждой встречи.

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

Модель Meeting всегда загружается до этих вызовов, поэтому быстрый доступ к site_id отсюда быстрее.

Что дальше?

Building Your Startup Multiple Domains - SimplePlannerio Home Page with Social ImageBuilding Your Startup Multiple Domains - SimplePlannerio Home Page with Social ImageBuilding Your Startup Multiple Domains - SimplePlannerio Home Page with Social Image

Несмотря на то, что все конфигурации и небольшие переменные изменения этого сайта немного раздражали после сборки, они демонстрируют некоторые интересные функции Yii Framework. Если вы еще этого не сделали, попробуйте запланировать на новом сайте Simple Planner.

Поделитесь Планировщиком встреч со своими деловыми партнерами и Простым планировщиком с друзьями и семьей.

Есть свои мысли? Идеи? Обратная связь? Вы всегда можете связаться со мной прямо в Twitter @reifman. Следите за предстоящими статьями здесь, в разделе «Создание своего стартапа на PHP».

Я также приближаюсь к запуску эксперимента с WeFunder, основанного на внедрении новых правил SEC crowdfunding. Вы можете следить за нашим профилем там, если хотите. Я также напишу об этом в следующем уроке.

Ссылки по теме

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.