blob: e3f457c44c165e4b9c357cf824a92318d7ac197d [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)) {
54 target_pod:: top.deployment.spec.template,
55 },
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")) {
66 spec+: {
67 storageClassName: cfg.storageClassName,
68 accessModes: [ "ReadWriteOnce" ],
69 resources: {
70 requests: {
71 storage: cfg.storageSize,
72 },
73 },
74 },
75 },
76
77 deployment: top.ns.Contain(kube.Deployment("wordpress-mysql")) {
78 spec+: {
79 replicas: 1,
80 template+: {
81 spec+: {
82 volumes_: {
83 data: kube.PersistentVolumeClaimVolume(mysql.volume),
84 },
85 containers_: {
86 default: kube.Container("default") {
87 image: "mysql:8.2.0",
88 ports_: {
89 client: { containerPort: 3306 },
90 },
91 env_: {
92 MYSQL_RANDOM_ROOT_PASSWORD: "yes",
93 MYSQL_DATABASE: "wordpress",
94 MYSQL_USER: "wordpress",
95 MYSQL_PASSWORD: top.secrets.mysql,
96 },
97 volumeMounts_: {
98 data: { mountPath: '/var/lib/mysql' },
99 },
100 }
101 },
102 securityContext: {
103 runAsUser: 999,
104 },
105 }
106 }
107 }
108 },
109
110 service: top.ns.Contain(kube.Service("wordpress-mysql")) {
111 target_pod:: mysql.deployment.spec.template,
112 },
113 },
114}