跳转到主要内容

一个将市政政治带给市民的网站

项目描述

Meine Stadt Transparent

Tests FOSSA Status Docker build Code style: black

Meine Stadt Transparent是一个免费的议会信息系统。它目前的重点是展示来自官方德国议会信息系统的数据,所谓的“Ratsinformationssysteme”。这些数据是通过可轻松定制的OParl API导入的。您甚至可以为任意数据源编写自己的导入器。

我们使用Krefeld城市数据的示例实时系统可在以下网址找到: https://krefeld.meine-stadt-transparent.de/。我们在matrix上提供了一个公开的聊天室#meine-stadt-transparent:matrix.org,您可以通过matrix加入。

此项目由原型基金赞助。

Logo of the Prototype Fund Gefördert von Bundesministetrium für Bilduung und Forschung Logo of the Open Knowledge Foundation Germany

关于此项目

Meine Stadt Transparent通过提供对议会信息的便捷访问,包括发布的文件、动议和会议议程,使市政议会和行政机构的决策更加透明。作为慕尼黑的München Transparent的继任者,其目标是尽可能方便地部署给尽可能多的城市。

它包含许多与数据研究和保持更新相关的功能,旨在针对市民和记者。

  • 提供有关议员、行政机构和市政会议的信息。
  • 所有发布的文件都可以灵活搜索,无论是动议、决议、会议议程还是纪要。搜索支持简单的全文搜索和灵活的基于标准的过滤器。
  • 自动搜索文档中提到的地点。提供一张地图,标示提到的地点。因此,可以轻松识别影响您居住区地点的文件。
  • 您可以通过订阅主题/搜索表达式,一旦有与您的查询匹配的新文档发布,就会通过电子邮件通知您。
  • 它支持多种订阅新内容的方式:不同的RSS源和用iCal格式订阅会议日历。
  • 我们努力使“我的城市透明”对每个人都是可访问的:布局响应式,在移动设备上提供良好的体验,并且我们尽可能遵循可访问性标准(WCAG 2.0 AA,ARIA)。

然而,“我的城市透明”并不是传统议会信息系统的完全替代品:它专注于向公众展示已发布的信息。它不提供用户可访问的后端内容创作界面。它依赖于议会信息系统后端提供的API。目前,支持开放的Oparl标准

使用docker compose的生产设置

先决条件:具有root权限的主机和足够的ram来运行elasticsearch和mariadb。如果您没有太多的ram,在导入过程中创建一个大的交换文件以应对内存峰值。

所有服务都将由docker compose编排运行,在它们前面使用nginx作为反向代理,同时它还提供静态文件服务。

首先,安装dockerdocker compose。然后,根据调整主机系统上的max_map_count以适应elasticsearch。

从本存储库的根目录下载etc/docker-compose.yml。将所有的changeme替换为真正的随机密码(提示:openssl rand -hex 32)。

下载etc/template.env.env。将REAL_HOST改为您的域名,将SECRET_KEY改为随机生成的密钥,并使用与docker-compose.yml中相同的密码为DATABASE_URLMINIO_SECRET_KEY。您很可能想按后面的描述配置第三方服务,但您可以在基础站点工作之后再推迟。

为了通过nginx传输资产,我们需要将它们挂载到本地容器中

mkdir log
chown 33:33 log
rm -rf /var/www/meine-stadt-transparent-static # Delete existing or it will land in a subdirectory 
docker cp django:/static /var/www/meine-stadt-transparent-static

只要您稍后在nginx conf中匹配它,您可以将目录更改为任何其他目录。

启动一切

docker-compose up

等待elasticsearch日志显示“集群健康状态从[RED]变为[YELLOW]”,然后打开另一个终端。您可以在稍后使用-d以守护进程模式启动服务,或使用docker-compose down停止它们。

然后我们可以运行迁移,为minio(我们的文件存储)创建存储桶,并创建elasticsearch索引。如果出现错误,您可以重新运行设置命令,它将只创建缺失的索引。

docker-compose run --rm django ./manage.py setup

让我们加载一些示例数据来检查一切是否正常工作

docker-compose run --rm django ./manage.py loaddata mainapp/fixtures/initdata.json

您现在应该从localhost:8000获得200响应。

如果您不熟悉nginx,应该从这个教程开始。安装nginx、certbot和certbot nginx集成。对于ubuntu,例如。

sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx

下载etc/nginx-http.conf,将其添加到您的nginx站点中,并将changeme.tld替换为您的域名。然后运行certbot并按照说明进行。

certbot --nginx

certbot会将nginx配置重写为具有强加密的版本。您可能还想通过在443 ssl后添加http2来激活http/2。

现在您在域名下有一个合适的网站了!

现在一切就绪,删除示例数据

docker-compose run --rm django ./manage.py flush

相反,通过将Springfield替换为您的城市名称来导入真实数据。有关详细信息,请参阅docs/Import.md

docker-compose run --rm django ./manage.py import Springfield

现在您应该有一个可用的实例了!

最后,创建一个如下所示的每日cronjob。这将从oparl API导入已更改的对象,然后通知用户。同时确保为certbot设置cronjob。

docker-compose run --rm django ./manage.py cron

您可以通过在命令前添加docker-compose run --rm django来执行本readme中的所有其他命令(或在一个容器中启动一个shell)。注意,对于高级用户:.venv/bin/python被配置为入口点。

接下来,查看docs/Customization.md

更新

拉取新的Docker容器版本后,您需要运行以下命令来更新资产

docker-compose down
rm -r /var/www/meine-stadt-transparent-static
mkdir /var/www/meine-stadt-transparent-static
docker-compose run --rm django ./manage.py setup
docker-compose up -d

Kubernetes

如果您有一个Kubernetes集群,您可以查看Münster使用的以下实验性设置this experimental setup

手动设置

需求

  • Python 3.8、3.9或3.10,以及pip和poetry 1.1
  • 最新的node版本(v16)和npm(v8)
  • 一个Web服务器(推荐使用nginx或apache)
  • 一个数据库(推荐使用MariaDB,尽管任何django支持的数据库都应该工作)
  • minio
  • 如果您想使用elasticsearch,您需要docker和docker compose,或者您需要自己安装elasticsearch 7.9

在Debian/Ubuntu上

sudo apt install python3-pip python3-venv python3-dev nodejs \
    git libmysqlclient-dev libmagickwand-dev poppler-utils libssl-dev gettext

安装依赖项。

poetry config virtualenvs.in-project true # This is not mandatory, yet quite useful
poetry install
npm install

激活由poetry创建的虚拟env。您需要在运行任何其他python命令之前在shell中运行此命令,或者在任何python命令前使用poetry run

poetry shell

etc/template.env复制到.env并调整值。您可以使用ENV_PATH环境变量指定不同的dotenv文件。

配置您的Web服务器,例如查看etc/nginx.conf

生产

以下步骤仅在你想要将站点部署到生产环境时需要。对于开发,请参阅下面的相应部分

npm run build:prod
npm run build:email
./manage.py collectstatic

遵循官方指南。与指南不同,我们推荐使用gunicorn而不是wsgi,因为gunicorn配置起来更简单。

现在站点已准备就绪 :tada:. 接下来,查看docs/Customization.mddocs/Import.md

开发

请参阅docs/Development.md

已知问题

如果您在启动elasticsearch时遇到内存问题,请查看此文档

如果MySQL/MariaDB作为数据库后端使用,则需要至少5.7版本的MySQL或10.2版本的MariaDB,并且将Barracuda设置为新的InnoDB表的默认格式(默认),否则您将遇到索引太长的错误。

许可证

本软件根据MIT许可协议发布。位于testdata/oparl下的json文件是根据oparl项目改编的,并按CC-BY-SA-4.0许可。包含的动物图片mainapp/assets/images的许可为CC0和CC-BY-SA Luigi Rosa。允许在最后一段中重新分发etc/Donald Knuth - The Complexity of Songs.pdf

FOSSA Status

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息

源代码发行版

meine-stadt-transparent-0.2.14.tar.gz (201.7 kB 查看哈希值)

上传时间 源代码

构建发行版

meine_stadt_transparent-0.2.14-py3-none-any.whl (310.0 kB 查看哈希值)

上传时间 Python 3

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面