Skip to content

Commit 558de96

Browse files
committed
search: install and configure typesense
1 parent 9543bfe commit 558de96

File tree

7 files changed

+117
-0
lines changed

7 files changed

+117
-0
lines changed

hieradata/roles/search.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
profile::certbot::certificates:
2+
search:
3+
domains:
4+
- "%{::facts.fqdn}"
5+
6+
profile::typesense::tls_key_name: search
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# @summary Install Typesense and exposes it via TLS
2+
class profile::typesense (
3+
String[1] $tls_key_name = lookup('profile::typesense::tls_key_name'),
4+
String[1] $api_key = lookup('profile::typesense::api_key'),
5+
) {
6+
class { 'typesense':
7+
api_key => $api_key,
8+
}
9+
10+
nftables::allow { 'typesense-https':
11+
proto => 'tcp',
12+
dport => 443,
13+
}
14+
15+
$backend_port = 8108
16+
$tls_config = nginx::tls_config()
17+
18+
nginx::site { 'typesense':
19+
content => template('profile/typesense/site.nginx.erb'),
20+
require => Letsencrypt::Certificate[$tls_key_name],
21+
}
22+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
server {
2+
listen 443 ssl;
3+
listen [::]:443 ssl;
4+
5+
ssl_certificate /etc/letsencrypt/live/<%= @tls_key_name %>/fullchain.pem;
6+
ssl_certificate_key /etc/letsencrypt/live/<%= @tls_key_name %>/privkey.pem;
7+
<%= @tls_config.join("\n ") %>
8+
9+
access_log off;
10+
error_log /var/log/nginx/error.log crit;
11+
server_tokens off;
12+
13+
location / {
14+
proxy_pass http://localhost:<%= @backend_port %>;
15+
proxy_redirect off;
16+
proxy_buffering off;
17+
}
18+
}

modules/role/manifests/search.pp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# @summary Search suggestion service for docs sites
22
class role::search {
33
include profile::base
4+
include profile::certbot
5+
include profile::typesense
46
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# @summary Install Typesense
2+
class typesense (
3+
String[1] $api_key,
4+
String[1] $version = '0.24.0',
5+
) {
6+
7+
file { '/usr/share/typesense-dl':
8+
ensure => directory,
9+
owner => 'root',
10+
group => 'root',
11+
recurse => true,
12+
purge => true,
13+
force => true,
14+
}
15+
16+
$deb = "/usr/share/typesense-dl/typesense-server-${version}-amd64.deb"
17+
18+
exec { 'typesense-download':
19+
command => "/usr/bin/curl -L -o ${deb} https://dl.typesense.org/releases/${version}/typesense-server-${version}-amd64.deb",
20+
creates => $deb,
21+
require => Package['curl'], # from the base profile
22+
}
23+
24+
# The package takes care of the following following:
25+
#
26+
# - create /etc/typesense/typesense-server.ini (with random $API_KEY)
27+
# - create /usr/bin/typesense-server
28+
# - create /var/lib/typesense (database)
29+
# - create /var/log/typesense
30+
# - create "typesense-server" service
31+
# - run `systemctl start typesense-server` (starts HTTP server on port 8108)
32+
#
33+
# Docs:
34+
# https://typesense.org/docs/guide/install-typesense.html
35+
# Source:
36+
# https://github.com/typesense/typesense/tree/0ac4feb68cf/debian-pkg/typesense-server
37+
#
38+
package { 'typesense-server':
39+
ensure => $version,
40+
source => $deb,
41+
}
42+
43+
# The service should be restarted after an upgrade.
44+
# TODO: Does this happen automatically?
45+
# https://typesense.org/docs/guide/updating-typesense.html#updating-deb-package
46+
47+
service { 'typesense-server':
48+
ensure => running,
49+
enable => true,
50+
}
51+
52+
file { '/etc/typesense/typesense-server.ini':
53+
ensure => file,
54+
content => template('typesense/server.ini.erb'),
55+
notify => Service['typesense-server'],
56+
}
57+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
; This file is managed by Puppet
2+
; Typesense Configuration
3+
; https://typesense.org/docs/0.24.0/api/server-configuration.html
4+
5+
[server]
6+
api-address = 0.0.0.0
7+
api-port = 8108
8+
data-dir = /var/lib/typesense
9+
api-key = <%= @api_key %>
10+
log-dir = /var/log/typesense

test_data/private/hieradata/common.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@ profile::wordpress::docs::db_password_seed: 'fakeseed'
1818
profile::wordpress::docs::admin_password: 'fakepass'
1919
docs_builder_password_seed: 'fakeseed'
2020

21+
profile::typesense::api_key: 'fakekey'
22+
2123
# hacks
2224
jqlib::secret::use_fake_private: true

0 commit comments

Comments
 (0)