PassNAT LogoPassNAT

LimeSurvey 自建问卷系统:NAS Docker 部署 + 内网穿透,发链接收报名和反馈

作者

小编

发布时间

Curving abstract shapes with an orange and blue gradient

项目介绍

LimeSurvey 是一个老牌的开源问卷系统。想收报名、做调查、收集家人朋友的想法,不用把题目交给外面的问卷平台:问卷建在自己的 NAS 上,题目想加几道加几道,谁填了、每道题选了什么,数据都在自己手里。

它支持单选、多选、打分、排序、短文本、长文本这些常见题型。问卷建好后是一条公开链接,填的人不用注册、不用装 App,手机上点开就能填。每交一份,后台的统计页就自动多一段图表,哪个选项最多一眼就能看出来。

项目地址:点我跳转

部署安装

只要能跑 Docker 的 NAS 都能装,下面用飞牛 NAS 演示:先用 帕斯内网穿透 拿到一个公网地址,再用 Docker Compose 把 LimeSurvey 装上。

为什么穿透要放在部署前面?LimeSurvey 有个安全机制:管理后台第一次从哪个地址打开,它就把哪个地址记成「信任域名」,之后从别的域名访问会被它拒掉。所以先把公网地址拿到手,装完第一次就从这个地址进去,后面发给朋友填的链接才顺。

一、先用帕斯内网穿透拿到公网地址

飞牛的「应用中心」里搜 PassNAT,装上这个穿透插件,打开它,点「创建隧道」。隧道名字随便起(不超过 12 个字符),接入节点和传输协议留默认,本地 IP 留它默认的 127.0.0.1,本地端口填 8080(就是下面编排里冒号左边那个端口)。

建好之后点开这条隧道,按一下电源,状态变成运行中,详情里就能看到分配好的公网地址(形如 IP:端口),先记下来。

不是飞牛的系统,PassNAT 文档的「连接使用」里有其他系统的连接教程:点我跳转。

二、新建 Compose 项目

打开飞牛的「Docker」应用,切到「Compose」标签,点右上角的新增项目。项目名称填 limesurvey,路径在「我的文件」下面挑一个空文件夹,没有就当场新建一个。来源选「创建 docker-compose.yml」,把下面这段整个贴进去:

1services:
2 limesurvey:
3 image: martialblog/limesurvey:latest
4 ports:
5 - "8080:8080"
6 environment:
7 DB_TYPE: mysql
8 DB_HOST: db
9 DB_PORT: "3306"
10 DB_NAME: limesurvey
11 DB_USERNAME: limesurvey
12 DB_PASSWORD: 换成你自己的数据库口令
13 ADMIN_USER: admin
14 ADMIN_NAME: Administrator
15 ADMIN_EMAIL: admin@example.com
16 ADMIN_PASSWORD: 换成你自己的管理员口令
17 volumes:
18 - limesurvey_upload:/var/www/html/upload
19 depends_on:
20 db:
21 condition: service_healthy
22 restart: unless-stopped
23
24 db:
25 image: mariadb:11
26 environment:
27 MYSQL_DATABASE: limesurvey
28 MYSQL_USER: limesurvey
29 MYSQL_PASSWORD: 换成你自己的数据库口令
30 MYSQL_ROOT_PASSWORD: 换成你自己的root口令
31 volumes:
32 - limesurvey_db:/var/lib/mysql
33 healthcheck:
34 test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
35 interval: 5s
36 timeout: 5s
37 retries: 12
38 restart: unless-stopped
39
40volumes:
41 limesurvey_upload:
42 limesurvey_db:

三个口令:数据库口令两处(limesurvey 的 DB_PASSWORD 和 db 的 MYSQL_PASSWORD)填同一个,只用字母和数字;MYSQL_ROOT_PASSWORD 随便换一串;ADMIN_PASSWORD 是管理员的登录口令,这三个都换成你自己的。管理员用户名默认 admin,也可以改 ADMIN_USER。

镜像用的是社区维护的打包版(martialblog/docker-limesurvey),里面已经把 PHP、Apache 和 LimeSurvey 本体装好,管理员账号在第一次启动时按编排里的环境变量自动创建,不用走安装向导。勾上「创建项目后立即启动」,点确认,两个镜像下完就起来了。

三、用公网地址打开后台、切成中文

浏览器打开第一步的公网地址,后面加上 /admin,用户名 admin、密码就是编排里的 ADMIN_PASSWORD。

进去先切中文:右上角头像旁边的「配置」进「全局设置」,在「语言」标签里把默认语言和管理员语言都选成「简体中文」,保存。

如果你是从局域网地址先进的后台,公网域名打开会提示不能访问——这就是开头说的信任域名机制,进容器把 application/config/allowed_hosts.php 里加上你的公网域名(或者删掉这个文件重启)就好。第一次就用公网地址进,就不会遇到。

四、建第一份问卷

点左上角的加号新建问卷。问卷标题和欢迎语在「欢迎页面」那一块直接点一下就能改,改完会自动保存。

在题组的横线上点加号加题:题型面板里「单项选择」下的「列表(单选)」是单选题,「多选题」是可多选,「文本」下的「简短文本」用来填名字。每道题的题干和选项都是点上去直接改,右侧的问题设置里还能切换题型、设必答。

题目加完点右上角的「激活」,问卷就上线了。切到「分享」标签能看到问卷链接,它就是用你的公网地址拼出来的,发到群里就行。

五、朋友填、你看统计

朋友在手机上点开链接,看到的是欢迎页,点「下一页」开始,勾选项、填名字、点「提交」,完事。全程不用注册。

你这边打开问卷的「结果 → 统计」,每道题自动一张图:单选是各选项的占比条形图,右上角能切成饼图,还能导出。「Responses list」里是每一份原始回答,一条条看得见。

几点说明

数据在哪。 问卷、题目、回答都在 limesurvey_db 这个卷里,上传的图片附件在 limesurvey_upload,备份就把这两个卷拷走。

换域名要改信任列表。 隧道删了重建、公网地址变了,新域名打开会被拒,按第三节的办法把 allowed_hosts.php 改一下。

更新。 镜像标签用的是 latest,升级之前先备份数据卷,再到 Docker 里拉取新镜像、重新启动项目。