Ubuntu下Docker Compose部署Lizmap外部访问500错误及安全配置求助
问题解决:Lizmap Docker Compose外部访问异常及安全部署方案
问题描述
在Ubuntu机器上通过Docker Compose部署Lizmap后,本地通过localhost:8090可正常登录使用。将env.default中的LIZMAP_PORT从127.0.0.1:8090改为0.0.0.0:8090以支持外部访问后,出现以下问题:
- 外部访问时仅显示无样式的极简登录表单
- 登录后点击页面任意位置触发500内部服务器错误
当前env.default配置如下:
COPY_COMPOSE_FILE=0 LIZMAP_VERSION_TAG=${LIZMAP_VERSION_TAG:-"3.5"} QGIS_VERSION_TAG=${QGIS_VERSION_TAG:-"3.22"} POSTGIS_VERSION=${POSTGIS_VERSION:-"13-3"} POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-"postgres"} POSTGRES_LIZMAP_DB=${POSTGRES_LIZMAP_DB:-"lizmap"} POSTGRES_LIZMAP_USER=${POSTGRES_LIZMAP_USER:-"lizmap"} POSTGRES_LIZMAP_PASSWORD=${POSTGRES_LIZMAP_PASSWORD:-"lizmap1234!"} QGIS_MAP_WORKERS=${QGIS_MAP_WORKERS:-"1"} WPS_NUM_WORKERS=${WPS_NUM_WORKERS:-"1"} LIZMAP_PORT=${LIZMAP_PORT:-"0.0.0.0:8090"} OWS_PORT=${OWS_PORT:-"127.0.0.1:8091"} WPS_PORT=${WPS_PORT:-"127.0.0.1:8092"} POSTGIS_PORT=${POSTGIS_PORT:-"127.0.0.1:5432"} POSTGIS_ALIAS=${POSTGIS_ALIAS:-"db.lizmap"}
排查与解决步骤
1. 修复静态资源加载问题(无样式表单)
无样式问题通常是Lizmap生成的静态资源URL仍指向localhost,导致外部客户端无法加载CSS/JS文件。解决方法:
- 在
env.default中添加或修改LIZMAP_URL配置,设置为外部可访问的地址:LIZMAP_URL=http://你的服务器公网IP:8090 # 若已配置域名则使用:LIZMAP_URL=https://你的域名 - 重新部署容器:
docker-compose down docker-compose up -d
2. 定位并修复500错误
500错误需查看容器日志定位具体原因:
- 查看Lizmap web容器日志:
docker-compose logs lizmap-web - 常见错误及修复:
- 数据库连接问题:确认
POSTGIS_ALIAS配置正确,容器内部可通过db.lizmap访问PostGIS;若修改过数据库密码,需同步更新POSTGRES_LIZMAP_PASSWORD并重启所有容器。 - 文件权限问题:进入lizmap-web容器修复静态文件权限:
docker-compose exec lizmap-web chown -R www-data:www-data /var/www/html/lizmap - 路径配置错误:检查Lizmap后台的
服务配置,确保OWS/WPS服务地址与外部访问地址一致。
- 数据库连接问题:确认
3. 验证端口映射配置
确认docker-compose.yml中Lizmap服务的端口映射已正确应用LIZMAP_PORT变量,示例片段:
services: lizmap: ports: - "${LIZMAP_PORT}:80"
安全服务器环境搭建建议
1. 用Nginx反向代理替代直接暴露端口
- 安装Nginx并配置反向代理,将公网443端口(HTTPS)转发到Lizmap容器的80端口
- 申请Let's Encrypt SSL证书,强制HTTPS访问,禁止HTTP
- Nginx配置示例(简化版):
server { listen 443 ssl; server_name 你的域名; ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem; location / { proxy_pass http://localhost:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2. 强化认证与权限
- 立即修改所有默认密码:
POSTGRES_PASSWORD、POSTGRES_LIZMAP_PASSWORD,使用复杂随机密码 - 在Lizmap后台创建专属用户,禁用默认管理员账号或修改其密码
- 限制Lizmap后台访问IP,可通过Nginx配置允许特定IP段访问
/admin路径
3. 限制端口暴露
- 保持
OWS_PORT、WPS_PORT、POSTGIS_PORT为127.0.0.1:端口,仅允许本地容器/服务访问,禁止公网暴露 - 用Ubuntu防火墙
ufw仅开放必要端口:ufw allow 22/tcp # SSH ufw allow 443/tcp # HTTPS ufw enable
4. 定期维护
- 定期拉取最新镜像更新服务:
docker-compose pull docker-compose up -d - 备份Lizmap配置文件与PostGIS数据库,避免数据丢失
内容的提问来源于stack exchange,提问作者JAY EFFE
相关产品推荐
相关产品推荐

