一个将市政政治带给市民的网站
项目描述
Meine Stadt Transparent
Meine Stadt Transparent是一个免费的议会信息系统。它目前的重点是展示来自官方德国议会信息系统的数据,所谓的“Ratsinformationssysteme”。这些数据是通过可轻松定制的OParl API导入的。您甚至可以为任意数据源编写自己的导入器。
我们使用Krefeld城市数据的示例实时系统可在以下网址找到: https://krefeld.meine-stadt-transparent.de/。我们在matrix上提供了一个公开的聊天室#meine-stadt-transparent:matrix.org
,您可以通过matrix加入。
此项目由原型基金赞助。
关于此项目
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作为反向代理,同时它还提供静态文件服务。
首先,安装docker和docker 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_URL
和MINIO_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.md和docs/Import.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
。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
meine-stadt-transparent-0.2.14.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b54685b6433f349530618eb3fc4e7cd5f4d937c10f971dabebf4263d19727864 |
|
MD5 | e16903bc89c24adc86242ed1b01e95ec |
|
BLAKE2b-256 | f329755036fc3d3c1295c204d578914bf330b8a5b1708e5e5002477b6fecb9e2 |
meine_stadt_transparent-0.2.14-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 40b1805da15a5b6fd62bc5f98c5a3f1e33384f6560901cc1e2dec0a07dc77fbf |
|
MD5 | e0871f37465698725a0cf881773d5042 |
|
BLAKE2b-256 | 189392530300cb0c0b8401489b0a5648b660a9983c404c9a8216049147c810da |