JomSocial – Troubleshooter

Feature này mình nghĩ ra và develop cho JomSocial … và cũng là feature cuối cùng mình làm cho JomSocial.

Khi làm supporter hầu hết các tình huống gặp phải là end users sử dụng VÔ TỘI VẠ các 3rd parties mà không bao giờ quan tâm đến compatibility của chúng. Song song đó họ cũng TÙY TIỆN modify vào core của JomSocial gây ra conflict, và sau đó request support !!!

Vậy nên Troubleshooter được develop để xử lý việc này

  • Check các 3rd parties và cũng cảnh báo các issues liên quan đến compatibility
  • Đảm bảo server đúng như requirements
  • Đảm bảo core files không bị modified
  • Có thể automatically restore các files nếu thấy có modified

Cũng thú vị chứ nhỉ ? 🙂

HAProxy SSL Passthrough

frontend ssl
        bind :443
        mode tcp
        option tcplog

        # Wait for a client hello for at most 5 seconds
        tcp-request inspect-delay 5s
        tcp-request content accept if { req_ssl_hello_type 1 }

        use_backend be_ssl_hosting if { req_ssl_sni -i jooservices.com }

        default_backend be_ssl
backend be_ssl_hosting
        mode tcp
        balance roundrobin
        server aaa_ssl_server 192.168.1.39:443 check

MariaDB – Create user

Create user have permissions on all tables

GRANT ALL PRIVILEGES ON *.* TO 'user1'@localhost IDENTIFIED BY 'password1';

Create user have permissions on specific table

GRANT ALL PRIVILEGES ON 'yourDB'.* TO 'user1'@localhost;
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'user1'@localhost;

Drop user

DROP USER 'user1'@localhost;

Create user for exporter

CREATE USER 'exporter'@'192.168.1.%' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;

GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

https://phoenixnap.com/kb/how-to-create-mariadb-user-grant-privileges

Laravel – Queue’ parameter

Redis

In your config/queue.php configuration file, each queue connection defines a retry_after option. This option specifies how many seconds the queue connection should wait before retrying a job that is being processed. For example, if the value of retry_after is set to 90, the job will be released back onto the queue if it has been processing for 90 seconds without being released or deleted. Typically, you should set the retry_after value to the maximum number of seconds your jobs should reasonably take to complete processing.

retry_after

My infrastructure network

Về cơ bản infrastructure network này mình build chưa được hoàn thiện, nhưng cũng thấy tương đối happy về nó. 1 chút chia sẽ.

Router 3910

  • Mình có tổng cộng 4 WANs. Tuy nhiên thực tế chỉ có 1 WAN chính với IP tĩnh

Core Switch – CnMatrix 2028-P

  • Thật ra em này có 1 điểm dở là không có port 2.5Gbe nên vướng 1 con Asus AX86U đành phải xài tạm port 1Gbe
  • 1 port SFP+ đến “Workstation”
  • 1 port 1Gbe đến X300
  • 1 port 1Gbe đến ProDesk
  • 1 port 1Gbe đến Asus AX86U

ProDesk

  • Em nó tuy nhỏ bé nhưng lại gần như là mấu chốt chính của toàn bộ Network. Gọi em nó là gatekeeper
  • HAProxy
    • Tiếp nhận 100% mọi requests và sau đó forwarding đến các server phía sau
    • Cũng là em SSH Jumper luôn
    • Tuy nhiên 1 số bất cập mình chưa làm được
      • Forward RDP
      • Passthrough SSL ( cái này đúng ra đã từng làm được mà giờ lại bị stucked )
  • Grafana
  • Loki
  • Syslog
  • Pihole

Asrock X300

  • Bản chất em này … ăn điện ít mà specs cũng kha khá ( 5700G / 64GB RAM & 2 TB SSD ) nên “hiểu” em nó như 1 thiết bị thứ sẽ online gần như 24/7. Do đó các “services” hosting trên đây là các services cần online liên tục
  • 1 con Virtualmin để hosting … chính các web này và n web khác
  • và 1 vài VM khác

Workstation

  • Em nó chính thức đã được triển khai với ESXi 7
  • 1 em VM “SMB” được attach với các HDDs. Em này bản thân cũng khá nhỏ, chủ yếu để phục vụ SMB / Plex & Torrent thôi
  • Em Workstation ngốn điện cao nên lý thuyết cũng khó online 24/7 mà sẽ có lúc down. Tuy nhiên specs em nó mạnh. Nên các service cần resource cao sẽ nằm trên đây.

ESXi – Github Runners via Docker

Context của bài toán này là build 1 con Docker để chạy Github Runners ( scaleble ). Và mọi thứ được chạy trong 1 con VM thuộc về ESXi

  • ESXi build 1 con VMWare chạy Ubuntu Server 20.04 . Cái này dễ dàng không có gì bàn cãi
  • Và tất nhiên sau đó sẽ setup Docker ( không cần chạy without sudo cũng được )

Và ta có 1 file docker-compose sau

version: "3.7"

services:
  runner:
    image: myoung34/github-runner:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      RUNNER_SCOPE: repo
      RUNNER_NAME_PREFIX: runner
      LABELS: ubuntu,x64
      REPO_URL: <repository_url>
      EPHEMERAL: 1
      ACCESS_TOKEN: <github_token>
    deploy:
      replicas: 4
      resources:
        limits: // Giới hạn tối đa
          cpus: '1'
          memory: 2G
        reservations: // Tối thiểu
          cpus: '1'
          memory: 1G

Và giờ chỉ cần chạy docker-compose up -d

Tuy nhiên câu chuyện chưa hết vui !!! Do bản chất ta đang chạy qua Docker. Do đó việc build các service ( cũng qua docker ) lại không khả thi. Cụ thể là ta cần build MySQL / Redis etc … Vậy thì sao ???

…. tách em nó ra 1 VM khác và update lại IP về con VM đó thôi 😀 . Chút mất công nhưng cơ bản đã dễ dàng rất nhiều.

Từ giờ con VM chạy Runners ta tạo n folder, mỗi folder cho 1 docker-compose ứng với 1 repository