乐趣区

Linux基本命令入门以及在云服务器上部署ThinkPHP5MySQL

零:摘(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 保存退出,再去登录时就发现了这个久违的笑脸

到此,云服务器部署 ThinkPHP 和 MySQL 完成!


总结:


Linux 命令和项目部署可以说是程序员的基本操作,之前自己在学习这些内容时也走了很多弯路,写博客的意义在于发现问题和分享解决问题的过程。

对于 Linux 命令,自己的经验是,不用可刻意记忆代码,功到用时自然成,随着自己的经验逐渐丰富,许多技能慢慢就自然会了。

退出移动版