手上有个闲置的服务器不知道拿来干啥,仔细思考一圈后,决定搭建一个影视网研究一下原理,顺便记录一下,防丢失。最后着重说明:本文仅作技术交流,解答我之前内心的疑惑,请不要私自建站放到公网,从而造成法律纠纷,针对看本文搭建成功而造成法律纠纷的与作者无关,请尊重版权观看正版。

先说说配置吧

Ubuntu:22.04

硬件:1核1G

带宽:1GBS

硬盘:64G 高速SSD

想必聪明的朋友已经看出来是哪家服务器了,我不多说,这方面的知识本文不会加以赘述

新机到手,先弄好搭建环境

因为maccms是采用PHP+MYSQL的,所以先要确定版本,测试下来踩了那么多坑,最终无坑完美解决的还是如下版本

mysql 5.7.41 + php 7.2-fpm

注意嗷注意,PHP版本真的是个大雷,博主是没有什么PHP开发经验的,如果你跟我一样是个小白的话,最好听劝,不要换版本,因为maccms基本上都是二开,能找到的免费模板源码,全是采用低版本的PHP做的。有两个分水岭,一个是7.2≤,这个版本没啥问题,而且支持的模板很多;另一个是8.0>7.x>7.2,7.2之后有很多参数和命令写法都不一样了,你可能需要改模板的源码改个爽,你愿意折腾也没事,可以用。8.0以上纯纯大雷了,版本太高,要改的地方太多了,所以最后试下来还是PHP7.2最顺手。

本文的搭建方式是基于docker部署的

相信我,配置低的机器,docker部署永远是最好的玩法,只有在部署的过程中吃CPU,后面运行起来基本只吃内存。另外利用docker搭建本文的写法不能说是最好的,但绝对能算得上是最实用,最简洁方便,也是最安全的。

好了,闲话不多说了,现在开始搭建

搭建基础环境

#安装iptables,下载软件包

apt-get install iptables-persistent

#查看iptables状态

systemctl status iptables

#关闭服务

systemctl stop iptables

#重启iptables

systemctl start iptables

#开启自启动iptables

systemctl enable iptables

#查看网卡信息,查看内网网段

ip addr

#启动 Docker 并设置开机自启(因为docker会影响防火墙,所以要先开防火墙)

systemctl start docker

systemctl enable docker

#设置docker只在本机内网上运行,此时网段需和前面ip addr查看到的做区分,例如查看到内网地址是172.17.0.0/24,那我们就用172.18.0.0/24

docker network create --driver bridge --subnet 172.18.0.0/24 --gateway 172.18.0.1 mynetwork

设置docker只在本机ip上运行(docker-ce下载请自行下载,本文不做教学)

docker network create --driver bridge --subnet 172.18.0.0/24 --gateway 172.18.0.1 mynetwork

安装MYSQL

#创建并进入即将要pull镜像的目录

mkdir -p /application/mysql && cd /application/mysql

# 运行空的MySQL容器

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.41

# 将容器内的文件拷贝出来,防止运行容器后文件被覆盖的问题,同时也更方便管理与备份

docker cp mysql:/etc/mysql /application/mysql

mv mysql conf

docker cp mysql:/var/lib/mysql /application/mysql

mv mysql data

# 删除后重新启动一个容器(重新启动时ROOT_PASSWORD请自行修改)

docker rm -f mysql

docker run --name mysql \

   -e TZ=Asia/Shanghai \

   --network=mynetwork \

   --ip 172.18.0.2\

   --restart always \

   -v /application/mysql/data:/var/lib/mysql \

   -v /application/mysql/logs:/var/log/mysql \

   -v /application/mysql/conf:/etc/mysql \

   -e MYSQL_ROOT_PASSWORD=123456 \

   -d mysql:5.7.41

MySQL这样就算完成了

开始nginx的配置

#返回到上级目录

cd ../

#创建nginx的目录并进入

mkdir -p /application/nginx && cd /application/nginx

#运行空的Nginx容器(这里用的是大佬的镜像,内置了certbot证书申请,不用自己费心费神的去做SSL)

docker run -d --name nginx anqiqii/nginx-certbot

# 将容器内的文件拷贝出来,防止运行容器后文件被覆盖的问题,同时也更方便管理与备份

docker cp nginx:/etc/nginx /application/nginx

mv nginx conf

docker cp nginx:/usr/share/nginx /application/nginx

mv nginx webs

# 删除后重新启动一个容器

docker rm -f nginx

docker run --name nginx \

   -e TZ=Asia/Shanghai \

   --network=mynetwork \

   --ip 172.18.0.15\

   -p 80:80 \

   -p 443:443 \

   --restart always \

   -v /application/nginx/conf/:/etc/nginx \

   -v /application/nginx/webs/:/usr/share/nginx \

   -v /application/nginx/logs/:/var/log/nginx \

   -d anqiqii/nginx-certbot

Nginx的也弄完了

处理最坑的PHP

#返回到上级目录

cd ../

#创建PHP的目录并进入nginx

mkdir -p /application/php && cd /application/php

#运行空的PHP容器

docker run -d --name php php:7.2-fpm

# 将容器内的文件拷贝出来,防止运行容器后文件被覆盖的问题,同时也更方便管理与备份

docker cp php:/usr/local/etc/php /application/php

mv /application/php/php/ /application/php/conf

# 删除后重新启动一个容器

docker rm -f php

docker run --name php \

   -e TZ=Asia/Shanghai \

   --network=mynetwork \

   --ip 172.18.0.3\

   --restart always \

   -v /application/nginx/webs:/var/www/html \

   -v /application/php/conf:/usr/local/etc/php \

   -d php:7.2-fpm

好,装是装完了,下面是麻烦点了

# 进入容器

docker exec -it php /bin/bash

# 首次进入容器,先更新一下源,防止接下来下载时找不到依赖

apt update

# 首先安装zip扩展,先将ZIP需要的依赖库安装一下

apt install -y --no-install-recommends zlib1g-dev && apt-get install -y --no-install-recommends libzip-dev

# 安装zip扩展,这个扩展不安装无法安装程序

docker-php-ext-install zip

# 接下来安装GD扩展,先将GD需要的依赖库安装一下

apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev

# PHP镜像的制作者已经将扩展都继承到镜像中了,这里执行命令解压扩展包

docker-php-source extract

# 移动到GD源码目录

cd /usr/src/php/ext/gd

# 编译GD源码

docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2

# 安装GD扩展,这个扩展不安装图形验证码无法加载

docker-php-ext-install gd

# 最后安装pdo_mysql扩展,这个扩展直接安装即可,不安装该扩展将无法访问数据库

docker-php-ext-install pdo_mysql

#如果出问题了,提示/usr/local/bin/docker-php-ext-enable: cannot create /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent

#我们直接在/usr/local/etc/php目录下面新建 conf.d(不要退出bash)然后从zip扩展重新开始安装

cd  /usr/local/etc/php

mkdir conf.d 

touch 'extension=pdo_mysql.so' > conf.d 

# 退出容器,并重启PHP容器

exit
docker restart php

docker ps查看运行状态,可以很精准的看到,我们只有Nginx的端口是映射到公网的,就只有80和443,其他的端口都只是在内网端口上运行,减少了被挂马的几率。

基础环境这样就算搭建完成了,接下来开始maccms的配置

开搞MACCMS

把Maccms程序文件上传到服务器的/application/nginx/webs目录

文件上传完成后解压文件,并做一些处理

# 作者提供的压缩文件为.zip格式,如果你的服务器没有安装对应的依赖需要安装一下

apt install -y unzip

#移动到目标目录(/application/nginx/webs),并解压文件到该目录

cd /application/nginx/webs

unzip maccms10.zip

# PHP需要放开文件权限,这里权限直接给到777

chmod -R 777 maccms

配置Nginx

# 移动到Nginx配置文件目录下

cd /application/nginx/conf/conf.d

#每个项目都单独写个配置文件,这里创建maccms.conf

vim maccms.conf

#把Nginx自带的配置文件先关闭

mv default.conf default.conf.bak

配置文件内容(这里先写个最简单的,能正常访问到就好)

server {

    listen 80;

    server_name IP or HOST;

    root   /usr/share/nginx/maccms;#网站根目录

    index  index.html index.htm index.php;

	location ~ .php$ {

        fastcgi_pass    172.18.0.3:9000;#PHP运行地址和端口

        fastcgi_index   index.php;

        fastcgi_split_path_info   ^(.+.php)(/.+)$;

        fastcgi_param   SCRIPT_FILENAME  /var/www/html/maccms/$fastcgi_script_name;

        include         fastcgi_params;

    }

    location / {

        if (!-e $request_filename) {

            rewrite ^/index.php(.*)$ /index.php?s=$1 last;

            rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;

            rewrite ^/api.php(.*)$ /api.php?s=$1 last;

            rewrite ^(.*)$ /index.php?s=$1 last;

            break;

        }

       

        

    }

}
#保存配置并退出

wq!

#查看此配置文件nginx是否能够正确运行

docker exec -it nginx nginx -t

#重新加载conf文件

docker exec -it nginx nginx -s reload

ok打开我们的IP地址或者HOST地址,就会自动跳转到安装界面了,跟着向导安装就行了,这里不再教学,都挺简单的

MACCMS安装完成后处理

安装好后会提示我们,由于安全原因管理页面会拒绝访问,要修改admin.php的名字,那我们改改就行

# 移动到Maccms程序目录

cd /application/nginx/webs/maccms

# 给admin.php重命名为xxx.php(xxx为任意,这里用test做演示)

mv admin.php test.php

# 编辑Nginx配置文件,将配置文件中的admin.php修改为刚刚设置的test.php

# 一共有两处需要修改,两处都在同一行

vim /opt/docker/nginx/conf/conf.d/maccms.conf

#修改admin --> test

#保存并退出

wq!

#重新加载conf文件

docker exec -it nginx nginx -s reload

再次打开IP或者HOST,后面加上/test.php

成功进入。

模板晚点再写