超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]

文章目录

        • 导语
    • 一 购买与配置阿里云ECS
    • 二 在服务器中配置PHP开发环境
    • 三 上传项目并配置
        • 遇到未找到PDO驱动错误could not find driver
        • 遇到权限问题file_put_contents failed to open stream: Permission denied
        • 远程连接MySQL
        • 为TP项目设置路由,隐藏网站访问路径中的index.php
    • 四 SSL认证

导语

本文主要总结了个人在第一次部署tp5项目时遇到诸多问题,为后面的小伙伴提供一些参考。

一 购买与配置阿里云ECS

搭建一个可以供外网访问的WEB项目,笔者知道的途径一共有三种:1本地做服务器,然后在本地机安装花生壳,配置内网穿透;2购买虚拟主机;3购买云服务器ECS。本文介绍的是通过购买阿里云的云服务器做WEB项目的部署。
1、首先你需要一个阿里云的账号,注册登陆之后,在产品中找到云服务器选项,点击立即购买
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第1张图片
2、购买成功之后,购买域名,购买自己心仪的域名。如果需要的话
3、域名实名认证。如果购买了域名的话
4、备案服务器,注意:备案的前提是你的域名已经实名认证超过3天
5、等到备案结束,我们需要在阿里云控制台中设置服务器,开放web项目所需要用到的端口。
6、为域名绑定服务器公网IP地址。如果购买了域名的话
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第2张图片
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第3张图片

第一次使用时是没有www和@的,需要用户自己创建,其中www表示你的域名可以通过www.xxx.xxx访问,@表示你的域名可以通过xxx.xxx访问。点击添加规则自行添加,记录值为自己的公网IP,其他选择默认即可。

7、开端口,这一步很重要,因为在服务器实例初始状态是没有开发web所需要的端口的,需要用户自行设置。

端口号 说明
80 HTTP协议访问端口,使用Apache
8080 www代理服务端口,使用Tomcat
3306 如果需要远程连接MySQL
443 如果服务器已SSL认证,且希望使用HTTPS协议访问

进入阿里云ECS控制台
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第4张图片
选择进入安全组设置
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第5张图片
新建规则

超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第6张图片
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第7张图片

二 在服务器中配置PHP开发环境

登录服务器可以直接通过阿里云的控制台,选择ECS然后进行远程连接,也可借助Xshell工具。
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第8张图片
首先在安装PHP开发环境之前,需要升级apt-get,避免遇到找不到软件包的错误。

# 可以不带sudo
sudo apt-get update
sudo apt-get upgrade

1、安装MySQL

sudo apt-get install mysql-server
# 安装完成之后通过查看版本号,确定MySQL是否成功安装
# mysql --version

MySQL安装验证
2、安装Apache

sudo apt-get install apache2

安装完成之后在浏览器中输入自己服务器的公网IP,如果看到下面的界面,则证明安装成功
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第9张图片
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安装成功。
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第10张图片

三 上传项目并配置

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,在浏览器中输入正确的项目网址,即完成。

遇到未找到PDO驱动错误could not find driver

解决办法:
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
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第11张图片

如果用户最开始选择安装的是PHP5.6版本的,由于在Ubuntu16中会因为各种软件包找不到,而导致在网上的诸多教程无法解决问题。此外,在服务器中的PHP和Apache的目录结构也与网上教程中的不一样,他们有很多是用Nginx配置的。

遇到权限问题file_put_contents failed to open stream: Permission denied

解决办法:

# 为了一步到位,为项目根目录及其子目录中的所有文件授权
chmod -R 777 [/var/www/html/项目根目录]

远程连接MySQL

解决办法:
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
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第12张图片超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第13张图片

为TP项目设置路由,隐藏网站访问路径中的index.php

解决办法:
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

四 SSL认证

如果希望别人通过HTTPS来访问你的项目,那么就需要对域名进行SSL认证
1、阿里云控制台中购买证书,如果你有预算可以买付费的,也可以买单域名免费证书,笔者买的是Symantec的单域名免费证书,年限1年,推荐购买Symantec

登录:阿里云控制台,产品与服务,证书服务,购买证书。
购买:证书类型选择 免费型DV SSL,然后完成购买。
补全:在 我的证书 控制台,找到购买的证书,在操作栏里选择 补全。填写证书相关信息。
域名验证:可以选择 DNS或文件,如果域名用了阿里云的 DNS 服务,再勾选一下 证书绑定的域名在 阿里云的云解析。
上传:系统生成 CSR,点一下 创建。
提交审核。

超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第14张图片
2、进入证书控制台可以看见所有“我的证书”,选择刚刚购买的证书,“补全”
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第15张图片
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第16张图片
补全信息
提交审核,刷新,审核通过之后因为笔者选择的是文件方式,所以要根据文档自行下载验证文件,并做相应设置。提示订单状态异常不要管
3、手动验证,如果不是文件验证,直接跳过

  • 下载fileauth.txt文件
  • 在web项目根目录即项目VirtualHost中指定的DocumentRoot下新建.well-known/pki-validation目录并将fileauth.txt拷贝进去
  • 确保HTTP地址可以正确访问
  • 点击检查配置等待审核

手动验证
手动验证
4、刷新,审核通过,就可以在证书控制台下载刚刚颁发的证书
下载的验证文件包括:215056369000043.key、215056369000043.pem、chain.pem、public.pem
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第17张图片
5、配置Apache

因为笔者服务器上的Apache文档结构与文档中的略有差异,所以并未完全按照文档操作。如果你按照文档可以正常操作则按文档操作。

(1)在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为215087847870043.key;
超详细攻略:阿里云服务器部署ThinkPHP项目--从0出发[Ubuntu 16]_第18张图片
(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

你可能感兴趣的:(网页开发)