Construirea Startup cu PHP Alegerea și configurarea Gazduire de producție

Ce veți crea

Acest tutorial face parte din programul Build Your Startup With PHP pe Envato Tuts +. În această serie, vă conduc prin lansarea unui startup de la concept la realitate, utilizând aplicația mea Planificator de întâlniri ca exemplu de viață reală. Fiecare pas de-a lungul drumului, voi lansa codul Planificatorului de Întâlniri ca exemple de sursă deschisă pe care le puteți învăța. Voi aborda, de asemenea, problemele de afaceri legate de pornire în momentul în care apar.

În acest tutorial, voi explora alegerea unei platforme ideale de găzduire pentru Planificatorul întâlnirilor și configurația inițială a serverului nostru. Vă voi îndruma prin procesul de migrare a site-ului de pre-lansare într-un mediu de producție mai bun pentru lansarea viitoare a alfa.

Dacă nu ați încercat încă Planificatorul de întâlniri, continuați și programați prima dvs. întâlnire. Particip la comentariile de mai jos, deci spune-mi ce crezi! Sunt interesat în special dacă doriți să sugerați funcții sau subiecte pentru tutoriale viitoare.

Ca un memento, întregul cod pentru Planificatorul întâlnirilor este scris în cadrul Yii2 Framework for PHP. Dacă doriți să aflați mai multe despre Yii2, consultați seria noastră paralelă Programming With Yii2.

Selectarea unei companii de găzduire

Pentru multe companii, AWS de la Amazon este soluția emergentă. Atunci când AWS coboară, la fel și multe dintre cele mai cunoscute servicii ale Web. Dar AWS este, de asemenea, costisitoare, adesea prea complexă și condusă de o companie care are o istorie de ostilitate față de angajați, în special lucrătorii feminini și depozitari. În plus, Amazon a apăsat în mod unilateral dezvoltarea rapidă a orașului meu natal Seattle într-un mod care a schimbat fundamental orașul pentru totdeauna, dar nu neapărat pentru bine.

Recent, am scris un ghid pentru alternative la Amazon pentru serviciile de cloud computing. Există o mulțime de concurenți, nici unul atât de vast, dar mulți mai buni, mai accesibili și mai ușor de utilizat. Ca planificator de întâlniri crește, aș putea să mă gândesc din nou la AWS, dar pentru moment vreau să mă uit în altă parte.

Pe termen scurt, cel mult, am nevoie de un server sau de două servicii web și baze de date care rulează. Pentru aceasta, companii de hosting, cum ar fi Rackspace, Linode, și Digital Oceanul meu preferat funcționează foarte bine.

Deocamdată, Planificatorul de Întâlniri poate funcționa pe un singur server, dar, pe măsură ce crește, este posibil să fi nevoie de mai multe servere web și baze de date. Bazându-mă pe experiența mea, AWS facilitează punerea în aplicare a acestui lucru, dar administratorii de sistem cu experiență pot face acest lucru cu furnizorii de cloud menționați anterior.

Acest tutorial vă va ghida prin lansarea unui server web și de baze de date în norii digitali Ocean.

Lucrul cu Oceanul digital

Am scris o mana de tutoriale despre Digital Ocean la Envato Tuts +, inclusiv modul in care sa folosesc API-ul pentru configurarea serverului. De asemenea, am scris recent despre experiența mea pozitivă cu programul de affiliate Ocean Digital. Dezvăluirea completă: când a fost întrebat, Oceanul Digital a oferit un credit de cont mic pentru a acoperi costurile picăturilor pentru această serie de pornire timp de până la șase luni. 

În ultimii doi ani, că am fost acolo, am îmbunătățit în mod constant calitatea serviciilor, experiența utilizatorului, suportul și setul de funcții. De ceva vreme, a fost extrem de rar să experimentezi o încetinire sau o întrerupere, obișnuită în piața cloud hosting.

Să începem configurarea serverului inițial de producție pentru Planificatorul întâlnirilor.

Configurarea unei noi picături

Crearea unei noi picături

Instanțele digitale ale oceanului se numesc picături. Sunt sigur că ei s-au gândit să-i numească mormoloci sau pești, dar noi, dezvoltatorii, le distrugem adesea, așa că cei care nu sunt sentienți picăturii este un termen mai bun.

De la Picături meniu, vom Creați o picătură. În primul rând, alegem Ubuntu 14.04 pentru imaginea noastră și opțiunea serverului de 10 USD pe lună:

Apoi, am ales San Francisco regiune, pentru că este mai aproape de mine:

De asemenea, am solicitat Oceanului Digital să-mi reutilizeze cheia publică pentru stabilirea datelor de conectare; conectarea cheie este mai sigură decât conectarea la parolă. Apoi, am ales numele de gazdă apps.meetingplanner.io pentru server:

Când faceți clic pe Crea, veți vedea picatura care se formează:

Odată ce este gata, vi se va da o adresă IP, la care am mapat înregistrările domeniului meetingplanner.io pentru configurația inițială: 

Voi aștepta până mai târziu să mapăm domeniul de întâlnire rootplanner.io pe noul server.

Configurarea serverului

Iată ce veți vedea când vă conectați la server prima dată:

$ ssh -i ~ / .ssh / id_lookahead [email protected] Sunteți obligat să vă schimbați parola imediat (rădăcină executată) Bine ați venit în Ubuntu 14.04.4 LTS (GNU / Linux 3.13.0-85-generic x86_64) * Documentație: https://help.ubuntu.com/ Informații despre sistem începând cu 18 mai 15:59:01 EDT 2016 Încărcarea sistemului: 0.0 Utilizarea memoriei: 5% Procese: 54 Utilizarea /: 4.2% din 29.40GB Utilizare swap: 0% Utilizatorii conectați: 0 Grupează aceste date și gestionează acest sistem la: https://landscape.canonical.com/ 0 pachete pot fi actualizate. Actualizările sunt actualizări de securitate. Programele incluse în sistemul Ubuntu sunt software liber; termenii exacți de distribuție pentru fiecare program sunt descriși în fișierele individuale din / usr / share / doc / * / copyright. Ubuntu vine cu ABSOLUT NICIO GARANȚIE, în măsura permisă de legea aplicabilă. Schimbarea parolei pentru root. (curent) Parola UNIX: introduceți noua parolă UNIX: reintroduceți noua parolă UNIX:

Digital Ocean oferă o mare varietate de ghiduri utile. Am creat un nou utilizator pentru contul meu principal și pentru conturile de implementare primară folosind acest explicator. 

De asemenea, am modificat configurația SSH pentru a elimina autentificarea rădăcinilor și a personaliza portul SSH implicit, de la 22.

Apoi, am instalat serverul tipic UAMP (Ubuntu, Apache, PHP și MySQL). Este posibil să fi creat un nou acronim pentru copii al LAMP.

$ sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached php5-mcrypt Liste de pachete de lectură ... Terminat Construirea dependenței Arborele de informații citite ... Terminate Următoarele pachete suplimentare vor fi instalate: apache2 apache2-bin apache2-data libaio1 libapache2 -mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl libdbi-perl libhtml-șablon-perl libmemcached10 libmysqlclient18 libterm-readkey-perl mysql-client-5.5 mysql-client- -server-5.5 mysql-server-core-5.5 php-pear php5-cli php5-comun php5-json php5-readline ssl-cert pachete sugerate: apache2-doc apache2-suexec- perl libmldbm-perl libnet-daemon-perl libplrpc-perl libsql-declarație-perl libipc-sharedcache-perl libcache-memcached-perl libmemcached tinyca mailx php5-dev php5-user-cache openssl-blacklist Următoarele pachete NOI vor fi instalate: apache2-bin Apache2-date libaio1 libapache2-mod -php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbd-mysql-perl libdmi-perl libhtml-șablon-perl libmemcached10 libmysqlclient18 libterm-readkey-perl memcached mysql-client-5.5 mysql- server mysql-server-5.5 mysql-server-core-5.5 php-pear php5 php5-cli php5-comun php5-json php5-memcached php5-mysql php5-readline ssl-cert 0 actualizat, nu a fost modernizată. Aveți nevoie de 15,7 MB de arhive. După această operație, va fi utilizat un spațiu suplimentar de 126 MB. Doriți să continuați? [Y / n] y Obțineți: 1 http://mirrors.digitalocean.com/ubuntu/ trusty / main libaio1 amd64 0.3.109-4 [6,364 B] Obțineți: 2 http://mirrors.digitalocean.com/ubuntu/ încredere / principală libapr1 amd64 1.5.0-1 [85.1 kB] ... Activarea modulului mpm_prefork. Apache2_switch_mpm Comutarea la prefork * Repornirea serverului web apache2 [OK] apache2_invoke: Activarea modulului php5 * Repornirea serverului web apache2 [OK] Configurarea php5 (5.5.9 + dfsg-1ubuntu4.16) ... Triggers de procesare pentru libc-bin (2.19-0ubuntu6 .7) ... 

Apoi, mi-am configurat fusul orar implicit. Planificatorul de întâlniri funcționează intern pe Pacific Standard Time (PST). Am editat php.ini:

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

Și, am adăugat aceasta:

date.timezone = 'America / Los_Angeles'

Acum este timp pentru a obține codul nostru pe server. 

Migrarea bazei de cod și a activelor

Instalarea funcției Git

În primul rând, am instalat git:

sudo apt-get instalați git

Apoi, în calitate de utilizator de implementare a codului, am creat o nouă cheie SSH pentru a stabili o conexiune sigură cu GitHub:

ssh-keygen -t rsa -C "[email protected]" Generarea perechii de chei publice / private rsa. Introduceți fișierul în care să salvați cheia (/home/deploy/.ssh/id_rsa): Creat directorul "/home/deploy/.ssh". Introduceți expresia de acces (goală fără o expresie de acces): Introduceți din nou aceeași frază de acces: Identificarea dvs. a fost salvată în /home/deploy/.ssh/id_rsa. Cheia dvs. publică a fost salvată în /home/deploy/.ssh/id_rsa.pub. Antetul cheie este: f7: 84: 37: b3: e4: 7b: d3: 9c: 0c: 60: b4: [RSA 2048] ---- + | | | ... |. | | . =. | | Z A | | + & dd. | | . * X | | + Ooo. | | .ooo | | ... |. | + ----------------- + implementa @ apps: / var / www $ eval 'ssh-agent -s' Agent pid 7827 implementează @ apps: / var / www $ ssh- adăugați ~ / .ssh / id_rsa Identitatea adăugată: /home/deploy/.ssh/id_rsa (/home/deploy/.ssh/id_rsa) implementați @ 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)? yes Warning: Permanently added 'github.com,192.30.252.122' (RSA) to the list of known hosts. Hi newscloud! You've successfully authenticated, but GitHub does not provide shell access.

De asemenea, trebuie să inserați cheia în setările contului dvs. Git.

Instalarea Compozitorului

Apoi, am instalat Compozitor: 

$ curl -sS https://getcomposer.org/installer | sudo php - --install-dir = / usr / local / bin - fișier - compozitor compozitor

Iubesc absolut compozitorul pentru că economisește atât de mult timp, dar sunt zile când mă deranjez cu el, când nu mai lucrează din nicăieri - cum ar fi modul în care Cadrul Yii vă cere să instalați FXP / compozitor-asset-plugin pentru utilizarea corectă:

$ composer global necesită "fxp / composer-asset-plugin: ^ 1.0" $ compozitor actualizare

Instalarea codului Planificatorului de întâlniri

Desigur, am folosit GitHub pentru a sincroniza ultimul cod până când îmi amintesc că Yii2 configurează de fapt o mulțime de fișiere ignorate de GitHub, inclusiv index.php. Există, de asemenea, fișiere cheie locale și imagini încărcate de profil de utilizator. Deci, am folosit tar pentru a comprima codul activ:

tar czf mp_may2016.tar.gz mp

Apoi, am folosit SCP pentru a muta fișierele pe noul server și apoi l-am extras:

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

În cele din urmă, au existat și unele lucrări în revizuirea cheilor de bază de date locale (pe care le-am actualizat pe noul server) și examinarea permisiunilor mele de fișier.

Acum, hai să mutăm baza de date.

Deplasarea bazei de date MySQL

Mai întâi, am aruncat baza de date existentă într-un fișier:

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

Apoi, am mutat-o ​​pe noul server cu scp:

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

Pe noul server, am creat o nouă bază de date cu noi detalii și am configurat câteva permisiuni pentru Apache:

$ mysql -u root -p Introduceți parola: Bine ați venit pe monitorul MySQL. Comenzile se încheie cu; sau \ g. ID-ul de conectare MySQL este 43 Server version: 5.5.49-0ubuntu0.14.04.1 (Ubuntu) Copyright (c) 2000, 2016, Oracle și / sau afiliații săi. Toate drepturile rezervate. Oracle este o marcă înregistrată a Oracle Corporation și / sau a afiliaților săi. Alte nume pot fi mărci comerciale ale proprietarilor respectivi. Introduceți "ajutor"; sau '\ h' pentru ajutor. Introduceți '\ c' pentru a șterge instrucțiunea de intrare curentă. mysql> a crea baza de date mp_database; Interogare OK, 1 rând afectat (0.00 sec) mysql> acorda toate privilegiile pe mp_database. * La "mp_master" @ "localhost" identificat prin "xYxYZxZx1a"; Interogare OK, 0 rânduri afectate (0.00 sec) mysql> privilegii de culoare; Interogare OK, 0 rânduri afectate (0.00 sec) mysql> exit;

În cele din urmă, am importat fișierul sql în noua bază de date:

$ mysql -u rădăcină -p mp_database < ~/mp_may2016.sql

Apoi a fost timpul să configurați Apache.

Configurarea serverului Web

Am creat un fișier .conf pe noul server:

$ cd / etc / apache2 / site-uri disponibile $ sudo nano 000-mp.conf

Am reușit să obțin o mare parte din fișierul .conf existent:

VirtualHost *: 80> ServerName meetingplanner.io ServerAlias ​​www.meetingplanner.io ServerAlias ​​alpha.meetingplanner.io DocumentRoot "/ var / www / mp / frontend / web"  # Utilizați mod_rewrite pentru sprijinirea URL-ului destul de mare RewriteEngine on # Dacă există un director sau un fișier, utilizați cererea direct RewriteCond% REQUEST_FILENAME! -f RewriteCond% REQUEST_FILENAME! -d # În caz contrar, trimiteți cererea la index.php RewriteRule. index.php  

Apoi, am activat site-ul și am reîncărcat Apache:

sudo a2ensite 000-mp.conf serviciu sudo apache2 reload

După cum am menționat mai devreme, trebuia să mă asigur că fișierele locale cu chei și căi de mediu erau corecte pe noul server. 

Deși au existat, în cele din urmă, urleturi, în cele din urmă, totul sa întâmplat.

Migrarea DNS

În cele din urmă, am reatribuit DNS-ul pentru adresa URL a Planificatorului de întâlniri. Curând după aceea, noul server a fost live:

S-ar putea să observați că am folosit tutorialul meu recent despre uimitor de minunat Let's Encrypt: Am instalat https pentru Meeting Planner înainte de a lua screenshot-ul de mai sus.

Actualizarea sarcinilor cron

Planificatorul de întâlniri și Let's Encrypt se bazează pe cron pentru executarea proceselor cheie în fundal. Deci, mi-am mutat setările crontab de pe vechiul server:

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

Citiți acest lucru dacă vă întrebați de ce mă refer la cron în toate literele mici.

Ce urmeaza?

Întâlnirea Planificatorului a făcut progrese extraordinare în ultimele luni. Am programat întâlniri de afaceri și câteva date personale au ales să-mi programez a doua oară cu ajutorul aplicației. Cu toate acestea, există încă multe deficiențe - iar feedbackul de la utilizatorii timpurii este vital. Deci, în tutorialul următor, voi crea un sistem de colectare a feedback-ului de la utilizatori, ajutându-i să obțină răspunsuri la întrebările obișnuite și să învețe cât de mult pot pentru a face serviciul mai bine înainte de a declara MVP și o lansare alfa.

Sper că ți-a plăcut acest episod. Urmăriți tutorialele viitoare în Building Your Startup cu seria PHP - există și o mulțime de lucrări poloneze și câteva caracteristici mari care vin.

Nu ezitați să adăugați întrebările și comentariile de mai jos; În general, particip la discuții. Puteți să mă contactați și pe Twitter @reifman direct.

Link-uri conexe

  • Programarea cu Yii2: Noțiuni de bază
  • Schimbul de dezvoltatori Yii2
Cod