LAMP代表的是一系列开源软件用来开发网站使用的。其中L代表Linux,可以为Ubuntu,也可以为Debian或其他Linux系统,A是web服务器Apache,数据是存储到Mysql中,就是M。动态内容由PHP处理,也就是P。今天就介绍一下如何安装这些软件。
首先这里需要一个云服务器,这里推荐搬瓦工的VPS,使用它的CN2的方案,则国内访问速度很快。
优惠码:BWHCGLUKKB(购买时输入有折扣)
之后选择安装Ubuntu,你也可以根据自己需要选择其他的Linux系统。
安装Apache
Apache服务器是很知名的也是使用较多的web 服务器 之一。它有着较好的文档和比较活跃的社区用户。
首先先更新一下 package manager的缓存
sudo apt update
之后安装Apache使用下面的命令
sudo apt install apache2
你将会被提示确认安装,确认请输入Y之后按回车键
这时你输入 http://你的服务器IP,则会看到 Apache默认的web页面
安装Mysql
现在你已安装成功并运行着Web服务器Apache,现在需要安装Mysql来存储和管理数据。Mysql是PHP开发环境下很流行的一个数据存储管理系统
安装mysql使用下面的命令
sudo apt install mysql-server
当提示确认时,输入Y,并按回车键
当安装完后,推荐运行一个Mysql已预装的安全的脚本,这会去除掉一些默认的一些不安全设置。不过运行时会报错,原因是因为运行mysql_secure_installation
这个脚本,它会尝试未Mysql得root用户设置密码,而再安装时,root用户默认没有密码。解决办法就是先改变root验证方式再给它设置密码
登录Mysql root
sudo mysql
之后改变root得验证方式为实用密码的,并设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后退出
exit
然后运行这个安全设置脚本
sudo mysql_secure_installation
它会询问你是否配置 验证密码的插件 VALIDATE PASSWORD PLUGIN
输入Y表示是,输入其他的就是不使用验证密码插件并继续
如果你输入Y,它会询问你验证密码的级别,有0,1,2,级别越高则对输入的密码要求越严格,如果不满足则会报错。这里不是特别推荐使用这个插件,不过你可以根据自己需要来选择
安装PHP
你已经有了Apache来提供输出内容的服务,Mysql来管理数据,而PHP是处理你的代码来动态显示内容给用户。除了安装php这以外还要安装php-mysql,它是PHP的一个模块来和Mysql进行通讯使用的。你同时还需要安装libapache2-mod-php来让Apache来处理你的PHP文件
安装命令如下
sudo apt install php libapache2-mod-php php-mysql
安装完后,输入下面的命令来确认你的PHP版本
php -v
改变Apache的目录索引(可选)
当某个目录被请求服务时,Apache有一个默认的处理文件的优先顺序,有时,你需要改变它。如果用户从服务器请求了一个目录,那么Apache首先寻找那个目录下的index.html。当使用PHP时,想让Web 服务器有限处理PHP文件,这样Apache会在目录下现寻找index.php文件。如果你不这么做,index.html永远优先于index.php
为了改变这个设置,打开dir.conf文件
sudo nano /etc/apache2/mods-enabled/dir.conf
它的内容如下
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
把index.php移动到前面,则如下
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
当你编辑完成时,一起按CTRL和X键来保存和关闭文件。确认保存输入Y,之后按回车键来确认文件保存的位置
之后重启Apache
sudo systemctl restart apache2
目录索引在Aapche的使用
使用Apache的默认目录索引配置,index.html将永远优先于index.php。这个在PHP应用中,设置维护页面则非常有用。创建一个临时的index.html文件告诉浏览者目前正在维护这样一些信息,由于它优先处理于Index.php,所以它则作为默认加载页。当维护结束时,将index.html改名字或者删除掉,则会恢复正常的应用页面。
为网站配置虚拟主机
当使用Apache Web服务器时,可以创建虚拟主机(类使用Nginx的服务块),通过这个可以封装配置信息,而且可以在一个服务器上配置超过一个域名。在这个教程中,我们以域名为 your_domian为例子,你应该用你的域名替换掉这个域名。
Apache提供了一个默认的虚拟主机,用来处理 /var/www/html 这个目录。如果处理单一网站的,这样可以,如果处理多个网站,则需要改变以下。我们不对这个目录/var/www/html
做变更,我们为你的your_domain在/var/www下面再创建个目录。把 /var/www/html留作默认处理目录,如果用户请求的网站找不到的话,则由此目录处理
为你的your_domian 创建一个目录
sudo mkdir /var/www/your_domain
之后改变这个目录的拥有者为你当前的用户
sudo chown -R $USER:$USER /var/www/your_domain
之后再Apache的sites-available下新建一个新的配置文件
sudo nano /etc/apache2/sites-available/your_domain.conf
这会创建一个新的空文件,将下面的内容添加到文件中
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
保存并关闭文件即可。如果你使用的时nano,按CTRL和X键,然后Y,回车
这个配置文件告诉Apache使用 /var/www/your_domain来处理你的 your_domain作为web的根目录,如果你想不用域名来测试Apache,你可以注释掉 ServerName和ServerAlias这部分,在每一行的前面添加#即可注释。
现在使用a2ensite来使这个配置生效
sudo a2ensite your_domain
你可能也需要使默认的配置失效。如果你不使用域名,Apache的默认配置会覆盖掉你的虚拟主机的配置。使用下面命令可以使Apache的默认配置失效
sudo a2dissite 000-default
为了确保配置文件没有语法错误,请运行下面的命令来测试
sudo apache2ctl configtest
之后重新加载Apache,这样新的配置才会生效
sudo systemctl reload apache2
创建网站内容
你的网站已经生效了,可是你的网站根目录/var/www/your_domain下是空的,在这个目录下创建一个index.html文件来测试一下你的虚拟主机是否工作正常
nano /var/www/your_domain/index.html
之后把下面的内容放到文件中
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>
保存并关闭文件,之后打开浏览器,输入你的域名或IP地址
http://your_domain or IP
网页上应该会显示相应内容。
测试你的Web服务器的PHP处理
你已经有了一个自定义的目录来处理你的网站的文件和目录,下面创建一个PHP脚本来确认Apache能正常的处理PHP文件请求。
在你的自定义根目录下 创建一个info.php
nano /var/www/your_domain/info.php
这会打开一个空文件,将下面的PHP代码放入其中
<?php
phpinfo();
之后保存并关闭文件
为了测试这个脚本,打开浏览器之后,输入你的域名或IP,后面跟上 info.php
http://your_domian_orIP/info.php
这样你会看到默认的PHP网页,上面显示了你服务器的一些信息。
测试PHP连接数据库(可选)
如果你想测试PHP是否能连接Mysql并能执行数据库查询,你可以创建一个测试表,插入测试数据,之后用PHP的脚本来查询它的内容。在开始之前,你需要创建一个测试数据库,并创建一个新的Mysql用户, 这个用户可以访问这个数据库
创建一个数据库example_database和一个用户example_user,你可以用其他的名字代替
首先使用root用户连接数据库
sudo mysql
为了创建一个数据库,运行下面的命令
CREATE DATABASE example_database;
现在创建一个新的用户并且赋予它全部的权限可以访问这个刚建的数据库。
下面的命令会创建一个新的用户example_user,并使用caching_sha2_password的验证方法,这里用你自己的密码来替换掉password
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';
这里的caching_sha2_password 是Mysql文档中比较推荐的方式,它比较旧的,也在广泛使用的验证方式mysql_native_password更安全。但是有些PHP版本和它不太兼容,有时会报错。PHP表示从7.4版本之后,这个错误已经解决。如果你之后遇到这个问题,可以将验证方式改为mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
现在给这个用户赋予访问那个数据库的权限
GRANT ALL ON example_database.* TO 'example_user'@'%';
这会给这个用户访问这个数据库的全部权限,同时可以避免这个用户在这个服务器上创建和修改其他数据库
之后退出Mysql
exit
通过登录这个用户来测试它是否有相应的权限
mysql -u example_user -p
这里的-p表示提示你输入密码,这个密码就是刚才创建用户时的那个密码。
登录之后确认是否能访问数据库 example_database
SHOW DATABASES;
这个会显示类似如下
Output+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
现在创建一个表 todo_list,运行下面的命令
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
插入几行内容到这个表中,使用不同的数据,重复下面命令多次
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
为了确认数据已成功插入到表中,可以运行下面的命令
SELECT * FROM example_database.todo_list;
它会显示如下
Output+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
在确认数据每问题后,退出Mysql
exit
现在你可以创建一个PHP文件,用来连接Mysql数据库并查询这个todo_list表内容。如果连接数据库有问题,则抛出异常。把下面内容放入todo_list.php。记得把example_user和password替换为你自己的
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
保存并关闭这个文件
现在你可以打开浏览器,通过访问你的域名或IP后跟todo_list.php来访问这个页面
http://your_domain_or_ip/todo_list.php
这个页面将会显示你刚插入的表的内容。
发表回复