文章于20211207更新
前言
之前帮舍友(有偿)写了个毕业设计,做LCMP环境搭建网站服务器,那几乎是用了我当时所有所有所有的知识写出来的东西了,整合了我很多博客的东西,几乎是我博客很多内容的集合体,我想了一下,既然都写出来了,那就整理一下那个设计,把设计内核搬上来,也算是给好几篇博文做个大总结,以后自己找起来也方便。
设计方案
确认整个环境所需的软件版本
- Linux版本
个人比较推荐建站使用CentOS或者Fedora,本文选择的是CentOS 7 - Caddy版本
目前Caddy的2.0还在Beta阶段,所以本文选择1.0来进行搭建使用。 - Mariadb版本
Mariadb版本使用截止到撰写本文时候的最新版。 - PHP版本
PHP版本使用截止到撰写本文时候的最新版。 - phpMyAdmin版本
phpMyAdmin用来在web端管理数据库。版本使用截止到撰写本文时候的最新版。
关闭服务器相关服务
因为建立网站是要公开的,但是Linux为了安全性启用了SElinux,SElinux主要是用来防止黑客入侵系统,但是弊端也是会阻隔任何访问服务器网站的用户。
防火墙开放端口
不建议用户关闭防火墙,因为关闭了SElinux之后会有一定的威胁,只要开放防火墙的相关端口即可,建立网站一般需要打开80端口,如果是有ssl证书认证的网站,也需要打开443端口。或者直接开启http和https服务即可。
安装软件
- yum包管理器
本文因为使用CentOS,CentOS的包管理器是yum管理器。环境所需要的软件全部通过yum下载安装。 - 包管理器配置源
因为系统配置好的源服务器内的工具版本不一定是最新的,所以用户需要根据需要手动配置源。 - 依次安装工具
先安装Caddy,然后到PHP,到Mariadb,最后到phpMyAdmin。
配置软件并启动所有服务
初始化Mariadb,配置php-fpm的fastccgi端口和php的权限,配置phpMyAdmin,对Caddy的配置文件进行修改。最后用systemctl启动所有服务。
安装配置过程
安装好Linux系统
如果是云服务器,直接选择CentOS安装即可,如果是本地建立私有服务器,需要自行到CentOS官网下载系统并安装,此处不对安装系统做叙述。
关闭Linux服务器相关服务
1.查看SElinux的启动状态
输入命令:/usr/sbin/sestatus -v
此时返回一个信息:SELinux status如果是enabled即为启动,disable为关闭。
2.关闭SElinux
如果检查状态是enabled,那么就需要手动关闭SElinux。
修改方法:
输入命令:vi /etc/selinux/config。
找到SELINUX=enforcing,把enforcing改成disabled即可。
开放相关端口
1.防火墙的相关命令
启动防火墙:systemctl start firewalld
禁用防火墙:systemctl stop firewalld
防火墙状态:systemctl status firewalld
开启http和https服务:firewall-cmd --permanent --add-service=http --add-service=https
重新载入防火墙设置:firewall-cmd --reload
2.执行使用过程
首先先启动防火墙,然后使用开启http和https服务的命令,最后重新载入防火墙即可。可以用“&&”连接多条命令执行,命令如下:
systemctl start firewalld && firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd –reload
安装所需软件
安装caddy
通过官方的方法安装:
curl https://getcaddy.com | bash -s personal
安装php
1.为yum包添加源
因为CentOS 7的yum包管理器里面的php版本比较旧,为了安装较新的版本,需要为yum包管理器添加一个remi仓库源
输入以下命令:
cd /etc/yum.repos.d && wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm && rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm && yum makecache2.安装php和组件
yum install -y php-fpm php-mysqlnd php-curl php-mbstring php-cli --enablerepo=remi-php72
安装mariadb
1.为yum包添加源
因为CentOS 7的yum包管理器里面的mariadb版本比较旧,为了安装较新的版本,需要为yum包管理器添加一个mariadb仓库源。
先新建一个仓库文件:
vi /etc/yum.repo.d/mariadb.repo
进入编辑模式,输入以下内容并保存:
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/{version}/centos7-amd64
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
//{version}为版本号
2.安装mariadb-server
yum install -y mariadb-server
安装phpMyAdmin
安装过程:先进入/usr/local,通过wget把phpMyAdmin下载下来,用unzip解压,最后把解压文件,并删除原来的压缩包即可。由于部分系统没有内置unzip,所以还需要另外安装unzip。
命令如下:
cd /usr/local && yum install -y unzip && wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip && mv phpMyAdmin-4.9.1-all-languages.zip phpMyAdmin.zip && unzip phpMyAdmin.zip && rm -rf phpMyAdmin.zip && mv phpMyAdmin-4.9.1-all-languages phpMyAdmin
配置软件
初始化Mariadb
刚安装完的Mariadb的密码是随机的,需要初始化设置。
进入初始化设置:
systemctl start mariadb && mariadb-secure-installation
//mysql初始化:mysql_secure_installation
按照下面初始化:
Enter current password for root (enter for none):
//输入root的密码:Enter直接确认键
Set root password? [Y/n]
//是否设置root的密码:Y
New password:
//新密码:输入你的密码
Re-enter new password:
//重复输入新密码:再输入一次密码
Remove anonymous users? [Y/n]
//是否删除匿名用户: Y
Disallow root login remotely?
//是否禁止root的远程登录:Y
Remove test database and access to it?[Y/n]
//是否删除测试的数据库:Y
Reload privilege tables now? [Y/n]
//是否现在重新加载权限表:Y
PHP的fastcgi端口配置
Fastcgi主要用于php和web server之间通信,使web server能够解析php的页面。
配置文件路径:/etc/php-fpm.d/www.conf
用vim进入配置文件,找到如下配置信息:
listen = ########
此处#号为原来的配置信息,这里需要把#改成127.0.0.1:9000。得出如下:
Listen = 127.0.0.1:9000
PHP的用户和组配置
配置文件路径:/etc/php-fpm.d/www.conf
用vim进入配置文件,找到如下配置信息:
user = apache
group = apache
把apache改成root,如下所示:
user = root
group = root
保存退出即可。
配置phpMyAdmin
phpMyAdmin本质是一个网站,所以实际上直接就能够使用,但是这里caddy还没有配置,同时phpMyAdmin还有需要配置的内容,否则启动会报错。
1.相关文件夹权限不足,和session会话有关,需要手动添加权限:
chmod 777 /var/lib/php/session
2./usr/local/php下无session保存会话的机制文件,解决方法如下:
输入命令:vi /etc/php.ini
找到:session.save_path = "/tmp"是否注释掉。如果注释,把注释去掉。
输入以下命令创建session储存文件夹:
mkdir -p /tmp
chmod -R 777 /tmp
配置Caddy
1.创建配置文件和相关文件夹
Caddy安装完成之后并不会建立配置文件,配置文件的路径是可以自定义的,一般来说都会把配置文件放于/etc/caddy文件夹下,且命名为caddy.conf。创建方法如下:
mkdir /etc/caddy && touch /etc/caddy/caddy.conf
Caddy需要预留文件夹用来存放ssl证书,新建一个文件夹并赋予755权限,命令如下:
mkdir -p /etc/ssl/caddy && chmod 755 /etc/ssl/caddy
2.写入配置文件信息
caddy的配置很简单,例子如下:
:80 {
root /
gzip
fastcgi / 127.0.0.1:9000 php
}
上面是最简单的动态网站配置例子。
:80表示端口号,可以自定义端口,也可以换成域名。root 后面是网站存放的路径,可自动搜索名称为index的文件。gzip 是一种网站压缩方式,可优化浏览速度fastcgi 127.0.0.1:9000 php 表示和php通信,用于解析php网页文件。
Caddy拥有许多插件,部分插件可以直接配置使用,例如在配置上加上browse,可以浏览root制定路径下的文件,写proxy可以做反向代理等等。
3.配置systemd文件
Systemd文件就是上面用于启动服务的systemctl服务,因为官方安装caddy不自带systemd文件,需要用户手动配置。
首先建立文件,命令如下:
touch /usr/lib/systemd/system/caddy.service
接着vim进入该文件,进入编辑模式,输入以下内容:
[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Restart=on-abnormal
StartLimitIntervalSec=14400
StartLimitBurst=10
User=root
Group=root
Environment=CADDYPATH=/etc/ssl/caddy
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/caddy.conf -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
PrivateDevices=false
ProtectHome=true
ReadWritePaths=/etc/ssl/caddy
ReadWriteDirectories=/etc/ssl/caddy
[Install]
WantedBy=multi-user.target
输入完成后保存文件退出,重新加载systemd服务,输入以下命令
systemctl daemon-reload
4.启动软件测试
Caddy:systemctl start caddy
Mariadb:systemctl start mariadb
Php:systemctl start php-fpm
操作排错
1.Caddy 启动失败:
配置文件输入有误,请检查caddy.conf文件
Systemd没有捕获文件,检查caddy.service文件ExecStart=后面命令caddy的路径是否正确。
相关权限不足,Caddy文件可以给予755权限
2.phpMyAdmin无法缓存模板文件:
因为phpMyAdmin安装完后缺少tmp文件夹作为缓存文件,于是只要增加一个tmp文件夹并且给予权限即可
解决命令如下:
mkdir /usr/local/phpMyAdmin/tmp/ && chmod 777 /usr/local/phpMyAdmin/tmp/
3.phpMyAdmin配置文件现在需要一个短语密码
解决所需命令如下:
cd /usr/local/phpMyAdmin && mv config.sample.inc.php config.inc.php &&
vi config.inc.php
进入编辑界面后,找到$cfg['blowfish_secret'] = ''; 直接在单引号里面自定义一串字符即可。
4.PHP无法解析文件
检查caddy.conf配置文件的fastcgi和www.conf文件的listen是否对应。检查是否权限不对应,检查用户和组是否都是root。
5.PHP-FPM服务无法启动
因为PHP-FPM默认无法使用Root用户运行,但是Caddy在配置的时候使用的是Root权限,所以只要PHP-FPM允许Root用户即可,详细方法如下:
先进入php-fpm的服务文件,
vi /usr/lib/systemd/system/php-fpm.service
找到ExecStart=/usr/sbin/php-fpm –nodaemonize,在末尾加上-R,即变成如下:
ExecStart=/usr/sbin/php-fpm --nodaemonize -R
保存退出,输入服务信息重载命令:systemctl daemon-reload即可。
总结
就用设计报告的总结吧。本文设计搭建LCMP环境,主要利用Caddy搭建比Nginx和Apache使用更简单的Web网站环境。Caddy是golang开发的一款Web Server,拥有golang语言的特性,在高并发上有很强的优势,同时它配置简单,易懂,对Mariadb和PHP的兼容性也良好。因为搭建的快速简单,在日常开发测试网站上节约了时间成本。Caddy的资源占用不高,不需要高配置的服务器也能运行起来,也节省了硬件的成本。Caddy拥有很多插件,支持CloudFlare等服务商的DNS服务接入,支持直接搭建简易的文件浏览器等等,对于用户来说,可用性很高。希望未来有更多人能够接触Caddy,接触LCMP的Web服务器环境,让更多用户能够了解到这款简单又强大的工具。




0 条评论