当一个人知道任何文件应发生破坏,甚至当人们看到一块废纸上躺着时,这是自动采取的动作,将其抬起最近的记忆孔的襟翼并将其放入,然后将其旋转在温暖的空气中,将其旋转到巨大的炉子上,这些炉子被隐藏在建筑物凹槽中的巨大炉子上
- 从1984年的乔治·奥威尔(George Orwell)
内存孔是一个支持问题组织者。它旨在提供一种组织和搜索常见支持问题及其解决方案的方法。
您将需要以下来编译并运行该应用程序:
mkdir memory-hole
cd memory-hole
curl -O https://raw.githubusercontent.com/yogthos/memory-hole/master/docker-compose.yml
docker-compose up
该应用将在http://localhost:8000启动后提供。
请按照以下步骤为应用程序配置数据库:
确保您在PostgreSQL上安装了Citext扩展名。
运行psql命令:
psql -U <superuser|postgres user> -d postgres -h localhost
创建访问数据库的角色:
CREATE ROLE memoryhole;
设置角色的密码:
password memoryhole;
可选,创建一个模式并授予memoryhole角色授权:
CREATE SCHEMA memoryhole AUTHORIZATION memoryhole;
GRANT ALL ON SCHEMA memoryhole TO memoryhole;
GRANT ALL ON ALL TABLES IN SCHEMA memoryhole TO memoryhole;
将CiteXT扩展添加到模式:
CREATE EXTENSION IF NOT EXISTS citext WITH SCHEMA memoryhole;
确保允许记忆孔登录:
ALTER ROLE "memoryhole" WITH LOGIN;
退出外壳
q
此设置应导致类似:database-url (例如,在本地计算机上)。
:database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "H2 DB可以使用各种托管方案,这些方案在其功能列表中可用。
此设置可以导致以下内容:database-url 。
:database-url " jdbc:h2:~/memory-hole-dev "当使用H2 DB进行开发或生产时,它需要正确设置Migratus :migration-dir指向H2特定迁移的居民模式。
:migration-dir " migrations/h2 " 在项目目录中使用数据库的配置设置创建一个profiles.clj文件。可选的迁移目录和LDAP可以配置,例如:
{ :profiles/dev
{ :env
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:migration-dir " migrations/postgresql "
; ;ldap is optional, will use internal table otherwise
; ;Admin users (able to manage groups) defined by their sAMAccountName
:ldap-admin-users [ " my-ldap-sAMAccountName " " another-ldap-sAMAccountName " ]
; ;Or Admin Groups defined by their distinguished names
:ldap-admin-groups [ " CN=some-ldap-group,OU=foo123,DC=domain,DC=ca " ]
:ldap
{ :host
{ :address " my-ldap-server.ca "
:domain " domain.ca "
:port 389
:connect-timeout ( * 1000 5 )
:timeout ( * 1000 30 )}}}}}运行迁移
lein run migrate
这将创建表并添加默认管理用户,默认登录为: admin/admin 。
要启动用于应用程序的Web服务器,请运行:
lein run
要编译Clojurescript前端,请运行:
lein figwheel
lein uberjar
这将产生target/uberjar/memory-hole.jar存档,可以按照以下方式运行:
java -Dconf=conf.edn -jar memory-hole.jar migrate
java -Dconf=conf.edn -jar memory-hole.jar
conf.edn文件应包含配置,例如将在生产中使用的数据库URL。可用以下选项。
:database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "根据选定的DB后端,需要设置迁移目录,例如。
:migration-dir " migrations/postgresql "HTTP端口默认为3000 ,以设置自定义端口,将以下键添加到配置:
:port 80该应用默认使用基于服务器端内存的会话存储。
可以使用以下几种:memory-session键设置内存会话时间之前的会话数量:
:memory-session
{ :max-age 3600 }如果您想使用基于cookie的内存商店,请在配置中添加一个:cookie-session键。 :cookie-session键应指向包含两个可选密钥的地图:
:key用于加密会话cookie的秘密键:cookie-attrs包含可选cookie属性的地图::http-only将cookie限制为http(如果为true)(默认):secure如果是真的,将cookie限制为HTTPS URL:max-age千分之一直到饼干到期示例配置可能如下:
:cookie-session
{ :key " a 16-byte secret "
:cookie-attrs
{ :secure true
:max-age 3600 }}LDAP连接配置应放在:ldap密钥下,如下:
:ldap
{ :host
{ :address " my-ldap-server.ca "
:domain " domain.ca "
:port 389
:connect-timeout ( * 1000 5 )
:timeout ( * 1000 30 )}}使用LDAP时管理用户组有两个选项,您可以使用sAMAccountName分配管理用户,也可以指定与密钥memberOf相对应的组。
:ldap-admin-users [ " my-ldap-sAMAccountName " " another-ldap-sAMAccountName " ]:ldap-admin-groups [ " CN=some-ldap-group,OU=foo123,DC=domain,DC=ca " ]为了使HTTPS支持在生产中添加以下配置:ssl密钥:
:ssl
{ :port 3001
:keystore " keystore.jks "
:keystore-pass " changeit " }要禁用HTTP访问,请将:port设置为nil :
:port nil另外,您可以在生产中使用NGINX领先该应用程序。有关配置NGINX的详细信息,请参见此处。
一个完整的conf.edn示例:
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:cookie-session
{ :key " a 16-byte secret "
:cookie-attrs
{ :max-age 60 }}
:port nil
:ssl
{ :port 3001
:keystore " keystore.jks "
:keystore-pass " changeit " }}该应用程序可以用Nginx代理到自定义路径,如下所示:
server {
listen ...;
...
location /memory-hole {
proxy_pass http://127.0.0.1:3000;
}
...
}
然后,您将需要在conf.edn文件中添加:app-context并具有上下文:
{ :database-url " jdbc:postgresql://localhost/postgres?user=memoryhole&password=memoryhole "
:port 3000
:app-context " /memory-hole " }该工具的最初实现是由Ryan Baldwin撰写的。该应用基于原始架构和SQL查询。
版权所有©2016 Dmitri Sotnikov