Linux部署网站(Nginx+PHP+MySQL)
一、部署思路
做好网站部署前期准备,购买域名、服务器、备案等工作(如果是学习需要,可以使用虚拟机),在服务器上使用Nginx、PHP、MySQL官方网站提供的源码包进行本地编译安装。安装完成之后对各软件进行配置、修改配置文件等工作,以及对服务器安全进行配置,如打开防火墙,开放相关端口等,保证各软件、各模块之间能够互相配合,支持网站各项功能正常使用。最后进行网站源代码和编写和上传工作。
二、网站架构
考虑到网站初期访问人数较少资源有限,所以将应用程序、文件资源和数据库都放在同一个服务器中,如果网站具有一定规模,可以考虑购买使用数据库服务器、文件服务器将给服务分开管理。
本文将所有服务放在同一服务器上。
三、环境
服务器系统:CentOS 7.9
Nginx版本:1.22.1
PHP版本:7.3.23
MySQL版本:8.0.31
RHEL(红帽)系统可完全参考本文章。
四、前期准备工作
省略购买域名、服务器、备案、安装操作系统等操作
1. 配置yum仓库
在安装所需软件时,我们需要非常多的依赖,所以将yum源更换为国内访问速度更快的清华镜像源
在 /etc/yum.repos.d 目录下新建CentOS-Base.repo文件,并在文件中写入以下内容:
[base]
name=CentOS-$releasever - Base
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
保存文件后使用 yum clean all
命令清除缓存,然后使用yum makecache
生成新的缓存。
2. 安装依赖
安装所需软件需要很多依赖,所以在开始之前我们将所需的依赖全部安装,在命令行输入以下命令,执行(tips:可以复制哟 ^o^/ )
yum -y install apr* autoconf automake numactl bison bzip2-devel cpp curl-devel fontconfig-devel freetype-devel gcc gcc-c++ gd-devel gettex-devel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libaio libtiff* make openssl-devel patch pcrdevel perl php-common php-gd telnet zlib-devel libtirpc-devel gtk* ntpstat na* bison* lrzsz cmake ncurses-devel libzip-devel libxslt-devel gdbm-devel readlin-devel gmp-devel
五、安装Nginx
1. 下载并解压源码包
在工作目录(建议/usr/local/src)使用wget
命令从Nginx官方网站下载最新版本的Nginx源码包,然后使用tar
命令加上-zxvf
参数将下载的源码包解压到当前工作目录。
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
解压后会发现当前目录下多出一个,nginx-1.22.1的目录,使用cd
命令进入此目录
2. 对Nginx的安装进行配置
进入之前解压好的目录执行 ./configure 文件对Nginx的进行配置,如设置Nginx的安装目录、启用SSL模块等
./configure --prefix=/usr/local/nginx --with-http_ssl_module
--prefix
参数用来设置nginx的安装目录,可自行更改,但是要注意目录的权限问题,后方参数为开启某模块,这里我们仅需开启ssl模块,以便开启后期https访问
3. 安装及配置
在执行完 ./configure文件后若无报错,则使用make 和 make install 命令编译并安装Nginx,安装完成之后创建Nginx软件的运行用户nginx,并设置为“不可登录”。
useradd nginx -M -s /sbin/nologin
进入Nginx的安装目录找到nginx.conf的配置文件,将运行用户由nobody改为nginx用户组的nginx用户。然后将http块中的server块中的server name后面的内容修改为已经正确解析到此服务器IP的域名。之后在第一个location块中将index.php增加在最前面,保证访问网站时优先返回index.php文件作为首页。将第二个location块,也就是有关PHP的配置信息部分的注释解开,并做相关修改。Nginx的监听端口使用默认的80端口,不做修改。
具体请参考下方内容(无关内容已省略):
# ---此处需要修改---
user nginx nginx;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
};
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
client_max_body_size 100M;
client_body_buffer_size 1024k;
fastcgi_intercept_errors on;
server {
# ---监听端口,默认80---
listen 80;
# ---此处需要修改,也可不修改,默认使用IP访问---
server_name xxx.xxx.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
# ---此处需要修改---
index index.php index.html index.htm;
};
# ---此处可选择修改,若有404页面,需解开注释并且在后方指定404页面的路径---
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
# ---同404---
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
};
...
...
...
# ---此处需要修改,默认是注释的,需要解开下方注释,并修改fastcgi_param SCRIPT_FILENAME后方的内容---
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# ---这里是网站的根目录,也可修改为$document_root---
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
};
...
...
};
...
...
...
};
至此,Nginx的安装完成。
六、安装MySQL
1. 下载并解压源码包
下载MySQL源码包的方式有很多,可以使用wget命令,也可以从Windows上下载后上传到服务器中,由于MySQL源码包中有许多安装包是我们不需要的,所以我从Windows下载后删除压缩包中不需要的内容后,在上传到服务器,如果你也使用这种方式,那么我们只需要留下压缩包中的以下文件即可:
你可以像我一样操作,也可以直接下载我已经修改好的压缩包,mysql-8.0.31.tar,或者直接在命令行使用wget http://files.cikian.cn/mysql/mysql-8.0.31.tar
下载,
解压步骤在此省略,同Nginx源码包的解压大同小异,不同点是下载的MySQL源码包是.tar文件而不是.tar.gz文件所以使用tar
命令解压时不需要使用-z
参数,只需要使用-xvf
参数即可。
2. 安装rpm包
由于下载的源码包解压后是已经编译过的多个rpm包,所以可使用rpm命令直接安装即可,但是由于各包之间存在依赖关系,所以安装时要注意安装顺序,依次安装:mysql-community-common-8.0.31-1.rpm、mysql-community-client-plugins-8.0.31-1.rpm、mysql-community-libs-8.0.31-1.rpm 、mysql-community-client-8.0.31-1.rpm、mysql-community-icu-data-files-8.0.31-1.rpm 、mysql-community-server-8.0.31-1.rpm
使用 rpm -ivh mysql-community-... .rpm
命令安装上方的顺序安装即可
(如果安装过程中出现问题,请继续往下看哟 (^///^) )
3. 问题解决
经过我多次安装,以及帮他人安装,在MySQL的安装过程中可能会出现以下问题
a. 依赖检测失败(一般不会出现,因为我们已经安装过依赖)
若安装过程中出现以下报错信息:
使用 wget http://files.cikian.cn/mysql/openssl-libs.rpm
下载此依赖文件,然后使用 rpm -ivh openssl-libs.rpm --force
命令安装,注意一定要加 –force 参数!
b. 软件冲突
一般情况下,安装操作系统时,系统会自带一个叫mariadb的数据库软件
使用 rpm -qa | grep mariadb
命令查找冲突软件mariadb所有相关的服务并使用rpm -e –-nodeps ...
命令忽略依赖卸载,也就是强制卸载冲突软件本体以及其相关的所有服务。**(搜索到多少卸载多少,注意名字,如我这里需要卸载的是mariadb-libs,如有其他软件的冲突,也如此操作)**
4. 初始化及启动
全部安装完成后,使用 mysqld –-initialize –-console
命令初始化MySQL,之后使用 chown -R mysql:mysql /var/lib/mysql
命令设置MySQL运行用户的权限。然后使用 systemstl start mysqld
启动MySQL服务,并在mysqld.log文件中查看MySQL的root用户临时密码
localhost后方的内容即临时密码,如我查询到的临时密码为:bQUzwB-2pLG+
然后使用 mysql -u root -p
命令并输入查询到的临时密码进入MySQL控制台,在MySQL控制台中使用 alter user 'root'@'localhost' identified by '123456'
修改root用户的密码,123456即为我修改后的密码。
至此,MySQL的安装完成。
七、安装PHP
1. 下载并解压源码包
在工作目录使用 wget
命令从PHP官方网站下载PHP的源码包,也可使用 wget http://files.cikian.cn/php/php-7.3.23.tar.gz
命令下载我已经下载好的源码包,并使用tar命令解压,此步骤同安装Nginx时的下载和解压几乎一致(除了文件名),所以在此不再赘述。
2. 对PHP的安装进行配置以及安装
进入解压后的PHP源码包,运行 ./configure 文件加上相关参数对PHP的安装进行配置,如设置PHP的安装目录、启用php-fpm、开启mysqli拓展、开启gd拓展等,可根据需求自行增加或删除拓展,但是建议不要删除,可增加。
./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring --with-gd --with-jpeg-dir --with-png-dir --with-openssl --with-zlib
执行完上述步骤后,使用 make
和 make install
命令进行编译并安装
3. 生成配置文件
待安装完成之后,将PHP提供的配置文件模板复制到相应的目录,一是源码包根目录下的 php.ini.development
,需要将它复制或者移动到PHP安装目录的etc目录(下方简称etc目录)中,并且重命名为 php.ini
;二是etc目录下的 php-fpm.conf.default
文件,需要将它原地重命名为 php-fpm.conf
;三是etc目录中的php-fpm.d目录下的 www.confapl.default
文件,需要将他原地重命名为 www.conf
。
至此,PHP的安装完成。
八、启动服务并测试
直接在命令行运行 /usr/local/nginx/sbin/nginx
和 /usr/local/php/sbin/php-fpm
启动nginx和php服务
在网站根目录也就是 /usr/local/nginx/html 目录下新建一个文件名为 index.php 在其中写入以下内容:
<?php
phpinfo();
?>
保存后访问域名,未配置域名则直接访问IP,虚拟机访问127.0.0.1,出现PHP信息,则配置成功,若是使用虚拟机,还需要使用 firewall-cmd --zone=public --add-port=80/tcp --permanent
和 firewall-cmd --reload
开放80端口并重启防火墙,云服务器使用控制台的安全组放行端口即可
至此,Linux使用Nginx、PHP、MySQL部署网站的全部工作完成。
如有问题,欢迎留言讨论
原创不易,转发即使用请标明出处,万分感谢!
感谢阅读!