1. This answer was edited.

    Ant Media server has capabilities to stream up to millions of concurrent viewers once you set up the right infrastructure with the potential to scale. To configure Ant Media server for large audiences, you will need to run multiple server instances in a cluster or even in a group of clusters. This cRead more

    Ant Media server has capabilities to stream up to millions of concurrent viewers once you set up the right infrastructure with the potential to scale. To configure Ant Media server for large audiences, you will need to run multiple server instances in a cluster or even in a group of clusters. This could be achieved either on-cloud or on-premise self-hosted deployment architecture. 

    Let’s try to see a couple of strategies:  

    Kubernetes deployment

    You can run Ant Media in a Kubernetes cluster with thousands of nodes. But the easiest way to implement this is to use cloud-based managed Kubernetes engines like:

    • AWS EKS
    • DigitalOcean Kubernetes (DOKS)
    • OVH
    • Azure Managed Kubernetes (AKS)

    Auto-scaling group with load balancers

    You can also deploy Ant Media in a cluster of servers using load balancers. Some of the deployment scenarios include:

    • Ant Media cluster Nginx load load balancing
    • Ant Media cluster with Haproxy load balancer
    • Ant Media cluster with AWS auto-scaling
    • Ant Media Cluster with Azure auto-scaling
    • Ant Media Cluster with Alibaba auto-scaling
    • Ant Media Cluster with Google Cloud auto-scaling

      It is important to note that running a massive auto-scaling infrastructure for Ant Media streaming requires experienced skills and knowledge. You can always find me on Fiverr so can chat about your project if you need help in this area

    See less
  2. This answer was edited.

    To understand the computing resources you need to stream with Ant Media, you need to first understand important factors like: Number of concurrent viewers This is the average number of viewers you expect to watch videos simultaneously in a given time. More concurrent viewers means more need for servRead more

    To understand the computing resources you need to stream with Ant Media, you need to first understand important factors like:

    Number of concurrent viewers

    This is the average number of viewers you expect to watch videos simultaneously in a given time. More concurrent viewers means more need for server resources.

    Number of streaming hours

    More time spent broadcasting and streaming videos will also mean more bandwidth and data transfer

    Streaming Video quality

    Streaming high video quality needs enough CPU power for faster encoding and more bandwidth to transfer large files to the end viewers. Here is a table of estimated CPU & RAM you need to stream at an average quality in Ant Media server

    Estimated server resources Estimated No. of Concurrent Viewers
    4 Cores CPU | 8 GB RAM 200
    8 Cores CPU | 16 GB RAM 400
    16 Cores CPU | 32 GB RAM 800
    32 Cores CPU | 32 GB RAM 2000

      Here is also a table showing the estimated data transfer per viewer per hour based on various streaming video qualities

    Video Quality Estimated data transfer per hour per user
    240 0.14GB
    360p 0.23GB
    480p 0.45GB
    720p 0.68GB
    1080p 1.35GB

    If you plan to run your streams 24/7 per month or throughout the month, then you can just multiply the estimated data transfer per hour by 720 hours, which are the total number of hours in a month to get the total monthly data transfer per user.          

    See less
  3. The free Ant Media community edition can't be used in a cluster of servers. If you want to run Ant Media in a cluster, you will need to purchase the Ant Media Enterprise cluster license  Each node you add to a cluster will need its own license. So, the number of nodes you put in a cluster will deterRead more

    The free Ant Media community edition can’t be used in a cluster of servers. If you want to run Ant Media in a cluster, you will need to purchase the Ant Media Enterprise cluster license 

    Each node you add to a cluster will need its own license. So, the number of nodes you put in a cluster will determine how much you pay for licenses.

    See less
  4. Contabo VPS is what I normally recommend to my clients if they're looking for a cheaper and affordable VPS solution for Ant Media streaming. Undoubtedly, VPS servers are costly, and the situation gets worse if you want to stream videos online. But in my own experience, Contabo has always served me aRead more

    Contabo VPS is what I normally recommend to my clients if they’re looking for a cheaper and affordable VPS solution for Ant Media streaming.

    Undoubtedly, VPS servers are costly, and the situation gets worse if you want to stream videos online. But in my own experience, Contabo has always served me and my clients well as they offer satisfying server resources for just a penny.

    For less than $6 per month, Contabo can offer you 4CPU cores, 6GB RAM, and 32TB bandwidth. This is what I call value for money.

    RECOMMENDED READING: Where can I buy the most Cheapest VPS server?

    See less
  5. You don't necessarily need a GPU to run streams using Ant Media Server. The primary role of the GPU in Ant Media is to accelerate the video encoding process.  This means that the GPU can unburden the CPU of the encoding load, especially at peak hours. The GPU is also crucial if you're streaming FullRead more

    You don’t necessarily need a GPU to run streams using Ant Media Server. The primary role of the GPU in Ant Media is to accelerate the video encoding process.  This means that the GPU can unburden the CPU of the encoding load, especially at peak hours.

    The GPU is also crucial if you’re streaming Full HD or 4K videos as it speeds up the encoding process of these formats.

    The Ant Media Adaptive bitrate streaming feature can also benefit from the GPU integration as it’s resource-intensive. But the Adaptive bitrate streaming is optional if you have limited server resources.

    In summary, if you’re simply running a basic streaming session, having a GPU configured with Ant Media is not really necessary. You can still stream videos up to full HD without a GPU as long as you have enough CPU resources on your server.

    See less
  6. There are a couple of reasons why your Ant Media stream is buffering: Poor VPS with insufficient resources Video streaming requires sufficient resources like RAM, CPU, and bandwidth. Running Ant Media on a VPS server with limited resources will likely cause buffering issues. But even if you have enoRead more

    There are a couple of reasons why your Ant Media stream is buffering:

    Poor VPS with insufficient resources

    Video streaming requires sufficient resources like RAM, CPU, and bandwidth. Running Ant Media on a VPS server with limited resources will likely cause buffering issues. But even if you have enough RAM and CPU, your VPS provider may choose to throttle or limit your bandwidth usage, hampering the performance of your Ant Media streams

    You need an affordable and reliable VPS provider who doesn’t unnecessarily throttle your server bandwidth.

    Your local connection is poor

    If you’re streaming videos locally to your Ant Media server, your internet could be unreliable. You need to make sure you have enough internet speed that can allow you to broadcast live streams.

    The streaming infrastructure is overwhelmed

    This happens if your current Ant Medis server instance can’t handle the size of your audience. To fix this issue, you need to scale up your infrastructure by deploying a cluster of servers.

    See less
  7. There are a couple of reasons why your Ant Media streams are refusing to play after embedding on your site: Wrong Ant Media embed code When you create a stream in Ant Media, you can copy the embed code and paste it into your website. Make sure you're using the right embed code by verifying if the stRead more

    There are a couple of reasons why your Ant Media streams are refusing to play after embedding on your site:

    Wrong Ant Media embed code

    When you create a stream in Ant Media, you can copy the embed code and paste it into your website. Make sure you’re using the right embed code by verifying if the stream ID matches with one attached to your target stream

    Your site doesn’t have SSL certificate

    If the website domain on which you want to embed the Ant Media stream doesn’t have SSL, the streams will not play. This happens when you also have SSL installed on Ant Media. But if both the Ant Media server and the Website don’t have SSL running, the streams will play perfectly.

    Your website domain is not whitelisted

    Ant Media allows you to whitelist domains that can embed streams. If this configuration is triggered, then embedding streams on domains that are not whitelisted won’t work.

    Appropriate Ant Media ports are not open

    Sometimes when the standard Ant Media ports are not opened through the firewall, the streams are likely not to play. Open Ant Media ports through the firewall here.

    Your broadcast is not working

    Maybe your embed setup is correct but there is a problem with broadcasting. You can check if your video source is working perfectly. If you’re using OBS to stream to Ant Media, verify that everything is working for you.

    See less
  8. There are various reasons that could be preventing SSL from installing on Ant Media server. Some of them include: You're using the wrong Directory path To install SSL on Ant Media, you need to make sure you're in the right directory path. Use the cd command to navigate to the Ant Media directory befRead more

    There are various reasons that could be preventing SSL from installing on Ant Media server. Some of them include:

    You’re using the wrong Directory path

    To install SSL on Ant Media, you need to make sure you’re in the right directory path. Use the cd command to navigate to the Ant Media directory before installing the SSL certificate:

    cd /usr/local/antmedia/

    Your Domain Name hasn’t propagated

    Another reason why installing SSL on Ant Media is failing is because your Domain Name has not propagated yet or you didn’t set up the DNS settings correctly.

    Make sure you have your Domain Name pointed to the IP address of the server on which you’ve installed Ant Media.

    You can use this tool to check for your Domain propagation status

     

    You didn’t open the Ant Media HTTPS port

    In some cases, I’ve noticed that if you’ve not opened the appropriate Ant Media ports through the firewall, the SSL installation process is likely not to be successful.

    Follow this guide to open Ant Media ports through the firewall

     

    You’re using the wrong syntax

    The other problem is likely because you’re using the wrong syntax for installing SSL certificate on Ant Media server.

    When you’re already inside the Ant Media Server directory, you can use the following command to install SSL certificate:

     sudo ./enable_ssl.sh -d domain.com

    Replace domain.com with your own domain you want to use

    See less
  9. To update or upgrade your existing Ant Media server instance to the latest release or version, follow these steps: Log into your server Have access to your server on which Ant Media is installed. You can do this using SSH access with your appropriate credentials. Download the latest Ant Media serverRead more

    To update or upgrade your existing Ant Media server instance to the latest release or version, follow these steps:

    Log into your server

    Have access to your server on which Ant Media is installed. You can do this using SSH access with your appropriate credentials.

    Download the latest Ant Media server build

    On your SSH terminal, you need to download the latest Ant Media Server build. If you’re using Ant Media community edition, you can find all the latest community builds here 

    If you’re using Ant Media Enterprise edition, then you need to log into your Ant Media customer account and find the latest build. The latest version will always be listed inside your Ant Media account so you can download it.

    You can use the wget command to download the latest Ant Media build on our terminal:

    sudo wget Put-your-Ant-Media-Download-link-here

    Download the Ant Media installation script

    The Ant Media installation script is a standalone script and it’s different from the Ant Media software itself, which comes packaged in a zipped folder.

    This script contains all the instructions that help you automate the installation of the Ant Media Server.

    You can run the following command to download the installation script:

    wget https://raw.githubusercontent.com/ant-media/Scripts/master/install_ant-media-server.sh -O install_ant-media-server.sh && chmod 755 install_ant-media-server.sh

    Upgrade Ant Media server to the latest

    Now that you have everything you need, you can start the process of upgrading to your desired  version of Ant Media server:

    sudo ./install_ant-media-server.sh -i ANT_MEDIA_SERVER_ZIP_FILE -r true

    Make sure you replace ANT_MEDIA_SERVER_ZIP_FILE with the actual name of the zip file you downloaded that contains the latest Ant Media build.

    The -r flag is used to keep all your Ant Media settings and account after the upgrade is completed

    Finally, access the Ant Media Web Panel by logging in through the browser.

    See less
  10. This answer was edited.

    To use gdown to download files from Google Drive using the Linux terminal, follow these steps: Install python and pip We need to first install both Python and Pip. Python is needed because gdown is a Python-built tool and requires it to be installed first. On the other hand, pip is a package managerRead more

    To use gdown to download files from Google Drive using the Linux terminal, follow these steps:

    Install python and pip

    We need to first install both Python and Pip. Python is needed because gdown is a Python-built tool and requires it to be installed first. On the other hand, pip is a package manager we need to install Python scripts like gdown on Linux So, we can install both python3 and pip in one command as seen below

    sudo apt install python3-pip

    Install gdown

    Now, let’s use the pip package manager to install gdown on Linux’

    sudo pip install gdown

    Change the Google Drive file permission

    Make sure you change the file sharing permission to Anyone with the link in your Google Drive

    Extract the Google Drive file ID

    The file ID is found in the Google Drive file-sharing link whose permission has been changed to Anyone with the link. Here is the sample Google Drive link that contains the file ID

    https://drive.google.com/file/d/1aBcDeFgHiJkLmNoPqRsTuVWxYz/edit

    In this example Google Drive file link, the file ID we’re looking for is:

    1aBcDeFgHiJkLmNoPqRsTuVWxYz

    Now, you need to append the extracted file ID to the following:

    sudo gdown https://drive.google.com/uc?id=Put here your File ID

    In my case, I will use my sample extracted file ID as seen below

    sudo gdown https://drive.google.com/uc?id=1aBcDeFgHiJkLmNoPqRsTuVWxYz

    Are you still stuck? No worries, you can read this full guide with all the step-by-step instructions on how to download files from Google Drive using the Linux terminal.                  

    See less
  11. We use the chage command to create a temporary Linux user. This command specifically sets the user password to expire based on the expiry date or the number of days you've set it to expire. Start by creating a user on Linux using the useradd command:  sudo useradd temporaryuser In this example, I amRead more

    We use the chage command to create a temporary Linux user. This command specifically sets the user password to expire based on the expiry date or the number of days you’ve set it to expire.

    Start by creating a user on Linux using the useradd command:

     sudo useradd temporaryuser

    In this example, I am calling my user, temporaryuser but you can name it whatever you want for your case.

    We can set the password for the user using the passwd command:

    passwd temporaryuser

    Change temporaryuser with the actual username of your choice. You will be prompted to type in your password.

    It’s important to note that while typing in the password, it won’t be visible on the terminal.

    Finally, we need to set the password expiration using the chage command:

    sudo chage -E YYYY-MM-DD temporaryuser

    The -E flag or parameter is what we use to set the expiration date for the user password. Make sure that the date format is represented as YYYY-MM-DD

     

    If you want the account to expire after a certain number of days starting from today, here is the command you can use:

     sudo chage -E $(date -d "+X days" "+%Y-%m-%d") temporaryuser

    From the above command, replace x with the number of days you want the account password to expire from today. Let’s assume you want the account to expire after 30 days from now, here is the command you can use:

     sudo chage -E $(date -d "+30 days" "+%Y-%m-%d") temporaryuser

    You will have to replace temporaryuser with the name of the actual user you want to expire.

     

    To verify if the account expiration period, run the following command:

    sudo chage -l temporaryuser

    Here is the sample output you will see on your terminal:

    Last password change : Jan 16, 2024
    Password expires : never
    Password inactive : never
    Account expires : Dec 22, 2024
    Minimum number of days between password change : 0
    Maximum number of days between password change : 99999
    Number of days of warning before password expires : 7
    

    It’s also important to note that once the user expires, it won’t be deleted but the password will stop working because of the expiry parameter we’ve set.

    If you want to read more about creating temporary users on Linux, I recommend this article for you to get started

    See less
  12. There are several ways to check for the available disk space on Linux systems. These include: Using the df command Run the the df command on your Linux terminal df -h Here is the sample output you will see: Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 8.2G 10G 46% / tmpfs 2.0G 0 2.0G 0%Read more

    There are several ways to check for the available disk space on Linux systems. These include:

    Using the df command

    Run the the df command on your Linux terminal

    df -h

    Here is the sample output you will see:

    Filesystem Size Used Avail Use% Mounted on
    /dev/sda1 20G 8.2G 10G 46% /
    tmpfs 2.0G 0 2.0G 0% /dev/shm
    /dev/sdb1 100G 25G 75G 25% /home
    /dev/sdc1 250G 180G 70G 73% /data

    This output lists the various disk partitions with their corresponding storage usages. All Linux disk partitions are located in the /dev/ directory.

    Using the du command

    Another way to check the disk space on Linux is to use the du command:

    du

    When you run this command, here is the sample output you will see:

    4.0K ./Documents
    8.0K ./Downloads
    16K ./Pictures
    24K ./Music
    36K ./Videos
    48K ./Desktop
    4.0K ./Templates
    76K ./total
    

    It’s important to note that each line represents the disk usage in kilobytes (KB) for a specific directory or file.

    I recommend that you read this article to help you understand disk management on Linux

    See less
  13. Let's assume you have a file named file.txt and a Linux user, user1, the following ACL command will allow ‘user1 to have the read and write permissions on file.txt: setfacl -m u:user1:rw file.txt Let's break down the above command: setfacl: This is the command we use to set or modify Access ControlRead more

    Let’s assume you have a file named file.txt and a Linux user, user1, the following ACL command will allow ‘user1 to have the read and write permissions on file.txt:

    setfacl -m u:user1:rw file.txt

    Let’s break down the above command:

    • setfacl: This is the command we use to set or modify Access Control Lists (ACLs).
    • -m: This flag is used to modify the ACL of the specified file or directory.
    • u: This option or flag is used to specify a user to whom the ACL rules are going to apply.
    • user1 : This is the example user you’ve set using the -u flag.
    •  rw: These are the permissions we’re granting. “r” stands for “read” and “w” stands for “write”. This means that the specified user can both read from and write to the file. It does not grant execute permissions.
    • file.txt: This is the name of the file to which you are applying the ACL rule.

    However, you will need to understand the flags or options and parameters involved with working with ACLs, This article has everything you need to know about Access Control lists

    See less
  14. This answer was edited.

    The Nginx configuration file is located under this path: /etc/nginx/nginx.confand you can check if there are syntax errors using the following command: nginx -t If you've set up Nginx for multiple websites and each site has its own configuration file, then you can specify the target configuration yoRead more

    The Nginx configuration file is located under this path: /etc/nginx/nginx.confand you can check if there are syntax errors using the following command:

    nginx -t

    If you’ve set up Nginx for multiple websites and each site has its own configuration file, then you can specify the target configuration you want to test. Use the following command:

    nginx -t -c /etc/nginx/sites-available/my_site

    You will need to replace /etc/nginx/sites-available/my_site with the actual location path to the Nginx configuration file you’re targeting. So, running the above command will help you identify errors in individual configuration snippets. Are you interested in reading more about how to test Nginx syntax errors., here is a detailed guide to get you started.        

    See less
  15. This answer was edited.

    This issue can be approached in two scenarios: You can add the new .ts files to previously recorded files to form a single recording This means that the .ts files that share the same streamId could be appended to the same .m3u8 file. You can achieve this by editing and adding the  hlsflag setting toRead more

    This issue can be approached in two scenarios:

    • You can add the new .ts files to previously recorded files to form a single recording

    This means that the .ts files that share the same streamId could be appended to the same .m3u8 file. You can achieve this by editing and adding the  hlsflag setting to the red5-web.properties file located un the following path

    nano /usr/local/antmedia/webapps/app-name/WEB-INF/web.properties 

    You will need to replace app-name with the actual name of your streaming application i.e. LiveApp, WebRTC, or any other name assigned to the custom streaming application you’ve created in Ant Media web panel.

    Once you’ve opened the web.properties, add the hlsflag setting as follows:

    settings.hlsflags=+append_list

    For HLS recording, make sure that the below properties are also added

    settings.hlsPlayListType=event
    settings.deleteHLSFilesOnEnded=false

    After this editing, you can restart Ant Media server using this command:

    sudo service antmedia restart
    • Record the stream with the same streamId but without appending it to old files

    In case you don’t want the .ts files to be appended to the previous recordings, you can simply activate the date and timestamp feature for HLS video files. This is possible if you’re running Ant Media versions 2.5.3 and higher by adding the following property:

    settings.addDateTimeToHlsFileName=tru

    Now, the results will be as follows:

    See less
  16. This answer was edited.

    YouTube recommends certain encoding settings for videos. So these errors can go away if you re-encode again your video with the necessary parameters. You can achieve this by using FFMPEG to manipulate the keyframe interval. For example, the following command will re-encode the file with a key frameRead more

    YouTube recommends certain encoding settings for videos. So these errors can go away if you re-encode again your video with the necessary parameters.

    You can achieve this by using FFMPEG to manipulate the keyframe interval. For example, the following command will re-encode the file with a key frame interval of 2.

    ffmpeg -i input.mp4 -qscale 0 -g 2 outputFile.mp4

    Alternatively, if you don’t want to use FFMPEG, you can use the Handbrake software to reencode your videos. For this guide to achieve this.

     

     

    See less
  17. This answer was edited.

    RTMP stream playback is no longer supported so it's not recommended. But if you still need it, you can activate it using the /usr/local/antmedia/webapps/LiveApp/WEB_INF/red5-web.properties file This can be done by text editors like nano or Vim. nano /usr/local/antmedia/webapps/LiveApp/WEB_INF/red5-wRead more

    RTMP stream playback is no longer supported so it’s not recommended. But if you still need it, you can activate it using the /usr/local/antmedia/webapps/LiveApp/WEB_INF/red5-web.properties file

    This can be done by text editors like nano or Vim.

    nano /usr/local/antmedia/webapps/LiveApp/WEB_INF/red5-web.properties 

    Now, you will need to find or add the following line in the red5.properties file you’ve just opened with the text editor:

    settings.rtmpPlaybackEnabled=true // By default, it is false.

    Restart Ant Media server after editing:

    sudo service antmedia restart
    See less
  18. The first thing is to back up the Ant Media directory which is located under the following path: mv /usr/local/antmedia{,_bck} The mv command is used to rename the directory antmedia to antmedia_back. The next step is to download this renamed backup copy so you can transfer it to the newer server. TRead more

    The first thing is to back up the Ant Media directory which is located under the following path:

    mv /usr/local/antmedia{,_bck}

    The mv command is used to rename the directory antmedia to antmedia_back.

    The next step is to download this renamed backup copy so you can transfer it to the newer server. There are various ways to achieve this.

    It’s important to note that you must first install Ant Media server on the new server on which the restoration of the backup copy is to be made.

    To restore Ant Media configurations, you need to upload the backup copy to /usr/local/ directory path. This means that you will have to delete the existing antmedia directory that came with the new installation and replace it with the backup directory, renaming it back to its default (antmedia):

    /usr/local/antmedi

    After the transfer is complete, fix the file permissions by running this command:

    chown -R antmedia:antmedia /usr/local/antmedia/

    Finally, you can restart Ant Media using this command:

    systemctl restart antmedia
    See less
  19. This answer was edited.

    You can use the Publisher IP Filter feature as an added layer of security. This means that whoever has your streamID token can't push in their own streams on the server. So, only whitelisted IP addresses can publish live streams on the server. The Publisher IP Filter can be configured through the apRead more

    You can use the Publisher IP Filter feature as an added layer of security. This means that whoever has your streamID token can’t push in their own streams on the server. So, only whitelisted IP addresses can publish live streams on the server.

    The Publisher IP Filter can be configured through the application’s advanced settings in the Ant Media web panel.

    allowedPublisherCIDR=10.20.30.40/24,127.0.0.1

    To prevent third-party sites from embedding your streams, then you can use the Nginx reverse Proxy configuration.

     

    See less
  20. Yes, adding overlays is possible by using plugins like the filter plugin. However, you need to have an Ant Media enterprise edition as the free community edition won't work. In case you have the enterprise edition, the filter plugin can be used to add a stream over another one as an overlay. curl -iRead more

    Yes, adding overlays is possible by using plugins like the filter plugin. However, you need to have an Ant Media enterprise edition as the free community edition won’t work.

    In case you have the enterprise edition, the filter plugin can be used to add a stream over another one as an overlay.

    curl -i -X POST -H "Accept: Application/json" -H "Content-Type: application/json" "http://localhost:5080/WebRTCAppEE/rest/v2/filters/create" -d '{"filterId":"overlaydemo","inputStreams":["stream1","stream2"],"outputStreams":["test"],"videoFilter":"[in0]scale=240:160[s0];[in1][s0]overlay[out0]","audioFilter":"[in0][in1]amix=inputs=2[out0]","videoEnabled":"true","audioEnabled":"true","type":"asynchronous"}'
    
    

    You can learn more about the Ant Media filter plugin here 

    If you don’t want to use the filter plugin, you can use the Stamp plugin, which shows Custom User Interface or dynamically add video overlays to live streams using Text, XML, CSV, and RSS files.

    Keep in mind that all these plugins require the Ant Media Enterprise edition license to be able to use them.

    See less
  21. This answer was edited.

    Contabo VPS servers are some of the most cheapest and affordable on the market. Contabo is a German company with Data centers located in the United States, Europe, Singapore, Japan, and Australia. Contabo Wins among all the other players because they have generous offers; See their VPS plans below aRead more

    Contabo VPS servers are some of the most cheapest and affordable on the market. Contabo is a German company with Data centers located in the United States, Europe, Singapore, Japan, and Australia.

    Contabo Wins among all the other players because they have generous offers; See their VPS plans below and you will be surprised:

     

    Contabo offers Windows & Linux instances

    Contabo has both Windows and Linux Servers and the choice is in your hand.

     

     

    If you’re planning to deploy a Linux server, you will only be charged for the hardware and not the software. This is because most Linux operating systems are open-source and free.

    On the other hand, they charge an extra fee if you want to deploy a Windows server. See below:

    When ordering for a VPS, they will charge you a one-time setup fee. This fee is charged once and it’s not recurring.

     

    Contabo’s Billing Cycles and the Setup fees

    Let’s say you would like to purchase the starting  Cloud VPS 1 (CPU 4 vCPU Cores | RAM
    6 GB RAM | STORAGE 100 GB NVMe | or 400 GB SSD | SNAPSHOT
    1 Snapshot),

    Here is a breakdown of the various billing cycles Contabo offers:

    • Monthly Billing cycle: This means that you will be paying the VPS costs per month. The monthly fee is $5.50 and the one-time setup fee is $7.50, bringing the total to $13.00 for the first month. But the next months after the first one, they will charge you 5.50 per month without any more 7.50-setup fee again.

     

    • 3-Months Billing cycle: If you select this, you will be charged 3 x $5.50 and
      $5.60 ($7.50) setup fee, bringing the total to $22.10 for the first 3 months. Then the next billing total will only be $16.5 or (3 x $5.50).

     

    • 6-Months Billing Cycle: If you go with this, they will charge you ($5.50 x 6) and $3.75 (7.50) for the setup fee, bringing the total for the first 6 months to $36.75. After the first 6 months, you will only be charged $33 without the setup fee.

     

    • 1-Year Billing cycle: You will be charged $5.50 x 6 without the setup fee, bringing the total to just $66 for the entire year. In other words, if you select the 12-month billing cycle, they won’t charge you the setup fee.

     

    Get started with Contabo here

     

    See less
  22. First, you will need to point your Domain to Contabo VPS server IP address. You can follow the steps we've already talked about here to help you achieve this After you've completed this step, you can now add your domain to Cloudflare by following the steps in this guide

    First, you will need to point your Domain to Contabo VPS server IP address. You can follow the steps we’ve already talked about here to help you achieve this

    After you’ve completed this step, you can now add your domain to Cloudflare by following the steps in this guide

    See less
  23. This answer was edited.

    First, you need to log into both your Contabo and Namecheap accounts. Inside Contabo, you need to scroll down to DNS Zone Management.   Add the domain you purchased from Namecheap and also select the IP address from the dropdown: Hit Create Zone and you will be redirected to a page that looks lRead more

    First, you need to log into both your Contabo and Namecheap accounts.

    Inside Contabo, you need to scroll down to DNS Zone Management.

     

    Add the domain you purchased from Namecheap and also select the IP address from the dropdown:

    Hit Create Zone and you will be redirected to a page that looks like this:

    In most cases, the primary DNS records you need are automatically created for you. Now, you will need to extract the Contabo Nameservers, which usually are:

    • ns1.contabo.net
    • ns2.contabo.net
    • ns3.contabo.net

    Configure Custom Nameservers in Namecheap

    Now, go to your Namecheap account and find your domain. Click on Manage

    You will be taken to a different page. From here, you need to scroll down and find the Nameserver section

    Click the dropdown and select Custom Nameservers. Then put the nameservers you got from Contabo

     

    That is it! If you need a detailed explanation of this guide, read: How to Point a Domain Name from Namecheap to Contabo VPS

    See less
  24. Have you tried using the dd command? You can use the dd command in Linux to create a disk image of your existing Ubuntu server and then restore it to another hardware you want. The basic syntax of the dd command is as follows: dd if=input_file of=output_file bs=block_size The above syntax is what yoRead more

    Have you tried using the dd command?

    You can use the dd command in Linux to create a disk image of your existing Ubuntu server and then restore it to another hardware you want.

    The basic syntax of the dd command is as follows:

    dd if=input_file of=output_file bs=block_size

    The above syntax is what you need to use while using the dd command. Let’s try to break it down:

    • if=input_file

    This part specifies the input file (if stands for “input file”). You replace input_file with the path to the file you want to copy from. This could be a regular file, a device (like a hard drive or partition), or even a special file representing a system resource.

    Let’s say you want to copy the entire partition on which Ubuntu is installed, you will need to identify the right disk image as the input. In Linux, disk images are located under the /dev directory. For example:

    /dev/sda: Represents the first SCSI or SATA disk in the system.

    /dev/sdb: Represents the second SCSI or SATA disk.

    /dev/sdX1, /dev/sdX2, etc.: Represent partitions on a disk, where “X” is the disk identifier.

     

    • of=output_file:

    This part specifies the output file (of stands for “output file”). You replace output_file with the path where you want to save the copied data. If the file does not exist, dd will create it. If it does exist, dd will overwrite it unless you use additional options to control this behavior.

    In the following example, /dev/sda is a block device representing a physical disk. dd reads data from this disk and writes it to the specified output file (output.img).

    sudo dd if=/dev/sda of=output.img bs=4M status=progress

    To understand in detail: you can read: How to use the dd command to clone an Ubuntu Server

     

     

    See less
  25. Wanting to do a request based on time can be tricky in DynamoDB. One way to do it is to use a GSI where you place a static value as partition key, and date as the sort key: GSIPK GSISK Data 1 2022-03-05T12:00:000Z some data 1 2023-02-06T13:00:000Z some data 1 2024-03-07T14:00:000Z some data 1 2024-0Read more

    Wanting to do a request based on time can be tricky in DynamoDB. One way to do it is to use a GSI where you place a static value as partition key, and date as the sort key:
    GSIPK GSISK Data
    1 2022-03-05T12:00:000Z some data
    1 2023-02-06T13:00:000Z some data
    1 2024-03-07T14:00:000Z some data
    1 2024-04-08T15:00:000Z some data

    Now when you do a Query for all of the items since Jan 2024:

    SELECT * FROM myTable.myGsi WHERE GSIPK=1 AND GSISK BETWEEN '2024-01-01T00:00:000Z' AND '2024-04-10T14:00:000Z'

    See less
  26. This sounds like it should work fine, but here are my steps for creating the same setup. Launch an EC2 instance. Attach appropriate security groups. I'm assuming that your security groups on the EC2 instance look something like this: This will allow inbound connections on ports 22 (SSH), 80 (HTTP) aRead more

    This sounds like it should work fine, but here are my steps for creating the same setup.
    1. Launch an EC2 instance.
    2. Attach appropriate security groups. I’m assuming that your security groups on the EC2 instance look something like this:

    enter image description here

    This will allow inbound connections on ports 22 (SSH), 80 (HTTP) and 443 (HTTPS) from any external IP.

    1. Create a SSH connection to the EC2 instance. Next few steps are done via the SSH connection.
    2. sudo apt update and sudo apt install docker.io.
    3. Launch container:
    docker run -p 80:80 \
        -e '[email protected]' \
        -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
        -d dpage/pgadmin4
    
    1. Check that container is running.
    $ docker ps
    CONTAINER ID   IMAGE            COMMAND            CREATED         STATUS         PORTS                                        NAMES
    1bbf1925d84a   dpage/pgadmin4   "/entrypoint.sh"   8 minutes ago   Up 8 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   xenodochial_pike
    

    You should also check that the port mapping is correct. It should be 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp.

    1. Check for local connection.
    $ curl http://localhost
    <!doctype html>
    <html lang=en>
    <title>Redirecting...</title>
    <h1>Redirecting...</h1>
    <p>You should be redirected automatically to the target URL: <a href="/login?next=%2F">/login?next=%2F</a>. If not, click the link.
    
    $ curl http://127.0.0.1
    <!doctype html>
    <html lang=en>
    <title>Redirecting...</title>
    <h1>Redirecting...</h1>
    <p>You should be redirected automatically to the target URL: <a href="/login?next=%2F">/login?next=%2F</a>. If not, click the link.
    
    1. Check for remote connection. Try connecting from a browser on your local machine. The public IP for my test EC2 instance is 18.130.230.222, so I went to http://18.130.230.222.

    enter image description here

    See less
  27. This error can be fixed using the following: process.on('unhandledRejection', error => { throw error; });          

    This error can be fixed using the following:

    process.on('unhandledRejection', error => {
        throw error;
    });
    
    

     

     

     

     

     

    See less
  28. This answer was edited.

    Ant Media HLS and DASH streams can be secured by setting up Nginx reverse proxy and adding the following block in the configuration file: user nginx; worker_processes auto; pid /var/run/nginx.pid; worker_rlimit_nofile 1048576; events { worker_connections 1048576; multi_accept on; use epoll; } http {Read more

    Ant Media HLS and DASH streams can be secured by setting up Nginx reverse proxy and adding the following block in the configuration file:

      user nginx;
    worker_processes auto;
    pid /var/run/nginx.pid;
    worker_rlimit_nofile 1048576;
    
    events {
        worker_connections 1048576;
        multi_accept on;
        use epoll;
    }
    
    http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        server_tokens off;
        keepalive_timeout 300s;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
    
        # ssl settings
        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
    
        # logs settings
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"'
                          '"$hostname" "upstream: $upstream_addr"';
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
    
        # gzip
        gzip on;
        gzip_disable "msie6";
        gzip_http_version 1.1;
        gzip_comp_level 6;
        gzip_types text/plain text/css application/json application/javascript text/javascript application/x-javascript text/xml application/xml application/xml+rss application/vnd.ms-fontobject application/x-font-ttf font/opentype font/x-woff image/svg+xml image/x-icon;
    
        # proxy settings
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_read_timeout 10s;
        proxy_send_timeout 10s;
        proxy_connect_timeout 10s;
         
        #redirect all http requests to https
        server {
            listen 80 default_server;
            server_name _;
            return 301 https://$host$request_uri;
        }  
    
        #Origin Configuration
        #Change {YOUR_DOMAIN} with your fully qualified domain name. 
        server {
                listen 443 ssl;
                ssl_certificate /etc/letsencrypt/live/{YOUR_DOMAIN}/fullchain.pem;
                ssl_certificate_key /etc/letsencrypt/live/{YOUR_DOMAIN}/privkey.pem;
                server_name yourdomain.com;
    
                location / {
                  if ($http_referer !~* "^https?://(www\.)?Whitelisted-domain-name\.com"){
                  return 403;
            }
                    proxy_pass http://AMS-server-IP:5080;
                    proxy_http_version 1.1;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $host;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "Upgrade";
                }
            }
        
        #Dashboard Configuration (To allow access to your AMS dashboard on different port which should be allowed only for specific IPs)
        #Change {YOUR_DOMAIN} with your fully qualified domain name. 
        server {
                listen 4444 ssl;
                ssl_certificate /etc/letsencrypt/live/{YOUR_DOMAIN}/fullchain.pem;
                ssl_certificate_key /etc/letsencrypt/live/{YOUR_DOMAIN}/privkey.pem;
                server_name yourdomain.com;
    
                location / {
                    proxy_pass http://AMS-Server-IP:5080;
                    proxy_http_version 1.1;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $host;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "Upgrade";
                }
            }
        }

    From the above, you will have to find the following block and insert your Whitelisted-domain-name 

       location / {
              if ($http_referer !~* "^https?://(www\.)?Whitelisted-domain-name\.com"){
              return 403;
        }

    To understand the full implementation of this method, you need to read this step-by-step guide on this topic

     

    See less
  29. This answer was edited.

    Port forwarding in Ant Media Server is usually necessary if you activate the firewall. If you just installed Ant Media without triggering the firewall, then port forwarding is not necessary. Reading more about Ant Media port forwading

    Port forwarding in Ant Media Server is usually necessary if you activate the firewall. If you just installed Ant Media without triggering the firewall, then port forwarding is not necessary.

    Reading more about Ant Media port forwading

    See less
  30. You can test apache syntax error by running the following command: sudo apachectl configtest Alternatively, the systemctl status command can also work for  you: systemctl status apache2 Here is a well example article you can read about testing apache syntax errors.      

    You can test apache syntax error by running the following command:

    sudo apachectl configtest

    Alternatively, the systemctl status command can also work for  you:

    systemctl status apache2

    Here is a well example article you can read about testing apache syntax errors.

     

     

     

    See less