当前位置: 首页 > 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.lryc.cn/news/615395.html

相关文章:

  • 配送算法10 Batching and Matching for Food Delivery in Dynamic Road Networks
  • 算法篇----分治(快排)
  • Java 大视界 -- Java 大数据在智能医疗手术机器人操作数据记录与性能评估中的应用(390)
  • 【能碳建设1】用AI+开源打造物联网+能碳管理+交易SaaS系统的最短路径实施指南
  • Mac屏幕取色不准?探究原理和换算规则
  • C++四种类型转换
  • 97-基于Python的大众点评数据分析预测系统
  • react之React.cloneElement()
  • flex布局初体验
  • 低速CAN 高速CAN是否兼容?
  • react 常用组件库
  • 基于遗传优化的稀疏线阵最优排布算法matlab仿真
  • EPI2ME分析软件测试
  • day16 - CSS3新增属性
  • 一周学会Matplotlib3 Python 数据可视化-标注 (Annotations)
  • [IOMMU]基于 AMD IOMMU(AMD‑Vi/IOMMUv2)的系统化总结与落地方案
  • 【33】C#实战篇——点击按钮弹出指定路径对话框,选择指定类型文件;;;文件过滤器显示指定的一种文件,几种类型文件 同时显示
  • 云渲染的未来已来:渲酷云如何重新定义数字内容生产效率
  • 卫星遥感与AI大模型
  • 疏老师-python训练营-Day40训练和测试的规范写法
  • ADB(Android Debug Bridge)—— Android调试桥
  • PAT 1052 Linked List Sorting
  • java之父-新特性
  • React中实现完整的登录鉴权与权限控制系统
  • 算法题(183):质量检测
  • 【递归、搜索和回溯】FloodFill 算法介绍及相关例题
  • 比亚迪第五代DM技术:AI能耗管理的深度解析与实测验证
  • ToB大型软件可靠性测试方案
  • Dell PowerEdge: Servers by generation (按代系划分的服务器)
  • imx6ull-驱动开发篇15——linux自旋锁