零:摘(fei)要(hua)
时光荏苒,转眼间,四个月悄然而逝,我人生中的第一个项目也落下帷幕。而我也从一个什么也不懂的小白,变成了一个熟练掌握 HTML、PHP、微信公众号开发以及使用 Linux 服务器部署代码的大白了。
回顾之前探索的过程,算不上艰辛,也算得上有些难度。回望之前为了弄明白一个功能而四处爬帖子的历程,真是感慨万千,随着自己一点一滴的进步,查阅资料的能力逐步加强,解决问题的时间也大大缩短。
为了让像我一样刚入门的小白少走弯路,我把自己之前部署 ThinkPHP5.1 的过程记录下来,以供参考。
一:Linux 简单命令
连接服务器:
对于刚刚入门的同学来说,当你获取了一台 Linux 服务器时,第一时间想到的,可能是打开 Windows 的远程桌面连接,然后兴奋的输入 IP 地址,之后,提示远程连接失败 …
注意诶,这是 Linux,不是 Windows 哦。如果不经过设置,Linux 是不能直接远程桌面连接的,另外 …Linux 一般也不会去用图形界面操作的,而是用简单高效的——命令行。
所以,想要登录 Linux,就需要借助一个叫做 SSH 的工具。
SSH 是啥:
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
——摘自百度百科
对于 Windows 用户来说,需要下载支持的 SSH 的工具 Putty,如果你正在使用 GitHub,它的 Bash 里面可以直接支持 SSH。
对于 Mac 用户来说,终端直接支持 SSH。
Linux 用户嘛 … 肯定不需要看这种入门文章了。。。
第一条命令,登录:
ssh root@xxx.xxx.xxx.xxx
"root" 处换成你服务器上的用户名,如果是新安装的系统,很大可能就是 root
"xxx" 处换成服务器的 IP 地址
输入回车之后会提示输入密码,终端中输入的密码是不可见的,所以不用奇怪,放心的输入好了。
登录成功之后,可以看到再次出现的输入行,用户由本地用户变成了服务器上面的用户。
如果需要断开 SSH 连接,只需要 logout 一下就可以了
logout
接下来是基本操作
移动到某个目录:
cd /your/place
cd 后面的第一个 / 是根目录,意味着这是树状结构的最顶层,其他的一切目录都在根目录的下层。
或许初学者可能会想:” 你只给我一个 cd 命令就让我去找文件,这我哪找得到啊?难道我还要记住每一个文件的位置?”
NONONO,终端中有一个神器,叫做 Tab:
- 如果用户记不住命令的全称,按一下 Tab,系统会尽可能去匹配命令:当可选命令大于一条时,命令行没有反应,此时再按一下 Tab,终端会打印所有可能实现的命令
- 在用户记不住当前目录下有什么文件时,只需要 cd 到某个路径之后按两下 Tab,即可显示此目录下所有的文件,然后输入你想要前往的目录的一部分名称,打一下 Tab,如果这个前缀是当前目录里唯一的,就可以自动补齐。
没有 Tab 的命令行没有灵魂的
显示目录下的文件夹:
ls
如果需要显示隐藏文件:
ls -a
新建文件夹:(test 文件夹名)
mkdir test
文件夹或文件改名:(原文件名 新文件名 支持 Tab 补齐)
mv test ThinkPhp
新建一个文件:(目录名 / 文件名)
touch test/a.txt
使用 Vim 编辑文件:
vim a.txt
Vim 简单操作:
上下左右键 - 光标移动
i - 插入文字
d - 删除整行
esc - 退出当前模式(也就是进入命令模式): - 输入命令
:w - 写入文件(保存):q - 退出
:wq - 保存并退出
重要:修改文件夹权限(test 为文件夹名)
chmod -R 777 test
// - R 表示递归给文件及文件夹内文件更改权限
// r(4),w(2),x(1)
重要:文件夹删除操作(跑路必备)
rm -rf test
// 如果需要 root 权限,改成
sudo rm -rf test
// 千万别拿重要文件乱试,后果自负
有了以上命令基本上可以流畅操作 Linux 命令行了。
2、服务器软件的选择
起初我还打算在服务器上手动安装运行环境,直到有一天老师突然说:各大虚拟化平台上都有直接集成运行环境的镜像,我才恍然大悟,使用集成了环境的镜像可以大幅度减少折腾的时间。
在下图中可以看到,Apache、PHP、mysql、FTP 都有了,只要安装镜像就啥也不用折腾了。
(如果不想用集成软件的镜像,也可以安装原版的系统,自行下载运行环境)
系统装好之后,浏览器输入 IP 或者域名,可以看到成功跳转到 TP 的首页,就说明系统和运行环境都正常工作了。
下一步就是 SSH 登录服务器了。
3、部署 TP5.1
对于不同的镜像来说,根目录(DocumentRoot)的位置可能不同,这个路径应该是封装这个镜像的时候就定义好了。如果第一次登录时找不到 TP5 的根目录,可以使用搜索大法:
find / -name thinkphp
// "/" 是搜索的路径,设置成根目录是在所有文件中搜索
// 如果搜索根目录,时间会比较长,请耐心等待
// thinkphp 是要搜索的文件名
找到文件目录之后,cd 到那个目录,ls 一下,可以正常显示 TP5 框架的文件。
然后把原有的 TP 文件夹重命名,因为我们要添加新的文件夹
(本文中把 thinkphp 改为 thinkphp00)
mv thinkphp/ thinkphp00/
我们可以使用 GitHub 来向服务器传输代码,避免设置 FTP 的步骤。所以,在本地先把代码提交到 GitHub 仓库中,然后在 GitHub 的仓库中找到 clone 链接,点一下按钮复制。
在终端上找到原来 ThinkPHP 的上级目录,
git clone http://your.address thinkphp
// http 后面是 GitHub 仓库地址
// thinkphp 是克隆到服务器上的文件夹名,// 如果不填,则使用项目默认的文件夹名
由于镜像中的 Apache 改了根目录的位置,所以 Url 比较短
(为了进一步缩减 Url 长度,以后可以开启重写功能, 连 index.php 都不用输入了)
// 不需要输入 index.php 和 public:http://your ip/public/index.php/Module/Controller/Function
// 只需要输入:http://your.ip/index.php/Module/Controller/Function
// 如果再开启重写之后,链接变成了:http://your.ip/Module/Controller/Function
如果不出意外,此时应该能正常访问到某个控制器下的方法
如果出现 Not Found(中文提示是 ” 找不到对象 ”),那说明可能链接输入有误,或者 Apache 中设定的位置不对,或者重写的设置不对
4、部署 MySQL
在经过一系列操作之后,我们的项目的网站已经可以访问了,可是随便点几下就会报错,那么 … 是不是忘记了什么事情——对,数据库!还没有导入数据库。
QL.png](/img/bVbzs92)
首先启动服务,然后尝试登录数据库
// 启动 MySQL 服务
service mysqld start
// 以 root 用户带密码登录
mysql -u root -p
然后突然发现我并不知道默认密码 …
然后去搜索了一下,才发现这货的密码在一个文件里面,于是我找到这个文件
果然有所收获,
需要注意的是,这里的密码,只是用于查看的,如果直接更改这个文件的内容,数据库的任何信息都不会跟着变化
有了密码之后,成功登录,此时发现数据库只能本地登录,不能远程访问(提示 1130 错误,权限问题)
所以需要开启用户的远程访问权限
// 查找所有用户的主机名、账号、密码
select host,user,passward from mysql.user;
// 授权任意主机名使用 root 用户,123456 密码远程登录
grant all on *.* to root@"%" indentified by '123456';
// 注意:密码仅供演示,实际生产环境中严禁使用 root 用户远程访问,更不能把密码设置成白痴一样的 123456!!!
然后,在 Navicat 软件中,就可以远程连接服务器上的数据库了
然后照着本地数据库在服务器上建立一模一样的数据表就 OK 了
(我是不会告诉你们,Navicat 中的数据表拖拽一下就可以直接复制的)
然后还差最后一步就大功告成了——在服务器上的 Config 中修改数据库地址:
cd /your thinkphp address/thinkphp/config
vim database.php
只需要把用户名和密码改到就可以了。然后 esc :wq enter 保存退出,再去登录时就发现了这个久违的笑脸