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