当前位置: 首页 > news >正文

Docker容器lnmp平台部署discuz论坛

目录

基于 Linux Rocky9 使用 Docker 容器搭建 LNMP 平台并安装 Discuz! 论坛

关闭防火墙,上下文

一、准备工作

1. 创建项目目录结构

2. 安装 Docker 和 Docker Compose

二、配置 Docker Compose

1. 创建 docker-compose.yml 文件

三、配置 Nginx

1. 创建 Nginx Dockerfile

2. 创建 Discuz! Nginx 配置文件

四、配置 PHP

1. 创建 PHP Dockerfile

2. 创建 PHP 配置文件

五、下载并配置 Discuz!

1. 下载 Discuz! 最新版

2. 设置文件权限

解决方案

六、启动 LNMP 平台

1. 构建并启动容器

2. 检查服务状态

七、安装 Discuz!

1. 访问安装页面

2. 填写数据库信息

3. 设置管理员账号

4. 完成安装

八、Discuz! 目录结构说明

九、管理命令

1. 启动/停止服务

2. 查看日志

3. 进入容器

4. 备份数据库

5. 恢复数据库

十、常见问题解决

1. 安装时出现数据库连接错误

2. 文件权限问题

3. 验证码不显示


基于 Linux Rocky9 使用 Docker 容器搭建 LNMP 平台并安装 Discuz! 论坛

关闭防火墙,上下文

[root@docker ~]# systemctl disable --now firewalld[root@docker ~]# setenforce 0

一、准备工作

注意:需要提前下载 php:8.2-fpm-alpine 镜像

如下操作是在/opt/discuz目录下进行,不管在哪个目录操作,都必须在discuz目录进行操作

1. 创建项目目录结构

mkdir -p /opt/discuz/{nginx,php,mysql,www}
cd /opt/discuz

2. 安装 Docker 和 Docker Compose

#rocky9安装
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
​
# 安装 Docker Compose    (记住:在/opt/discuz目录下执行如下)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

二、配置 Docker Compose

1. 创建 docker-compose.yml 文件

[root@docker discuz]# vim docker-compose.yml
version: '3.8'
​
services:nginx:build: ./nginxcontainer_name: nginxports:- "80:80"- "443:443"volumes:- ./www:/var/www/html- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- phpnetworks:- discuz-network
​php:build: ./phpcontainer_name: phpvolumes:- ./www:/var/www/html- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ininetworks:- discuz-network
​mysql:image: mysql:8.0container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: root_passwordMYSQL_DATABASE: discuzMYSQL_USER: discuz_userMYSQL_PASSWORD: discuz_passvolumes:- ./mysql/data:/var/lib/mysqlnetworks:- discuz-network
​
networks:discuz-network:driver: bridge

三、配置 Nginx

1. 创建 Nginx Dockerfile

[root@docker discuz]# cat > nginx/Dockerfile <<EOF
FROM nginx:alpine
​
# 复制自定义配置
COPY conf.d /etc/nginx/conf.d
​
# 安装常用工具
RUN apk add --no-cache curl vim
EOF

2. 创建 Discuz! Nginx 配置文件

#mkdir nginx/conf.d
​
# cat > nginx/conf.d/discuz.conf <<EOF
server {listen 80;server_name localhost;root /var/www/html/discuz;index index.php index.html index.htm;
​access_log /var/log/nginx/discuz_access.log;error_log /var/log/nginx/discuz_error.log;
​location / {try_files \$uri \$uri/ /index.php?\$query_string;}
​location ~ \.php$ {fastcgi_pass php:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;include fastcgi_params;}
​location ~ /\.ht {deny all;}
}
EOF

四、配置 PHP

1. 创建 PHP Dockerfile

# cat > php/Dockerfile <<EOF
FROM php:8.2-fpm-alpine
​
# 安装系统依赖和构建工具
RUN apk add --no-cache \libzip-dev \libpng-dev \libjpeg-turbo-dev \freetype-dev \autoconf \make \g++ \# 安装 PHP 扩展&& docker-php-ext-configure gd --with-freetype --with-jpeg \&& docker-php-ext-install -j$(nproc) \gd \pdo_mysql \mysqli \opcache \zip \# 安装 Redis 扩展&& pecl install redis \&& docker-php-ext-enable redis \# 清理构建工具&& apk del autoconf make g++
​
# 设置工作目录
WORKDIR /var/www/html

2. 创建 PHP 配置文件

# cat > php/php.ini <<EOF
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
date.timezone = Asia/Shanghai
display_errors = Off
log_errors = On
error_log = /proc/self/fd/2
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=4000
EOF

五、下载并配置 Discuz!

1. 下载 Discuz! 最新版

# cd /opt/discuz/www
wget https://download.discuz.china/Discuz_X3.5_SC_UTF8_20230520.zip
unzip Discuz_X3.5_SC_UTF8_20230520.zip -d discuz

2. 设置文件权限

chmod -R 777 discuz/config discuz/data discuz/uc_client/data discuz/uc_server/data

这里物品们需要将upload里的所有文件移动到/opt/discuz/www/discuz目录下,然后再执行赋权

[root@docker www]# ls
discuz  Discuz_X3.5_SC_UTF8_20250205.zip
[root@docker www]# cd discuz/
[root@docker discuz]# ls
LICENSE  qqqun.png  readme  readme.html  upload  utility.html
[root@docker discuz]# ls -l
总用量 124
-rw-r--r--.  1 root root  8181  2月  5 20:41 LICENSE
-rw-r--r--.  1 root root 33294 12月 21  2022 qqqun.png
drwxr-xr-x.  2 root root   124  2月  5 20:44 readme
-rw-r--r--.  1 root root 70226  3月 16  2023 readme.html
drwxr-xr-x. 12 root root  4096  2月  5 20:44 upload
-rw-r--r--.  1 root root   140  2月 12  2023 utility.html
[root@docker discuz]# cd upload/
[root@docker upload]# ls
admin.php  archiver     crossdomain.xml  forum.php  index.php   misc.php    robots.txt  static     uc_server
api        config       data             group.php  install     plugin.php  search.php  template
api.php    connect.php  favicon.ico      home.php   member.php  portal.php  source      uc_client
[root@docker upload]# mv ./* ../
[root@docker upload]# ls
[root@docker upload]# cd ..
[root@docker discuz]# ls
admin.php  config           favicon.ico  index.php   misc.php    readme       source     uc_server
api        connect.php      forum.php    install     plugin.php  readme.html  static     upload
api.php    crossdomain.xml  group.php    LICENSE     portal.php  robots.txt   template   utility.html
archiver   data             home.php     member.php  qqqun.png   search.php   uc_client
[root@docker discuz]# cd ..
[root@docker www]# ls
discuz  Discuz_X3.5_SC_UTF8_20250205.zip
[root@docker www]# chmod -R 777 discuz/config discuz/data discuz/uc_client/data discuz/uc_server/data
​

然后在/opt/discuz目录下操作

[root@docker discuz]# sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 56.8M  100 56.8M    0     0   963k      0  0:01:00  0:01:00 --:--:-- 4192k
[root@docker discuz]# sudo chmod +x /usr/local/bin/docker-compose
[root@docker discuz]# docker-compose up -d --build

如果出现104,请在/root/目录下执行一遍在回到/opt/discuz目录下执行

如果出现443,测试是否能访问 GitHub 的 HTTPS(关键!)

#运行:
curl -v https://github.com
或者:
curl -I https://github.com
#重点总结
你遇到的错误:
curl: (7) Failed to connect to github.com port 443: 拒绝连接
•意思就是:你的服务器无法连接到 GitHub 的 HTTPS 服务(端口 443),连接被对方拒绝或网络不通。••
所以 •curl 根本没有开始下载文件,而是连接阶段就失败了。
#运行无法连接的话
##重新启动服务
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
然后再执行

案例:

报错

注意:这里报错原因,(没有下载php:8.2-fpm-alpine镜像的,需要下载这个镜像)

错误原因
•缺少构建工具•:
autoconf 工具缺失,导致无法执行 phpize 命令
phpize 是编译 PHP 扩展必需的工具
•依赖链问题•:
在安装 Redis 扩展时需要编译
编译过程需要 autoconf 和 make 等工具
这些工具在基础镜像中没有包含
解决方案

修改 PHP 的 Dockerfile,在安装依赖时包含必要的构建工具

添加构建工具
autoconf \
make \
g++ \
​
或直接修改
FROM php:8.2-fpm-alpine
​
# 安装系统依赖和构建工具
RUN apk add --no-cache \libzip-dev \libpng-dev \libjpeg-turbo-dev \freetype-dev \autoconf \make \g++ \# 安装 PHP 扩展&& docker-php-ext-configure gd --with-freetype --with-jpeg \&& docker-php-ext-install -j$(nproc) \gd \pdo_mysql \mysqli \opcache \zip \# 安装 Redis 扩展&& pecl install redis \&& docker-php-ext-enable redis \# 清理构建工具&& apk del autoconf make g++
​
# 设置工作目录
WORKDIR /var/www/html

然后重新构建并启动

docker-compose down
docker-compose up -d --build

报错:如下

原因:80号端口备占用

解决方案:直接删除占用80号端口的容器

然后重载启用

没有报错就OK了

六、启动 LNMP 平台

1. 构建并启动容器

docker-compose up -d --build

2. 检查服务状态

docker-compose ps

如有报错就

重新构建并启动

docker-compose down
docker-compose up -d --build

七、安装 Discuz!

1. 访问安装页面

打开浏览器访问:http://your-server-ip/discuz/install/

2. 填写数据库信息

数据库服务器: mysql
数据库名: discuz
数据库用户名: discuz_user
数据库密码: discuz_pass
表前缀: pre_ (默认)

3. 设置管理员账号

创建管理员账号并设置密码

4. 完成安装

安装完成后删除 install 目录:

rm -rf /opt/discuz/www/discuz/install

八、Discuz! 目录结构说明

/opt/discuz/
├── docker-compose.yml
├── mysql/
│   └── data/          # MySQL 数据存储
├── nginx/
│   ├── Dockerfile
│   └── conf.d/
│       └── discuz.conf # Nginx 配置文件
├── php/
│   ├── Dockerfile
│   └── php.ini        # PHP 配置文件
└── www/└── discuz/        # Discuz! 程序文件├── api/├── config/├── data/├── source/├── static/├── template/├── uc_client/├── uc_server/└── upload/

九、管理命令

1. 启动/停止服务

# 启动服务
docker-compose up -d
​
# 停止服务
docker-compose down

2. 查看日志

docker-compose logs -f

3. 进入容器

# 进入 PHP 容器
docker exec -it php sh
​
# 进入 MySQL 容器
docker exec -it mysql mysql -u discuz_user -p discuz

4. 备份数据库

docker exec mysql /usr/bin/mysqldump -u discuz_user --password=discuz_pass discuz > discuz_backup.sql

5. 恢复数据库

cat discuz_backup.sql | docker exec -i mysql /usr/bin/mysql -u discuz_user --password=discuz_pass discuz

十、常见问题解决

1. 安装时出现数据库连接错误

# 检查 MySQL 容器是否运行
docker-compose ps
​
# 检查数据库用户权限
docker exec -it mysql mysql -u root -p
GRANT ALL PRIVILEGES ON discuz.* TO 'discuz_user'@'%';
FLUSH PRIVILEGES;

2. 文件权限问题

chmod -R 777 /opt/discuz/www/discuz/config /opt/discuz/www/discuz/data

3. 验证码不显示

# 在 PHP 容器内安装 GD 依赖
docker exec php apk add --no-cache freetype-dev libjpeg-turbo-dev
docker exec php docker-php-ext-configure gd --with-freetype --with-jpeg
docker exec php docker-php-ext-install gd
docker-compose restart php

http://www.dtcms.com/a/323550.html

相关文章:

  • 工具类-高效集合差异计算工具DiffWrapper
  • visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE
  • C++入门自学Day7-- String类的自实现
  • Adapting Vision-Language Models Without Labels A Comprehensive Survey
  • RWKV与VRWKV
  • Filter,Interceptor拦截器-登录校验
  • visual studio 字体设置
  • 【小米比笔记本Pro15.6】>>Stasrt PXE over IPv6,Press [Esc] to EXIT...
  • 第二十天:余数相同问题
  • 信息安全简要
  • 分布式锁详解及 Spring Boot 实战示例
  • Redis 持久化策略深度剖析:从原理到实战,守护数据不丢失
  • 基于 InfluxDB 的服务器性能监控系统实战(二)
  • [论文阅读] 人工智能 + 软件工程 | Posterior-GRPO:优化代码生成推理过程的新框架
  • Solana上Launchpad混战:新颖性应被重视
  • 云服务器--阿里云OSS(1)【阿里云OSS简单介绍以及环境准备】
  • 论文学习21:Pyramid Scene Parsing Network
  • AG32cpld实现一个UartTx“外设”
  • 莫比乌斯反演学习笔记
  • Qt 元对象系统中的 QMetaObject 类和他的invokeMethod() 函数及其他常见函数应用详解​
  • MoVA:多模态视觉专家混合架构的创新设计与应用实践
  • 【能碳建设2】把“能碳计算”做成可配置、可演示的系统
  • codeforces 补题1
  • FAN5622SX 四通道六通道电流吸收线性LED驱动器,单线数字接口 数字式调光, 2.7 → 5.5 V 直流直流输入, 30mA输出FAN5622S
  • 现代数据加密技术:守护数字世界的无形之盾
  • 供应链需求预测项目如何设定合理的KPI、准确率指标(十四)
  • jxWebUI--输入框
  • M8-11读卡器如何通过RS485转Profinet网关在plc写入从站地址
  • 飞书多维表格搭建设备租赁系统-和保养提醒
  • C++ 虚函数、多重继承、虚基类与RTTI的实现成本剖析