本文主要总结了个人在第一次部署tp5项目时遇到诸多问题,为后面的小伙伴提供一些参考。
搭建一个可以供外网访问的WEB项目,笔者知道的途径一共有三种:1本地做服务器,然后在本地机安装花生壳,配置内网穿透;2购买虚拟主机;3购买云服务器ECS。本文介绍的是通过购买阿里云的云服务器做WEB项目的部署。
1、首先你需要一个阿里云的账号,注册登陆之后,在产品中找到云服务器选项,点击立即购买。
2、购买成功之后,购买域名,购买自己心仪的域名。如果需要的话
3、域名实名认证。如果购买了域名的话
4、备案服务器,注意:备案的前提是你的域名已经实名认证超过3天
5、等到备案结束,我们需要在阿里云控制台中设置服务器,开放web项目所需要用到的端口。
6、为域名绑定服务器公网IP地址。如果购买了域名的话
第一次使用时是没有www和@的,需要用户自己创建,其中www表示你的域名可以通过www.xxx.xxx访问,@表示你的域名可以通过xxx.xxx访问。点击添加规则自行添加,记录值为自己的公网IP,其他选择默认即可。
7、开端口,这一步很重要,因为在服务器实例初始状态是没有开发web所需要的端口的,需要用户自行设置。
端口号 | 说明 |
---|---|
80 | HTTP协议访问端口,使用Apache |
8080 | www代理服务端口,使用Tomcat |
3306 | 如果需要远程连接MySQL |
443 | 如果服务器已SSL认证,且希望使用HTTPS协议访问 |
登录服务器可以直接通过阿里云的控制台,选择ECS然后进行远程连接,也可借助Xshell工具。
首先在安装PHP开发环境之前,需要升级apt-get,避免遇到找不到软件包的错误。
# 可以不带sudo
sudo apt-get update
sudo apt-get upgrade
1、安装MySQL
sudo apt-get install mysql-server
# 安装完成之后通过查看版本号,确定MySQL是否成功安装
# mysql --version
sudo apt-get install apache2
安装完成之后在浏览器中输入自己服务器的公网IP,如果看到下面的界面,则证明安装成功
3、安装PHP7.0,推荐安装7.0,tp5是支持7.0的,如果你非要安装5.6的话,后面的一些配置会让你很头疼,笔者之前就是安装的5.6结果在Ubuntu16的系统上很多软件包都安装不了。
sudo apt-get install php7.0
验证是否安装完成,建一个文档:sudo vi /var/www/html/info.php
按下i键编辑文件 输入
phpinfo();
?>
按下Esc退出写入模式,输入:wq
保存退出(记住有冒号)
重启Apache:service apache2 restart
,在浏览器中输入公网IP/info.php
如果看到下图则说明PHP安装成功。
1、使用Xftp上传本地项目文件到服务器/var/www/html
目录下
2、在Apache中配置VirtualHost,笔者使用软连接方式方便以后项目多了好管理
# /etc/apache2/sites-available目录下新建配置文件 name.conf[name为用户自起文件名]
# 写入如下的内容:
<VirtualHost *:80>
ServerName demo.com # 你的域名,必须保证域名已经绑定服务器IP
DocumentRoot /var/www/html/项目 # 你的项目路径
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Directory>
# 日志输出路径
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log
VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
使用软连接将新建的配置文件连接到/etc/apache2/sites-enabled
目录下
cd /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/name.conf name.conf
重启Apache,在浏览器中输入正确的项目网址,即完成。
解决办法:
1、安装php-mysql
sudo apt install php7.0-mysql
2、修改配置文件
去掉/etc/php/7.0/apache2/php.ini
文件中extension=php_pdo_mysql.dll
前面的;
3、重启Apache
4、验证,可以通过查看phpinfo中的PDO扩展是否有mysql
如果用户最开始选择安装的是PHP5.6版本的,由于在Ubuntu16中会因为各种软件包找不到,而导致在网上的诸多教程无法解决问题。此外,在服务器中的PHP和Apache的目录结构也与网上教程中的不一样,他们有很多是用Nginx配置的。
解决办法:
# 为了一步到位,为项目根目录及其子目录中的所有文件授权
chmod -R 777 [/var/www/html/项目根目录]
解决办法:
1、在阿里云控制台开放3306端口
2、在MySQL中创建用于远程连接的用户,如不想创建则可使用root
# 选择数据库
use mysql;
# 创建新用户,并授权
# (*)指定IP,*表示允许访问所有数据库,也可指定;其后的*表示赋予所有权限;
# new_user新建用户名;%表示任何IP地址均可连接;password设置验证密码。
grant all PRIVILEGES on (*).* to new_user@'%' identified by 'password';
# 刷新授权
FLUSH PRIVILEGES;
# 查看结果
select host,user from user;
# 结果
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | new_user |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
3、使用Navicat或是SQLyog进行连接。笔者使用Navicat连接会报错,所以选择用SQLyog
解决办法:
1、在TP5项目的配置文件中开启路由
// 文件路径~/application/config.php
// 是否开启路由
'url_route_on' => true,
// 路由使用完整匹配
'route_complete_match' => false,
// 路由配置文件(支持配置多个)
'route_config_file' => ['route'],
// 是否强制使用路由
'url_route_must' => true,// true或false看个人
2、在~/application/route.php
文件中创建路由规则
return [
'newtest' => 'api/API/newTest'// 可以创建多个,这里以一个为例
];
3、修改与项目入口文件在同一级下的.htaccess文件,修改rewrite规则,一般路径为~/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
IfModule>
4、在Apache中开放rewrite模块,在/etc/apache2/mods-enabled
中建立rewrite.load
的软连接
cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/rewrite.load rewrite.load
5、重启Apache
6、如果不行,检查一下/etc/apache2/apache2.conf
文件中的AllowOverride None是否已经改为AllowOverride All
如果希望别人通过HTTPS来访问你的项目,那么就需要对域名进行SSL认证
1、阿里云控制台中购买证书,如果你有预算可以买付费的,也可以买单域名免费证书,笔者买的是Symantec的单域名免费证书,年限1年,推荐购买Symantec
登录:阿里云控制台,产品与服务,证书服务,购买证书。
购买:证书类型选择 免费型DV SSL,然后完成购买。
补全:在 我的证书 控制台,找到购买的证书,在操作栏里选择 补全。填写证书相关信息。
域名验证:可以选择 DNS或文件,如果域名用了阿里云的 DNS 服务,再勾选一下 证书绑定的域名在 阿里云的云解析。
上传:系统生成 CSR,点一下 创建。
提交审核。
2、进入证书控制台可以看见所有“我的证书”,选择刚刚购买的证书,“补全”
提交审核,刷新,审核通过之后因为笔者选择的是文件方式,所以要根据文档自行下载验证文件,并做相应设置。提示订单状态异常不要管
3、手动验证,如果不是文件验证,直接跳过
.well-known/pki-validation
目录并将fileauth.txt拷贝进去
4、刷新,审核通过,就可以在证书控制台下载刚刚颁发的证书
下载的验证文件包括:215056369000043.key、215056369000043.pem、chain.pem、public.pem
5、配置Apache
因为笔者服务器上的Apache文档结构与文档中的略有差异,所以并未完全按照文档操作。如果你按照文档可以正常操作则按文档操作。
(1)在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为215087847870043.key;
(2)开放SSL模块:在/etc/apache2/mods-enabled
建立ssl.load的软连接
cd /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/ssl.load ssl.load
(3)修改/etc/apache2/mods-available/ssl.conf文件
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLProtocol all -SSLv2 -SSLv3
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/215056369000043.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/chain.pem
(4)创建SSL的VirtualHost
# 可以直接复制/etc/apache2/sites-available/default-ssl.conf
# 然后对以下内容进行修改
<IfModule mod_ssl.c>
<VirtualHost your_private_ip:443>
ServerAdmin your_domain_name
DocumentRoot "/var/www/html/your_priject"
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Directory>
# 根据自己的实际情况修改
SSLCertificateFile /etc/apache2/cert/public.pem
SSLCertificateKeyFile /etc/apache2/cert/215056369000043.key
SSLCertificateChainFile /etc/apache2/cert/chain.pem
VirtualHost>
IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
(5)重启Apache