使用 Docker 快速搭建最新版 Flarum 论坛

本文涉及的产品
无影云电脑企业版,4核8GB 120小时 1个月
资源编排,不限时长
无影云电脑个人版,1个月黄金款+200核时
简介: 本文分享了使用Docker在4核4GB的Ubuntu 20.04云服务器上搭建Flarum轻论坛的经验。通过Nginx-Proxy和ACME伴侣自动配置SSL,并使用Docker Compose部署Flarum及MariaDB容器。关键步骤包括:创建Nginx-Proxy容器、配置Flarum容器及其环境变量、设置桥网络连接以及更新Flarum版本。文中提供了详细的Docker Compose配置示例和必要的环境变量设置,帮助读者顺利搭建并运行Flarum论坛。

前几天折腾了一下用 Docker 搭建 Flarum 这个轻论坛的程序,发现其中还是有些坑所以写下来分享一下。这次使用的是一台 4 核心 4 GB 的云服务器使用 Ubuntu 24.04 系统安装 Docker 和 Portainer 进行快速搭建。其中为了方便就略去安装 Docker 和 Portainer 的步骤直接开始配置 Flarum 了。

创建 Nginx-Proxy 容器

我们这里首先使用 Nginx-Proxy 对待会要进行搭建的 Flarum 论坛进行反代,Nginx-Proxy是专门用来自动设置反代 Docker 容器的一个程序。同时我们也是用他们官方提供的 ACME 伴侣来为我们的站点自动申请 SSL。

Nginx-Proxy Github 地址:https://github.com/nginx-proxy/nginx-proxy/
ACME 伴侣 GIthub 地址:https://github.com/nginx-proxy/acme-companion/

我们这里使用 Docker Compose 快速建立这两个容器:

services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy:1.6
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx-proxy-conf:/etc/nginx/conf.d
      - nginx-proxy-vhost:/etc/nginx/vhost.d
      - nginx-proxy-html:/usr/share/nginx/html
      - nginx-proxy-certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes_from:
      - nginx-proxy
    volumes:
      - nginx-proxy-certs:/etc/nginx/certs:rw
      - nginx-proxy-acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      DEFAULT_EMAIL: 你的邮箱
      ACME_CHALLENGE: DNS-01
      ACMESH_DNS_API_CONFIG: |-
        DNS_API: dns_cf
        CF_Token: 你的 Cloudflare Token
        CF_Zone_ID: 你的 Cloudflare Zone ID
        CF_Email: 你的 Cloudflare 注册邮箱

volumes:
  nginx-proxy-conf:
  nginx-proxy-vhost:
  nginx-proxy-html:
  nginx-proxy-certs:
  nginx-proxy-acme:

上面我们需要配置的只有我们的 ACME 伴侣,这里使用的是 acme.sh 的自动化 SSL 部署,详细配置可以参考《Linux 利用 Cloudflare API 配置 acme.sh 自动续签 SSL (Apache、Nginx适用)》中申请 CF_TokenCF_Zone_ID 的操作去填写上面的 docker compose 文件。

在填写好上面的文件之后我们可以直接粘贴到我们的 Portainer 当中,使用 Stack 功能点击 Add Stack 并且直接粘贴到文本编辑框中,最后 stack 命名为 Nginx-Proxy 直接点击 Deploy 即可。

创建 Flarum 容器

对于 Flarum 容器我们这里使用的是 mondediefr 大佬的 flarum 镜像,Github 地址:https://github.com/mondediefr/docker-flarum。我们同样使用 Docker Compose 的方式进行建立,首先建立我们的 Docker Compose 文件。

services:
  flarum:
    image: mondedie/flarum:stable
    container_name: flarum
    env_file:
      - stack.env
    volumes:
      - /var/lib/docker/volumes/flarum/assets:/flarum/app/public/assets
      - /var/lib/docker/volumes/flarum/extensions:/flarum/app/extensions
      - /var/lib/docker/volumes/flarum/storage/logs:/flarum/app/storage/logs
      - /var/lib/docker/volumes/flarum/nginx:/etc/nginx/flarum
    ports:
      - 8080:8888
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:10.5
    container_name: mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=你的数据库密码
      - MYSQL_DATABASE=flarum
      - MYSQL_USER=flarum
      - MYSQL_PASSWORD=你的数据库密码
    volumes:
      - /var/lib/docker/mysql/db:/var/lib/mysql

其中我们注意到我们的环境文件是 stack.env,这个文件时 Portainer 在建立 stack 的时候自动建立的,我们接下来要编辑这个文件,我们在点击 Add Stack 之后命名为 Flarum 然后粘贴我们的 Docker Compose 文件,然后可以往下滑看到 stack.env file operation 的提示,我们点击 Advanced Mode 之后会跳出另一个文本编辑框,我们在编辑框中填入我们的环境文件:

DEBUG=false
FORUM_URL=http://你的域名

# Database configuration
DB_HOST=mariadb
DB_NAME=flarum
DB_USER=flarum
DB_PASS=你要的数据库密码
DB_PREF=flarum_
DB_PORT=3306

# User admin flarum (environment variable for first installation)
# /!\ admin password must contain at least 8 characters /!\
FLARUM_ADMIN_USER=管理员账户
FLARUM_ADMIN_PASS=管理员密码
FLARUM_ADMIN_MAIL=管理员邮箱
FLARUM_TITLE=站点标题

VIRTUAL_HOST=你的域名
LETSENCRYPT_HOST=你的域名

上面要配置的就是我们的数据库密码,后台管理员信息以及我们要搭建的论坛使用的域名,填写好之后点击 Deploy即可建立。Nginx-Proxy这个时候也会自动为我们的 Flarum 论坛建立反代以及分配 SSL,如果不成功的话可以检查日志文件重新调试。

配置桥网络

这个时候我们解析完域名之后会发现我们依然不能正常访问我们的论坛,这是因为 Nginx-Proxy 和我们的 Flarum 处于两个不同的 bridge 网络之中,我们这个时候到我们 Portainer 的 Containers 页面,点击 nginx-proxy 容器并且滑到最底下,会发现有一个 Connected Networks 区域,我们在里面加入到我们的 Flarum 容器的网络即可。

更新 Flarum

之后我们登录到我们的 Flarum 论坛会发现我们的版本还在 1.3.0,这是因为 mondadiefr 大佬的镜像默认只有 1.3.0,但是我们可以通过进入容器升级我们的 Flarum 版本,我们在 SSH 终端运行:

docker exec flarum composer update --prefer-dist --no-plugins --no-dev -a --with-all-dependencies -d /flarum/app/
docker exec flarum php /flarum/app/flarum migrate
docker exec flarum php /flarum/app/flarum cache:clear

即可成功升级,升级完成后可能会提示我们无法清理 storage/cache 中的缓存,这个时候我们进入 var/lib/docker/volumes/flarum 目录中删除我们的 storage 文件夹然后重启容器即可解决这个问题。

相关文章
|
Kubernetes 关系型数据库 MySQL
docker部署Discuz论坛
docker部署Discuz论坛
docker部署Discuz论坛
|
关系型数据库 MySQL 数据库
通过Docker部署WordPress 论坛
在前面的章节我们学习了docker的基本操作,本章节我们进行一次实际的部署实验,通过docker容器的方式部署wordpress论坛。
|
关系型数据库 MySQL Linux
centos7下用docker来搭建discuz论坛
centos7下用docker来搭建discuz论坛
1504 1
centos7下用docker来搭建discuz论坛
|
存储 监控 Docker
Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”
Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据” matlehmann我有一个含数据的容器,它有一个卷(比如在/var/data)中的持久性数据。
1412 0
|
19天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
167 93
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
275 77
|
22天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
106 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
123 35
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
20天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
44 17