Linux部署网站(Nginx+PHP+MySQL)


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

执行完上述步骤后,使用 makemake 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 --permanentfirewall-cmd --reload 开放80端口并重启防火墙,云服务器使用控制台的安全组放行端口即可

至此,Linux使用Nginx、PHP、MySQL部署网站的全部工作完成。

如有问题,欢迎留言讨论

原创不易,转发即使用请标明出处,万分感谢!

感谢阅读!


文章作者: Cikian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cikian !
评论
  目录