blob: 47e71e79e860e008c8e4c7a9311ccf5a04f9b045 [file] [log] [blame]
Radek Pietruszewskie1dbc3c2023-10-29 22:21:35 +01001local kube = import "../../../kube/hscloud.libsonnet";
2
3{
4 local top = self,
5 local cfg = self.cfg,
6
7 cfg:: {
8 name: "wordpress",
9 namespace: "personal-radex",
10 domain: "wordpress.hs.radex.io",
11
12 storageClassName: "waw-hdd-redundant-3",
13 storageSize: "5Gi",
14 },
15
16 secrets:: {
17 mysql: { secretKeyRef: { name: cfg.name, key: 'mysql_password' } },
18 wordpress: { secretKeyRef: { name: cfg.name, key: 'wordpress_password' } },
19 },
20
21 ns: kube.Namespace(cfg.namespace),
22
23 deployment: top.ns.Contain(kube.Deployment(cfg.name)) {
24 spec+: {
25 replicas: 1,
26 template+: {
27 spec+: {
28 containers_: {
29 default: kube.Container("default") {
30 image: 'bitnami/wordpress',
31 resources: {
32 requests: { cpu: "50m", memory: "128M" },
33 limits: { cpu: "750m", memory: "256M" },
34 },
35 ports_: {
36 http: { containerPort: 8080 },
37 },
38 env_: {
39 WORDPRESS_DATABASE_HOST: 'wordpress-mysql',
40 WORDPRESS_DATABASE_NAME: 'wordpress',
41 WORDPRESS_DATABASE_USER: 'wordpress',
42 WORDPRESS_DATABASE_PASSWORD: top.secrets.mysql,
43 WORDPRESS_USERNAME: 'admin',
44 WORDPRESS_PASSWORD: top.secrets.wordpress,
45 },
46 },
47 },
48 },
49 },
50 },
51 },
52
53 service: top.ns.Contain(kube.Service(cfg.name)) {
radex8b8f3872023-11-24 11:09:46 +010054 target:: top.deployment,
Radek Pietruszewskie1dbc3c2023-10-29 22:21:35 +010055 },
56
57 ingress: top.ns.Contain(kube.SimpleIngress(cfg.name)) {
58 hosts:: [cfg.domain],
59 target_service:: top.service,
60 },
61
62 mysql: {
63 local mysql = self,
64
65 volume: top.ns.Contain(kube.PersistentVolumeClaim("wordpress-mysql")) {
radex36964dc2023-11-24 11:19:46 +010066 storage:: cfg.storageSize,
67 storageClass:: cfg.storageClassName,
Radek Pietruszewskie1dbc3c2023-10-29 22:21:35 +010068 },
69
70 deployment: top.ns.Contain(kube.Deployment("wordpress-mysql")) {
71 spec+: {
72 replicas: 1,
73 template+: {
74 spec+: {
75 volumes_: {
76 data: kube.PersistentVolumeClaimVolume(mysql.volume),
77 },
78 containers_: {
79 default: kube.Container("default") {
80 image: "mysql:8.2.0",
81 ports_: {
82 client: { containerPort: 3306 },
83 },
84 env_: {
85 MYSQL_RANDOM_ROOT_PASSWORD: "yes",
86 MYSQL_DATABASE: "wordpress",
87 MYSQL_USER: "wordpress",
88 MYSQL_PASSWORD: top.secrets.mysql,
89 },
90 volumeMounts_: {
91 data: { mountPath: '/var/lib/mysql' },
92 },
93 }
94 },
95 securityContext: {
96 runAsUser: 999,
97 },
98 }
99 }
100 }
101 },
102
103 service: top.ns.Contain(kube.Service("wordpress-mysql")) {
radex8b8f3872023-11-24 11:09:46 +0100104 target:: mysql.deployment,
Radek Pietruszewskie1dbc3c2023-10-29 22:21:35 +0100105 },
106 },
107}