| ## Kubernetes | |
| Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of | |
| containerized applications | |
| # Complete deployment guide for k8s deloyment | |
| * contains every functionality | |
| * compatible with amd64, arm64 and armv7l | |
| ## First. Get all file in k8s folder | |
| Download `k8s` file to a directory on your k8s server and go to this folder | |
| ## 1. Create Redis deloyment | |
| ```shell | |
| kubectl apply -f 01.redis.yml | |
| ``` | |
| This command will create ytdl namespace, redis pod and redis service | |
| ## 2. Creat MariaDB deloyment | |
| ```shell | |
| kubectl apply -f 02.mariadb.yml | |
| ``` | |
| This deloyment will claim 10GB storage from storageClassName: longhorn. Please replace longhorn with your | |
| storageClassName before apply. | |
| ## 3. Set environment variables | |
| Create configMap for env | |
| ### 3.1 Edit configmap.yml | |
| ```shell | |
| vim 03.configmap.yml | |
| ``` | |
| you can configure all the following environment variables: | |
| * PYRO_WORKERS: number of workers for pyrogram, default is 100 | |
| * WORKERS: workers count for celery | |
| * APP_ID: **REQUIRED**, get it from https://core.telegram.org/ | |
| * APP_HASH: **REQUIRED** | |
| * TOKEN: **REQUIRED** | |
| * REDIS: **REQUIRED if you need VIP mode and cache** ⚠️ Don't publish your redis server on the internet. ⚠️ | |
| * OWNER: owner username | |
| * QUOTA: quota in bytes | |
| * EX: quota expire time | |
| * MULTIPLY: vip quota comparing to normal quota | |
| * USD2CNY: exchange rate | |
| * VIP: VIP mode, default: disable | |
| * AFD_LINK | |
| * COFFEE_LINK | |
| * COFFEE_TOKEN | |
| * AFD_TOKEN | |
| * AFD_USER_ID | |
| * AUTHORIZED_USER: users that could use this bot, user_id, separated with `,` | |
| * REQUIRED_MEMBERSHIP: group or channel username, user must join this group to use the bot. Could be use with | |
| above `AUTHORIZED_USER` | |
| * ENABLE_CELERY: Distribution mode, default: disable. You'll can setup workers in different locations. | |
| * ENABLE_FFMPEG: enable ffmpeg so Telegram can stream | |
| * MYSQL_HOST: you'll have to setup MySQL if you enable VIP mode | |
| * MYSQL_USER | |
| * MYSQL_PASS | |
| * GOOGLE_API_KEY: YouTube API key, required for YouTube video subscription. | |
| * AUDIO_FORMAT: audio format, default is m4a. You can set to any known and supported format for ffmpeg. For | |
| example,`mp3`, `flac`, etc. ⚠️ m4a is the fastest. Other formats may affect performance. | |
| * ARCHIVE_ID: group or channel id/username. All downloads will send to this group first and then forward to end user. | |
| **Inline button will be lost during the forwarding.** | |
| ### 3.2 Apply configMap for environment variables | |
| ```shell | |
| kubectl apply -f 03.configmap.yml | |
| ``` | |
| ## 4. Run Master Celery | |
| ```shell | |
| kubectl apply -f 04.ytdl-master.yml | |
| ``` | |
| This deloyment will create ytdl-pvc PersistentVolumeClaim on storageClassName: longhorn. This clain will contain vnstat, | |
| cookies folder and flower database. Please replace longhorn with your storageClassName before apply | |
| ### 4.1 Setup instagram cookies | |
| Required if you want to support instagram. | |
| You can use this extension | |
| [Get cookies.txt](https://chrome.google.com/webstore/detail/get-cookiestxt/bgaddhkoddajcdgocldbbfleckgcbcid) | |
| to get instagram cookies | |
| Get pod running ytdl master: | |
| ```shell | |
| kubectl get pods --namespace ytdl | |
| ``` | |
| Name should be ytdl-xxxxxxxx | |
| Access to pod | |
| ```shell | |
| kubectl --namespace=ytdl exec --stdin --tty ytdl-xxx -- sh | |
| ``` | |
| (replace ytdl-xxx by your pod name) | |
| Go to ytdl-pvc mounted folder | |
| ```shell | |
| cd /ytdlbot/ytdlbot/data/ | |
| vim instagram.com_cookies.txt | |
| # paste your cookies | |
| ``` | |
| ## 5. Run Worker Celery | |
| ```shell | |
| kubectl apply -f 05.ytdl-worker.yml | |
| ``` | |
| ## 6. Run Flower image (OPTIONAL) | |
| ### 6.1 Setup flower db | |
| Get pod running ytdl master: | |
| ```shell | |
| kubectl get pods --namespace ytdl | |
| ``` | |
| Name should be ytdl-xxxxxxxx | |
| Access to pod | |
| ```shell | |
| kubectl --namespace=ytdl exec --stdin --tty ytdl-xxx -- sh | |
| ``` | |
| (replace ytdl-xxx by your pod name) | |
| Go to ytdl-pvc mounted folder | |
| ```shel | |
| cd /var/lib/vnstat/ | |
| ``` | |
| Create flower database file | |
| ```shell | |
| {} ~ python3 | |
| Python 3.9.9 (main, Nov 21 2021, 03:22:47) | |
| [Clang 12.0.0 (clang-1200.0.32.29)] on darwin | |
| Type "help", "copyright", "credits" or "license" for more information. | |
| >>> import dbm;dbm.open("flower","n");exit() | |
| ``` | |
| ### 6.2 Config Flower Ingress | |
| This step need config ingress from line 51 of file 06.flower.yml with your ingress service. Need for access from | |
| internet. | |
| YML file should be adjusted depending on your load balancing, ingress and network system | |
| For active SSL | |
| ```yml | |
| cert-manager.io/cluster-issuer: letsencrypt-prod | |
| ``` | |
| Replace nginx by your ingress service | |
| ```yml | |
| ingressClassName: nginx | |
| ``` | |
| Add your domain, example | |
| ```yml | |
| tls: | |
| - hosts: | |
| - flower.benny.com | |
| secretName: flower-tls | |
| rules: | |
| - host: flower.benny.com | |
| ``` | |
| ### 6.3 Apply Flower deloyment | |
| ```shell | |
| kubectl apply -f 06.flower.yml | |
| ``` | |