使用PHP构建启动程序:选择和配置生产托管

最终产品图片
您将要创造的

本教程是Envato Tuts +上的“ 使用PHP构建启动”系列的一部分。 在本系列文章中,我将以我的Meeting Planner应用程序作为真实示例,指导您完成从概念到现实的启动。 在此过程的每一步中,我都会将Meeting Planner代码作为开放源代码示例发布,您可以从中学习。 我还将解决与启动相关的业务问题。

在本教程中,我将探讨为Meeting Planner和服务器的初始配置选择理想的托管平台。 在我将即将发布的网站迁移到更好的生产环境以进行我们即将推出的alpha版本时,我将引导您完成整个过程。

如果您尚未尝试使用会议计划器,请继续并安排您的第一次会议 。 我确实参与了下面的评论主题,所以请告诉我您的想法! 如果您想为以后的教程提供功能或主题,我特别感兴趣。

提醒一下,Meeting Planner的所有代码都是在PHP的Yii2框架中编写的。 如果您想了解有关Yii2的更多信息,请查看我们的平行系列“ 使用Yii2编程”

选择托管公司

对于许多公司而言,亚马逊的AWS是新兴的解决方案。 当AWS出现故障时,许多Web上最知名的服务也会出现故障。 但是,AWS也很昂贵,通常过于复杂,并且由对员工特别是女性员工和仓库员工怀有敌意的公司运营。 此外,亚马逊一手压制了我家乡西雅图的快速过度开发,这种方式从根本上永久改变了这座城市 ,但不一定 永远 有益

最近,我写了一本关于云计算服务的替代亚马逊指南。 有很多竞争者,没有比这更大的竞争者了,但有许多更好,更实惠,更易于使用的竞争者。 随着Meeting Planner的增长,我可能会再次考虑AWS,但现在我想在其他地方看看。

在短期内,至多我最多需要一台或两台运行Web和数据库服务的服务器。 为此,托管的托管公司(如RackspaceLinode和我最喜欢的Digital Ocean)可以正常工作。

目前,Meeting Planner可以在一台服务器上运行,但是随着它的增长,我可能需要多个Web和数据库服务器。 根据我的经验,AWS使其更易于实现,但是经验丰富的系统管理员可以使用上述云提供商轻松地实现此目的。

本教程将指导您在Digital Ocean云中启动Web和数据库服务器。

使用数字海洋

我在Envato Tuts +上写了一些关于Digital Ocean的教程 ,包括如何使用其API进行服务器配置。 我最近还写了我在Digital Ocean会员计划中的积极经历。 全面披露:当被问到时,Digital Ocean提供了一个小额帐户信用额度,以支付此启动系列产品的零星成本,最多六个月。

在过去的两年中,我一直是这里的用户,他们一直在逐步提高其服务质量,用户体验,支持和功能集。 一段时间以来,这种情况很少或很少发生,这在早期的云托管市场中很常见。

让我们开始为Meeting Planner配置初始生产服务器。

配置新的Droplet

创建一个新的液滴

数字海洋实例称为液滴。 我敢肯定,他们会想到将它们称为t或鱼,但我们的开发人员经常将其摧毁,因此,非感知液滴是一个更好的术语。

Droplets菜单中,我们将创建一个Droplet 。 首先,我们选择Ubuntu 14.04作为镜像,并选择每月10美元的服务器选项:

会议计划者托管-创建Droplet

接下来,我选择了旧金山地区,因为它离我最近:

会议计划主持人-选择区域

我还要求Digital Ocean重用我的公共密钥来建立登录名; 密钥登录比密码登录更安全。 然后,我为服务器选择了主机名apps.meetingplanner.io

会议计划主持人-选择主机名

单击创建时 ,您将看到正在形成的液滴:

Meeting Planner Hosting-正在创建的液滴状态

准备就绪后,您将获得一个IP地址,我将Meetingplanner.io域记录映射到该IP地址以进行初始配置:

Meeting Planner Hosting-更新您的DNS记录以指向Droplet

我将等到以后将根Meetingplanner.io域映射到新服务器。

配置服务器

这是您首次登录服务器时将看到的内容:

$ ssh -i ~/.ssh/id_lookahead root@apps.meetingplanner.io 
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配置,以消除root登录并自定义默认SSH端口(远离22)。

然后,我在服务器上安装了典型的UAMP服务器(Ubuntu,Apache,PHP和MySQL)。 我可能刚刚创建了LAMP的新儿童缩写。

$ 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? [Y/n] y
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

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

而且,我添加了以下内容:

date.timezone = 'America/Los_Angeles'

现在是时候在服务器上获取我们的代码库了。

迁移代码库和资产

安装Git

首先,我安装了git

sudo apt-get install git

然后,以我的代码部署用户身份,创建了一个新的SSH密钥以与GitHub建立安全连接:

ssh-keygen -t rsa -C "jeff@lookahead.io"
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 jeff@lookahead.io
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|           . .   |
|          . = .  |
|           Z A   |
|        + & dd.  |
|         . * X   |
|            +ooo.|
|             .ooo|
|            .. . |
+-----------------+
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 jeff@lookahead.io
deploy@apps:/var/www$ ssh -T git@github.com
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.

您还必须将密钥粘贴到您的Git帐户设置中。

安装作曲家

接下来,我安装了Composer:

$ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
composer

我绝对喜欢作曲家,因为它节省了很多时间,但是有时候我会烦恼它,当它无处工作时(例如Yii Framework如何要求您安装fxp / composer-asset-plugin以正确使用) :

$ composer global require "fxp/composer-asset-plugin:^1.0"
$ composer update
安装会议计划程序代码

诚然,我使用GitHub同步了最新的代码,直到我记得实际上Yii2配置了许多GitHub忽略的文件,包括index.php。 也有本地密钥文件和上载的用户个人资料图像。 因此,我使用tar压缩了活动代码库:

tar czf mp_may2016.tar.gz mp

然后,我使用SCP将文件移动到新服务器,然后将其提取:

scp -i ~/.ssh/id_lookahead -P 3327 ~/mpmigrate/mp_may2016.tar.gz lookahead@apps.meetingplanner.io:~
tar -xzf mp_may2016.tar.gz

最终,还有一些工作要检查本地数据库密钥(我在新服务器上更新了)并检查我的文件权限。

现在,让我们移动数据库。

移动MySQL数据库

首先,我将现有数据库转储到文件中:

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

然后,我使用scp将其移至新服务器:

$ scp -i ~/.ssh/id_lookahead -P 22533 lookahead@apps.lookahead.io:~/mp_may2016.sql .

在新服务器上,我创建了一个具有新详细信息的新数据库,并为Apache配置了一些权限:

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
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. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
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文件导入到新数据库中:

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

然后是时候配置Apache了。

配置Web服务器

我在新服务器上创建了一个.conf文件:

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

我能够从现有的.conf文件中获取很多信息:

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 . index.php
</Directory>
</VirtualHost>

然后,我激活了该站点并重新加载了Apache:

sudo a2ensite 000-mp.conf
sudo service apache2 reload

如前所述,我必须确保带有密钥和环境路径的本地文件在新服务器上是正确的。

虽然肯定有颠簸,但最终,一切都融合在一起。

迁移DNS

最后,我重新映射了会议计划核心URL的DNS。 不久之后,新服务器开始运行:

启动系列-会议计划者主页

您可能会注意到,我使用了有关令人惊叹的Let's Encrypt的 最新教程 :在获取上述屏幕快照之前,我为Meeting Planner安装了https

更新cron任务

Meeting Planner和Let's Encrypt依靠cron在后台运行关键进程。 因此,我将crontab设置从旧服务器移到了:

$ sudo crontab -e
# m h  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,请阅读此文章。

下一步是什么?

在过去的几个月中, Meeting Planner取得了巨大的进步。 我已经安排了商务会议,并且有几个私人约会选择使用该应用与我安排第二次约会。 但是,仍然存在许多缺点-早期用户的反馈至关重要。 因此,在下一个教程中,我将建立一个收集用户反馈的系统,以帮助他们获得常见问题的答案,并在宣布MVP和Alpha启动之前尽我所能使服务更好。

希望您喜欢这个情节。 在我们的“ 用PHP构建您的启动”系列中观看即将发布的教程,其中还有很多改进工作和其他一些重要功能。

请随时在下面添加您的问题和评论; 我通常会参与讨论。 您也可以直接通过Twitter @reifman与联系

相关链接

翻译自: https://code.tutsplus.com/tutorials/building-your-startup-with-php-choosing-and-configuring-production-hosting--cms-23359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值