Docker搭建LNMP环境及苹果cms部署实践

Docker搭建一个苹果CMS内容管理系统

项目简介

苹果CMS,全名Apple Content Management System,是一款以PHP + MySQL架构为基础的内容管理系统(CMS),适用于视频类、文章类、图片类等多种类型的网站建设。它拥有强大的数据采集、会员管理、自定义模型、模板标签等功能,让网站管理变得更加简单、高效。

数据采集:

苹果CMS拥有强大的数据采集功能,可以快速地从各种资源站采集内容,白名单和黑名单功能可以有效地防止恶意内容的采集。

会员管理:

完全的前后台会员管理系统,包括会员注册、登录、修改资料、消费记录、积分充值、积分等级等功能都一应俱全。

自定义模型:

苹果CMS可以自定义字段和分类,模板方式发布,可以构建无数个独立的内容模型,极大地丰富了网站的内容。

模板标签:

拥有丰富的模板标签库,任意组合,即使是零基础的用户也可以快速上手,轻松制作出自己满意的网站。苹果CMS近年来凭借其稳定的性能、便捷的管理和强大的扩展能力,赢得了用户的广泛好评。不论是个人站长,还是企业用户,都可以通过苹果CMS快速构建出功能强大、易于管理的网站。

准备条件

  1. 一台服务器

    阿里云,腾讯云,华为云都可以,注意如果是不好的影视最好不要弄,要弄请去外网 ,请相信中国警察是能找到你的,切记不要做违法的事

  2. 本项目的github

    https://github.com/magicblack/maccms10

  3. 官网

    https://www.maccms.la/

1、Docker环境部署

Centos安装Docker和Docker-compose:https://docs.docker.com/engine/install/centos/

Ubuntu安装Docker和Docker-compose:https://docs.docker.com/engine/install/ubuntu/

# 以下使用Ubuntu安装Docker和Docker-compose(其实就是从官网复制的)
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# 安装docker(默认最新)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


# 下载docker-compose 这个是镜像下载的,官网实在是太慢了
curl -SL https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/v2.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 注意:
# 如果执行docker-compose --version出现-bash: /usr/local/bin/docker-compose: Permission denied
# 则执行
sudo chmod +x /usr/local/bin/docker-compose

# 查询环境是否部署成功
docker -v 
docker-compose -v

image-20240330123301523

2、部署MySQL镜像

# 下载MySQL镜像
 docker pull mysql:5.7

# 初始化目录,后续MySQL的文件都会放在这里
 mkdir -p /opt/pgcms/mysql
 
 # 进入/opt/pgcms/mysql
 cd /opt/pgcms/mysql

# 运行空的MySQL容器,注意MySQL密码需要自己设置一下MYSQL_ROOT_PASSWORD
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

# 将容器内的文件拷贝出来,防止运行容器后文件被覆盖的问题
 docker cp mysql:/etc/mysql /opt/pgcms/mysql/
 # 移动文件并改名
 mv mysql conf
 
 docker cp mysql:/var/lib/mysql /opt/pgcms/mysql/
 
 mv mysql data

image-20240330143407606

# 删除MySQL容器
docker rm -f mysql

# 重新启动MySQL容器
docker run --name mysql \
   -e TZ=Asia/Shanghai \
   -p 3306:3306 \
   --restart always \
   -v /opt/pgcms/mysql/data:/var/lib/mysql \
   -v /opt/pgcms/mysql/logs:/var/log/mysql \
   -v /opt/pgcms/mysql/conf:/etc/mysql \
   -e MYSQL_ROOT_PASSWORD=123456 \
   -d mysql:5.7
# 查询MySQL容器运行情况
docker ps

image-20240330143504022

3、部署Nginx镜像

# 下载Nginx镜像
docker pull nginx:1.22.0

# 初始化目录
mkdir -p /opt/pgcms/nginx/ssl

# 进入/opt/pgcms/nginx
cd /opt/pgcms/nginx

# 裸启动
 docker run -d --name nginx nginx:1.22.0

# 拷贝文件
 docker cp nginx:/etc/nginx /opt/pgcms/nginx
 mv nginx conf
 docker cp nginx:/usr/share/nginx /opt/pgcms/nginx
 mv nginx webs

image-20240330143825156

# 删除裸启的容器
 docker rm -f nginx
 
# 正式启动容器
 docker run --name nginx \
   -e TZ=Asia/Shanghai \
   -p 80:80 \
   -p 443:443 \
   --restart always \
   -v /opt/pgcms/nginx/conf/:/etc/nginx \
   -v /opt/pgcms/nginx/webs/:/usr/share/nginx \
   -v /opt/pgcms/nginx/logs/:/var/log/nginx \
   -v /opt/pgcms/nginx/ssl/:/ssl \
   -d nginx:1.22.0
   
# 查询MySQL容器运行情况
docker ps

image-20240330143913078

4、部署PHP镜像

   # 下载镜像
 docker pull php:7.2-fpm

# 初始化目录
 mkdir -p /opt/pgcms/php

# 进入/opt/pgcms/php
cd /opt/pgcms/php

# 裸启容器
 docker run -d --name php php:7.2-fpm

# 拷贝配置文件
 docker cp php:/usr/local/etc/php /opt/pgcms/php/
 mv php conf

# 删除裸启的容器
 docker rm -f php

# 正式启动容器
 docker run -d --name php \
   -e TZ=Asia/Shanghai \
   --restart always \
   -p 9000:9000 \
   -v /opt/pgcms/nginx/webs:/var/www/html \
   -v /opt/pgcms/php/conf:/usr/local/etc/php \
   php:7.2-fpm

image-20240330200009250

现在Docker已经把LNMP环境部署完成了

4、maccms页面显示

可以在线下载cms源码,同时也可以上传cms源码,这个看自己

# 下载或者上传的是压缩压缩文件并且是.zip格式,同时服务器没有安装对应的依赖就需要安装一下
apt install  unzip

# 移动到目标目录(/opt/pgcms/nginx/webs),并解压文件到该目录
 cd /opt/pgcms/nginx/webs
 # 下载cms源码
 wget https://www.maccms.la/down/maccms10.zip  
 
 # 解压到maccms文件下
 unzip maccms10.zip -d maccms

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

image-20240330145027804

5、配置Nginx

# 移动到Nginx配置文件目录下
 cd /opt/pgcms/nginx/conf/conf.d

# 我个人习惯每个项目都单独写个配置文件,这里创建maccms.conf,将配置写道该文件中,如下图所示
 vim maccms.conf

# 为了不影响我们效果把Nginx自带的配置文件先关闭
 mv default.conf default.conf.bak
 
 # 再次重新运行Ngixn容器
 docker restart nginx

image-20240330150525650

5.1、maccms.conf配置文件内容
server {
    listen       80;
    listen  [::]:80;
    server_name  47.117.160.102;

    location / {
    		# w伪静态
            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;
            }
	root   /usr/share/nginx/maccms;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
            fastcgi_pass   47.117.160.102:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info		^(.+.php)(/.+)$;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/maccms/$fastcgi_script_name;
            include        fastcgi_params;
        }
}

6、补齐以上缺漏

6.1、PHP扩展

上述步骤执行成功后,浏览器访问服务器IP就可以直接看到Maccms页面了,如果访问后仍然是nginx欢迎页可能是浏览器缓存的问题,Ctrl+F5深度刷新一下就好了,打开后的页面如图所示
image-200

报错,php环境还缺少了两个
image-201

上面已经把最基本的PHP容器运行起来了,接下来就进入容器启动扩展

# 进入容器
 docker exec -it php /bin/bash

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

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

# 首先安装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

# 移动到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

# 到此为止需要的扩展都已经安装完毕,进行一下善后工作
# 收起解压好的扩展文件
 docker-php-source delete

# 退出容器,并重启PHP容器
 exit
 docker restart php

这个时候在刷新浏览器页面就可以了

image-20240330151602124

6.2、MySQL新建数据库
# 进入MySQL容器
docker exec -it mysql bash

# 连接到MySQL服务器
# 注意这将提示您输入MySQL的root用户密码。输入密码后,您将进入MySQL的命令行界面。
mysql -uroot -p

# 创建数据库
CREATE DATABASE maccms;

# 退出MySQL命令行界面
exit;

# 退出容器的Shell环境
exit


# 或者直接一行命令
docker exec -it mysql mysql -uroot -p123456 -e "CREATE DATABASE maccms;"

image-20240330153057611

同时我们可以使用Navicat查看我们刚才创建的数据库

image-20240330153220699

接下来配置数据库连接信息,可以使用绿色的按钮测试连接是否成功,配置完成后就点击安装

image-20240330154115777

不出意外的话这一步就直接安装成功了,显示了短暂几秒的安装成功提示后会跳转到管理页面,由于安全原因管理页面会拒绝访问,如下图所示

image-20240330154153715
image-20240330154226209

这个时候就可以先开心一下了,后面的操作已经很好弄了,基本和宝塔一样了

# 进入maccms程序目录
 cd /opt/pgcms/nginx/webs/maccms

# 给admin.php重命名为yanshi.php
 mv admin.php yanshi.php

# 编辑Nginx配置文件,将配置文件中的admin.php修改为刚刚设置的yanshi.php
# 一共有两处需要修改,两处都在同一行
 vim /opt/pgcms/nginx/conf/conf.d/maccms.conf

# 重启Nginx容器使配置生效
 docker restart nginx

image-20240330154755297

这里我将文件名修改为yanshi.php,然后修改URL路径成功访问到了管理地址

image-20240330154904767

6.3、Nginx配置域名访问

修改maccms.conf文件

server {
    listen       80;
    listen  [::]:80;
    server_name  47.117.160.102;

 	location / {
            if (!-e $request_filename) {
                rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                rewrite ^/yanshi.php(.*)$ /yanshi.php?s=$1 last;
                rewrite ^/api.php(.*)$ /api.php?s=$1 last;
                rewrite ^(.*)$ /index.php?s=$1 last;
                break;
            }
			root   /usr/share/nginx/maccms;
            index  index.php index.html index.htm;
        }

	location ~ \.php$ {
            fastcgi_pass   47.117.160.102:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info		^(.+.php)(/.+)$;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/maccms/$fastcgi_script_name;
            include        fastcgi_params;
        }
}


# 可以直接使用这段
server {
	# 监听 443端口
    listen       443 ssl;
    server_name  lzphy.top;
    # 证书存放目录
    ssl_certificate 		/ssl/www.lzphy.top.pem;
    ssl_certificate_key 	 /ssl/www.lzphy.top.key;
    
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
            if (!-e $request_filename) {
                rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                rewrite ^/yanshi.php(.*)$ /yanshi.php?s=$1 last;
                rewrite ^/api.php(.*)$ /api.php?s=$1 last;
                rewrite ^(.*)$ /index.php?s=$1 last;
                break;
            }
			root   /usr/share/nginx/maccms;
            index  index.php index.html index.htm;
        }

	location ~ \.php$ {
            fastcgi_pass   lzphy.top:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info		^(.+.php)(/.+)$;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/maccms/$fastcgi_script_name;
            include        fastcgi_params;
        }
}

这个时候可以通过IP访问,同时也可以通过域名访问

IP访问

image-20240330162008526

域名访问

image-20240330162118295

建议有域名的情况下,最好删除IP访问,毕竟要做到物尽其用嘛

# 可以直接使用这段
server {
	# 监听 443端口
    listen       443 ssl;
    server_name  lzphy.top;
    # 证书存放目录
    ssl_certificate 		/ssl/www.lzphy.top.pem;
    ssl_certificate_key 	 /ssl/www.lzphy.top.key;
    
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
            if (!-e $request_filename) {
                rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                rewrite ^/yanshi.php(.*)$ /yanshi.php?s=$1 last;
                rewrite ^/api.php(.*)$ /api.php?s=$1 last;
                rewrite ^(.*)$ /index.php?s=$1 last;
                break;
            }
			root   /usr/share/nginx/maccms;
            index  index.php index.html index.htm;
        }

	location ~ \.php$ {
            fastcgi_pass   lzphy.top:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info		^(.+.php)(/.+)$;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/maccms/$fastcgi_script_name;
            include        fastcgi_params;
        }
}

每次修改完配置后要重启Nginx容器

docker restart nginx

这个时候我们就只能通过域名访问,不能使用IP访问

image-20240330162804411

7、配置电影先生模板

现在的苹果cms已经不提供前端页面了,如下图所示,所以我们需要自己找模板文件上传到服务器上使用

image-20240330155214965

将准备好的电影先生模板上传到服务器的/opt/pgcms/nginx/webs/maccms/template目录中并进行解压

image-20240330155450336

模板准备完成后,打开后台管理页面,在【系统】【网站参数配置】中修改模板为DYXS2,如图所示

image-20240330155617076

然后在【首页】【自定义菜单配置】中添加电影先生模板的管理地址,然后下滑点击保存(不知道为什么我的保存按钮一直被藏在页面底部,需要下滑才能看见),刷新页面后就可以看到左侧多了个菜单,点进去后就可以管理模板了

电影先生2.0,/yanshi.php/admin/Dyxs2/dyxs2set

image-20240330160038227

上面是自定义菜单的内容,配置完成后效果应该如下图所示,如果点开说未找到自定义页面,不要慌,我这也报过错可能是因为缓存问题,刷新页面或者关浏览器重新打开就好了

image-20240330160316240

image-20240330155725945

视频教程

B站:https://www.bilibili.com/video/BV1QM4m197Ag

更多精彩内容,关注鹏摇星海公众号

这公众号浏览量,直接被干破防啊
在这里插入图片描述

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Docker部署LNMP架构(Linux+Nginx+MySQL+PHP),首先需要安装DockerDocker Compose。你可以按照以下步骤进行部署: 1. 安装DockerDocker Compose: 首先,按照引用中的指引,配置Docker的yum源,并安装DockerDocker Compose。安装完成后,启动Docker服务。 2. 准备部署文件: 下载引用中的docker-lnmp项目,将docker-compose-linux-x86_64-v2.5.0文件移动到/usr/local/bin目录下,并赋予执行权限。 3. 编辑docker-compose.yml文件: 进入docker-lnmp项目文件夹,在该目录下找到docker-compose.yml文件,并使用任意文本编辑器进行编辑。根据你的需求,可以对镜像版本、端口映射、环境变量等进行配置。 4. 运行Docker Compose: 在docker-lnmp项目文件夹中打开终端,并执行以下命令: ``` docker-compose up -d ``` 这将启动LNMP架构的Docker容器,并在后台运行。 5. 验证部署: 使用浏览器访问本地主机的Nginx服务,默认端口为80。如果一切正常,你应该能够看到Nginx的欢迎页面。 通过以上步骤,你可以使用Docker快速部署LNMP架构,并实现应用程序的隔离性和安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker部署LNMP完整教程](https://blog.csdn.net/ThesCript_j/article/details/107402923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker部署lnmp架构](https://blog.csdn.net/weixin_65643437/article/details/131124609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值