LNMP = Linux + NGINX + MySQL + PHP,是非常常用的建站环境套装。老外通常也把这个称为 LEMP,因为 NGINX 发音开头为 EN,缩写自然是 E。今天老唐介绍一下在 Ubuntu 20.04 LTS 系统上手动安装 LNMP 建站环境的教程,安装的东西包括 NGINX、MariaDB、PHP。MariaDB 是 MySQL 的社区版本,功能是一样的。
如果需要一键安装,可以参考《一键安装 LNMP 建站环境,部署 PHP + MySQL》。
一、安装前准备
安装前我们需要一台 VPS,我们可以购买一台腾讯云、阿里云、Hostwinds、Vultr 或者搬瓦工的 VPS,具体可以参考《#老唐推荐# 最好用的国内云服务器、国外便宜 VPS 推荐》这里的推荐。
之后我们把系统重装为 Ubuntu 20.04 LTS 即可,然后获取 root 密码、登录信息等,登录到 VPS 之后开始后续操作。
二、安装 NGINX 和 MariaDB
使用下面命令进行安装:
$ sudo apt update && sudo apt install -y nginx mariadb-server
三、配置 MariaDB
安装完成后,首次运行 MySQL / MariaDB 的设置,默认会问我们输入密码,我们直接回车即可。
然后输入 N
并且回车,就可以重置密码。
$ sudo mysql_secure_installation
连接到 MariaDB 监控器:
$ sudo mariadb
新建一个数据库:
CREATE DATABASE example_db;
赋予权限(注意修改其中的用户名和密码):
GRANT ALL ON example_db.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
更新权限:
FLUSH PRIVILEGES;
exit
再次连接:
$ mariadb -u username -p
确保可以正常连接:
SHOW DATABASES;
设置为当前数据库:
USE example_db;
新建一个表以进行后续测试:
CREATE TABLE table1(column1 varchar(255));
INSERT INTO table1 VALUES("Database connection established successfully");
exit
四、安装 PHP 和 Certbot
安装 php-fpm 和 php-mysql
$ sudo apt install -y php-fpm php-mysql
安装 snap:
$ sudo apt install -y snap
安装 certbot:
$ sudo snap install --classic certbot
五、配置 NGINX
新建一个网站目录(注意替换 example.com):
$ sudo mkdir -p /var/www/example.com
设置正确权限:
$ sudo chown -R $USER:$USER /var/www/example.com
新建一个配置文件:
$ sudo vim /etc/nginx/sites-available/example.com
填写下面配置信息:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
server_name example.com;
root /var/www/example.com;
location / {
index index.html;
}
}
重启 NGINX:
$ sudo systemctl restart nginx.service
运行一次 certbot:
$ sudo certbot certonly --dry-run --nginx -d example.com,www.example.com
获取 LetsEncrypt 证书:
$ sudo certbot certonly --nginx -d example.com,www.example.com
打开 NGINX 配置文件:
$ sudo vim /etc/nginx/sites-available/example.com
将所有内容都删除,然后复制下面内容进去:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
server_name example.com;
root /var/www/example.com;
location / {
return 301 https://example.com$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
root /var/www/example.com;
index index.php index.html index.htm index.nginx-debian.html;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "default-src 'self'; script-src 'self';";
add_header Referrer-Policy "no-referrer";
add_header X-Frame-Options "SAMEORIGIN" always;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
server_name www.example.com;
server_name example.com;
access_log /var/log/example.com.log;
error_log /var/log/example.com.error.log;
}
添加软连接:
$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
重启 NGINX:
$ sudo systemctl restart nginx.service
六、测试
新建一个文件:
$ vim /var/www/example.com/testdb.php
添加如下内容:
<?php
$mysqli = new mysqli("localhost", "username", "password", "example_db");
if (mysqli_connect_errno()) {
printf("Connection failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT column1 FROM table1";
if($result = $mysqli->query($query)) {
while($row = $result->fetch_row()){
printf("%s\n", $row[0]);
}
$result->close();
}
$mysqli->close();
?>
打开下面链接测试是否正常:
- https://example.com/testdb.php
如果提示“Database connection established successfully”就是成功连接到数据库了,并且 PHP 也正常运行了。
参考:https://www.vultr.com/docs/install-a-lemp-stack-on-ubuntu-20-04-lts