Redmine ใน Kubernetes - ส่วนที่ 2: ติดตั้ง Redmine
นี่คือส่วนที่สองของซีรีส์เกี่ยวกับการติดตั้ง Redmine ลงใน Kubernetes ในบทความนี้เราจะให้คำแนะนำเกี่ยวกับวิธีการติดตั้ง Redmine ที่เป็นไปได้และเชื่อถือได้

นับถอยหลัง ส่วนที่ 1
ตอนนี้คุณต้องกำลังตั้งค่า Redmine บน Kubernetes ใช่ไหม หลังจากทั้งหมดนี้ นั่นคือสิ่งที่คุณมาที่นี่ใช่ไหม?
ใน Redmine in Kubernetes - ส่วนที่ 1: เตรียมสภาพแวดล้อม เราได้ติดตั้ง Ingress Controller ซึ่งเป็นส่วนประกอบที่เปลี่ยนเส้นทางคำขออินเทอร์เน็ตภายในคลัสเตอร์ของคุณ และเราได้สร้างโดเมน DNS ชื่อ redminek8s.ddns.net แล้ว ตอนนี้เราเพียงแค่ต้องกำหนดค่า HTTPS และเราก็พร้อมที่จะติดตั้ง Redmine แล้ว
HTTPS ด้วย cert-manager
แม้ว่าเราสามารถใช้ Redmine ของเราเป็น HTTP ได้ แต่ HTTPS กลายเป็นมาตรฐานสำหรับเว็บไซต์ ถึงขนาดที่เบราว์เซอร์ส่วนใหญ่จะเตือนคุณเมื่อมีปัญหาด้านความปลอดภัยเมื่อไม่ได้ใช้ HTTPS โดยเฉพาะ
โดยทั่วไปการเปิดใช้งาน HTTPS ไม่ใช่งานที่ง่าย เนื่องจากคุณต้องซื้อใบรับรองและอัปโหลดไปยังเว็บไซต์ของคุณ ต้องต่ออายุใบรับรองหลังจากเวลาที่กำหนด และต้องทำซ้ำกระบวนการนี้ Cert-manager จะทำให้งานทั้งหมดนี้เป็นอัตโนมัติ รวมถึงการรับรองฟรี คุณสามารถดูข้อมูลเพิ่มเติมได้ที่ เว็บไซต์ของพวกเขา แต่ฉันจะอธิบายสิ่งที่คุณต้องรู้ต่อไป
ติดตั้ง cert-manager
ดำเนินการตามขั้นตอนต่อไปนี้เพื่อติดตั้ง cert-manager ในคลัสเตอร์ของคุณ:
helm repo add jetstack https://charts.jetstack.io && helm repo update
helm install cert-manager jetstack/cert-manager --set installCRDs=true
ก่อนอื่นคุณเพิ่มที่เก็บข้อมูลที่ cert-manager อยู่ แล้วคุณติดตั้งเวอร์ชันล่าสุดของ cert-manager
เชื่อมต่อกับ Certificate Authority
ตอนนี้เราต้องแนะนำ cert-manager เพื่อเชื่อมต่อกับผู้ให้บริการ Certificate ที่เราเลือก พวกเราจะใช้ LetsEncrypt ซึ่งเป็นหน่วยความปลอดภัยฟรี สร้างไฟล์นี้ก่อน (อย่าลืมแทนที่ <your-email-address> ด้วยที่อยู่อีเมลจริง) และตั้งชื่อไฟล์ว่า cluster-issuer.yaml
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: <your-email-address>
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
จากนั้นใช้คำสั่งนี้ในคลัสเตอร์ของคุณ
kubectl apply -f cluster-issuer.yaml
ขอแสดงความยินดี! ไฟล์ด้านบนคือการกำหนดค่า Kubernetes แรกที่เราเขียนและนำไปใช้กับคลัสเตอร์ คุณอาจจะสังเกตได้ว่ามันแสดงวิธีการเชื่อมต่อกับ LetsEncrypt แต่ก็อธิบาย Ingress Controller ที่เราสร้างในส่วนที่ 1 ด้วย (The class: nginx ที่สุดท้าย) ประเภทของการกำหนดค่านี้มีบางบรรทัดที่มีช่องว่างเพื่อแสดงความขึ้นต่อกันของคุณสมบัติต่าง ๆ ให้สังเกตว่าช่องว่างเหล่านี้ต้องเหมือนที่แสดงเพื่อให้ไฟล์ถูกอ่านและนำไปใช้ได้อย่างถูกต้อง
ตอนนี้คลัสเตอร์ของคุณเปิดใช้งา
การติดตั้ง Redmine
นี่คือสิ่งที่เราทุกคนรอคอย สามารถติดตั้ง Redmine ได้หลายวิธี แต่วิธีที่สะดวกที่สุดคือการใช้ Helm อย่างแน่นอน ตามที่เราทำไปก่อนหน้านี้ เราจะเพิ่มเครื่องหมายที่ Redmine อยู่
helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
แต่ในครั้งนี้ แทนที่จะติดตั้งทันที เราจะสร้างไฟล์การกำหนดค่า เพื่อระบุพฤติกรรมที่เราต้องการให้ Redmine มี
เราจะแยกการกำหนดค่าทั้งหมดในส่วนของตัวเอง แต่คุณสามารถใส่ทั้งหมดในไฟล์เดียวกันได้ ต่อจากกัน ให้ตั้งชื่อไฟล์ว่า values.yaml
แอปพลิเคชัน Helm ทั้งหมดมีไฟล์ values.yaml ที่มีการกำหนดค่าที่เป็นไปได้ทั้งหมดสำหรับแอปพลิเคชัน เมื่อเราสร้าง values.yaml เอง เรากำหนดการเปลี่ยนแปลงที่เราต้องการ ค่าใด ๆ ที่เราไม่รวมในไฟล์ของเราจะถูกเก็บไว้เหมือนเดิมในไฟล์เริ่มต้น
ค่าเริ่มต้นทั้งหมดยังสามารถหาได้ในหน้าแอปพลิเคชัน Helm https://hub.helm.sh/charts/bitnami/redmine ลองไปตรวจสอบการกำหนดค่าทั้งหมด
ผู้ใช้ Admin คนแรก
RedmineUsername: adminUser
RedminePassword: <my-password>
ขั้นตอนนี้เป็นเรื่องที่จำเป็นและง่ายต่อการเข้าใจ นี่คือผู้ใช้คนแรกของเราใน Redmine คนที่เราจะใช้เข้าสู่ระบบครั้งแรก
เมื่อติดตั้ง Redmine เราจะสามารถเข้าถึงได้ด้วยผู้ใช้นี้เพื่อกำหนดค่าการติดตั้งใหม่ของคุณ
ฐานข้อมูล PostgreSQL
ตามค่าเริ่มต้น การติดตั้ง Helm ของเราจะต้องมีการสร้างฐานข้อมูล mariadb แต่เราจะกำหนดค่าการติดตั้งของเราให้ใช้ PostgreSQL คุณต้องเพิ่มรหัสผ่านอย่างน้อยเพื่อเข้าถึงฐานข้อมูลนี้ ดังที่คุณเห็นด้านล่าง
databaseType: postgresql
mariadb:
enabled: false
postgresql:
enabled: true
postgresqlDatabase: Redmine
postgresqlUsername: Redmine
postgresqlPassword: <some-safe-password>
เราต้องบอกการติดตั้งของเราโดยชัดเจนว่าเราไม่ต้องการติดตั้ง MariaDB พร้อมกับการกำหนดค่าสำหรับฐ
การกำหนดค่าชื่อ DNS
การกำหนดค่าด้านล่างนี้เป็นด้านตรงข้ามของการกำหนดค่า DNS ที่เราทำในส่วนที่ 1 ดังที่คุณเห็นเราเปิดใช้งาน TLS ซึ่งเป็นโปรโตคอลที่อยู่เบื้องหลังของ HTTPS และตั้งค่าชื่อโฮสต์ที่เราใช้เมื่อสร้างระเบียน DNS ของเรา:
ingress:
enabled: true
certManager: true
hostname: redminek8s.ddns.net
tls: true
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt
นอกจากนี้ในสองบรรทัดสุดท้ายเราเชื่อมโยงแอปพลิเคชันของเรากับ Ingress Controller และ Cluster Issuer ที่เราสร้างไว้ก่อนหน้านี้
ตอนนี้เราสามารถติดตั้ง Redmine ด้วยการกำหนดค่าที่กำหนดเองของเรา:
helm install Redmine -f values.yaml bitnami/redmine
บรรทัดนี้คล้ายกับบรรทัดการติดตั้ง helm อื่น ๆ ที่เราใช้ก่อนหน้านี้ แต่คราวนี้เราจะให้ค่า values.yaml ที่กำหนดเอง นี่คือวิธีที่ใช้ปรับแต่งแอปพลิเคชัน Helm ใด ๆ
เรายังต้องรออีกสักครู่เนื่องจากการสร้างแอปพลิเคชันใช้เวลาสักครู่ คุณสามารถดำเนินการคำสั่งนี้เพื่อตรวจสอบสถานะของคอนเทนเนอร์แอปพลิเคชันของคุณ:
kubectl get pods --watch
คำสั่งจะคืนค่าอย่างเช่นนี้:
NAME READY STATUS RESTARTS AGE
. . .
redmine-999c68dd9-x7h2k 1/1 Running 0 6m40s
redmine-postgresql-0 1/1 Running 0 6m40s
คุณต้องรอจนกว่าสถานะของทั้งสองคอนเทนเนอร์จะเป็น Running และพร้อมใช้งาน 1/1 ซึ่งในกรณีของฉันใช้เวลาประมาณ 6 นาที
ตอนนี้ทุกอย่างพร้อมที่จะเปิดเบราว์เซอร์และไปที่การติดตั้งใหม่ของเรา:
Redmine พร้อมแล้ว
สรุป
Kubernetes เป็นเครื่องมือที่ซับซ้อนในการติดตั้งแอปพลิเคชัน แต่เราได้นำเสนอความซับซ้อนนั้นด้วยความช่วยเหลือของ Helm (ไม่มีเจตนา) และติดตั้ง Redmine ที่เป็นการติดตั้งที่เชื่อถือได้
คุณสามารถค้นหาสรุปของวิธีการนี้ใน git repo ต่อไปนี้: https://github.com/lcofre/redmine-on-k8s หากคุณติดอยู่คุณสามารถเปรียบเทียบกับไฟล์ของคุณได้
เราได้ปล่อยบางแนวความคิดออกจากการอภิปรายเนื่องจากซับซ้อนหรือการอธิบายเป็นเฉพาะกลุ่มคลาวด์ รวมถึง Liveness และ Readiness ของแอปพลิเคชันของคุณ การกำหนดค่าจดหมายเข้า และการขยายออกเพื่อจัดการโหลดที่มากขึ้น กรุณาแจ้งให้เราทราบด้านล่างว่าคุณสนใจอะไรมากที่สุดเราจะอภิปรายเรื่องนั้นในอนาคต

การอัพเกรด Redmine ที่สุดยอด? ง่าย.
ได้รับเครื่องมือที่มีกำลังในการวางแผนโครงการที่เหมาะสม การจัดการ และควบคุมทั้งหมดในซอฟต์แวร์เดียว