<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: skiffer-git</title>
    <description>The latest articles on Forem by skiffer-git (@openim-sk).</description>
    <link>https://forem.com/openim-sk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1192585%2Fa25082dc-c995-48ff-af8b-7c83a804d08a.png</url>
      <title>Forem: skiffer-git</title>
      <link>https://forem.com/openim-sk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/openim-sk"/>
    <language>en</language>
    <item>
      <title># Reflection and Continuous Improvement - Release v3.7 of the Open Source Instant Messaging (IM) Project OpenIM</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Fri, 26 Apr 2024 12:34:58 +0000</pubDate>
      <link>https://forem.com/openim-sk/-reflection-and-continuous-improvement-release-v37-of-the-open-source-instant-messaging-im-project-openim-19o7</link>
      <guid>https://forem.com/openim-sk/-reflection-and-continuous-improvement-release-v37-of-the-open-source-instant-messaging-im-project-openim-19o7</guid>
      <description>&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;In the past, our team had a shallow understanding of open-source projects, overly prioritizing progress while neglecting the quality and standardization of code. This led to several issues, such as poorly designed deployment processes: complex, non-standard processes, and clear defects in Mac and Windows deployments. These issues not only troubled developers but also increased the difficulty of community maintenance.&lt;/p&gt;

&lt;p&gt;In response to these challenges, our team has deeply reflected and identified related issues. Currently, we are focusing on improving code quality and standardization, and perfecting our open-source contribution process to attract more contributors. We believe these are key steps to expand the community's influence and develop OpenIM into a top-tier open-source project.&lt;/p&gt;

&lt;p&gt;To this end, we have planned the release of version v3.7, which will comprehensively overhaul aspects such as deployment, standardization, and processes, and is fully compatible with version 3.6 data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OpenIM
&lt;/h2&gt;

&lt;p&gt;OpenIM is different from independent chat applications like Telegram, Signal, and Rocket.Chat. These applications provide a complete user interface and backend services, allowing users to download and use directly. Conversely, OpenIM is an open-source instant messaging solution designed for developers, not providing a standalone chat application for direct installation and use.&lt;/p&gt;

&lt;p&gt;OpenIM primarily consists of the OpenIM SDK and OpenIM Server, providing developers with a set of tools and services that enable easy integration of instant messaging features into their applications, including sending and receiving messages, user management, group management, etc.&lt;/p&gt;

&lt;p&gt;Overall, OpenIM is designed for developers, offering the necessary tools and frameworks to implement efficient instant messaging solutions in their own applications, rather than serving as an independent chat application for general users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jg1f9u2h9bf4n4zcbxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jg1f9u2h9bf4n4zcbxa.png" alt="Image description" width="800" height="846"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features of release-v3.7
&lt;/h2&gt;

&lt;p&gt;Here is the information from the table rewritten in a non-tabular format:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introducing Mage Build&lt;/strong&gt; - The team has discarded Shell scripts in favor of adopting the Mage build system. This new system supports various operating systems such as Linux, Windows, and Mac, as well as ARM and AMD CPU architectures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration File Splitting&lt;/strong&gt; - The global configuration file has been split into modular configurations. This change achieves module isolation and reduces system coupling, streamlining the configuration process.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unified RPC Entry Functions&lt;/strong&gt; - RPC entry functions have been standardized. This includes standardizing log records and ensuring that version numbers are clearly displayed, enhancing clarity and maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asynchronous Notification and Webhook Handling&lt;/strong&gt; - Notifications and Webhooks are now handled through an internal asynchronous queue. This approach decouples them from the main process, improving the system's efficiency and responsiveness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upgraded Docker Deployment Solution&lt;/strong&gt; - The Docker deployment solution has undergone a comprehensive upgrade. It now adheres to the principle of image independence, eliminates dependency on external network configurations, and supports multi-platform deployment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strict Code Standard Enforcement&lt;/strong&gt; - There is a strong emphasis on standardized error handling and log recording. The team also strictly adheres to Go programming standards to maintain high code quality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Common Code Extraction&lt;/strong&gt; - Common modules from various projects have been extracted into a tools repository. This allows for independent configuration of parameters and easy reuse across different projects, simplifying development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Replacing protoc with Official Tools&lt;/strong&gt; - The IM's pb generation tool has been changed from a custom version to the official version. Scripts have been used to address the issue of API response field loss caused by the omitempty setting, ensuring more robust and reliable API interactions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  About Us
&lt;/h2&gt;

&lt;p&gt;Thanks to widespread developer support, OpenIM maintains a leading position in the open-source instant messaging (IM) field, currently exceeding 13k stars on GitHub. In today's era where data and privacy security are increasingly valued, the demand for privately deployed IM is gradually increasing, closely related to the rise of the domestic software industry. Particularly in the government and corporate sectors, as information technology rapidly develops and innovative industries are widely applied, the demand for IM is rapidly growing. Additionally, with the ongoing expansion of the collaborative software market, "secure and controllable" has become one of the most crucial requirements. In the post-AIGC era, IM, as the primary interface for human-machine interaction, will inevitably become increasingly valuable. We look forward to OpenIM playing a greater role in the post-AIGC era, enabling every application to integrate OpenIM to enhance overall efficiency and security.&lt;/p&gt;

&lt;p&gt;github: &lt;a href="https://github.com/openimsdk"&gt;https://github.com/openimsdk&lt;/a&gt;&lt;br&gt;
developer: &lt;a href="https://docs.openim.io/zh-Hans/"&gt;https://docs.openim.io/zh-Hans/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6lyv0u4857fbmkh3upn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6lyv0u4857fbmkh3upn.jpg" alt="Image description" width="800" height="756"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>OpenIM （Open-Source Instant Messaging） Mac Deployment Guide</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Fri, 26 Jan 2024 06:11:29 +0000</pubDate>
      <link>https://forem.com/openim-sk/openim-open-source-instant-messaging-mac-deployment-guide-11n9</link>
      <guid>https://forem.com/openim-sk/openim-open-source-instant-messaging-mac-deployment-guide-11n9</guid>
      <description>&lt;p&gt;This guide provides step-by-step instructions for deploying OpenIM on a Mac, including both source code and Docker deployment methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preliminary Environment Setup
&lt;/h2&gt;

&lt;p&gt;Ensure a clean working environment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a New Directory&lt;/strong&gt;: Start in a new directory to prevent conflicts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for Conflicting Processes&lt;/strong&gt;: Run these commands:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ps -ef | grep openim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps -ef | grep chat&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check Docker Containers&lt;/strong&gt;: Use &lt;code&gt;docker ps&lt;/code&gt; to confirm no related containers are running.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Source Code Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Deploying openim-server
&lt;/h3&gt;

&lt;p&gt;Deploying from source requires adjusting Docker's network configurations for Mac.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone and Prepare the Repository&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;clone&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//github.com/openimsdk/open-im-server&lt;/span&gt;
   &lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;im&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;
   &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="nx"&gt;OPENIM_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[Your External/Internal IP]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Kafka in &lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Replace:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;KAFKA_CFG_ADVERTISED_LISTENERS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;PLAINTEXT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//kafka:9092,EXTERNAL://${DOCKER_BRIDGE_GATEWAY:-172.28.0.1}:${KAFKA_PORT:-19094}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;With:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;KAFKA_CFG_ADVERTISED_LISTENERS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;PLAINTEXT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//kafka:9092,EXTERNAL://127.0.0.1:${KAFKA_PORT:-19094}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start the Service&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt; &lt;span class="nx"&gt;up&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Final Configurations&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;vim&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yaml&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%s/172&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;.28&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;.0&lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;.1/127.0.0.1/g&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wq&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Launch openim-server&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verification&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait five minutes before checking to ensure accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploying openim-chat
&lt;/h3&gt;

&lt;p&gt;Deploy openim-chat using source code or Docker.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Return to Parent Directory&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="p"&gt;..&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy from Source&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;clone&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//github.com/openimsdk/chat&lt;/span&gt;
   &lt;span class="nx"&gt;cd&lt;/span&gt; &lt;span class="nx"&gt;chat&lt;/span&gt;
   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set Up MySQL&lt;/strong&gt; (if not already deployed):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="nx"&gt;mysql&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;13306&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3306&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="mi"&gt;23306&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;33060&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$(pwd)/components/mysql/data:/var/lib/mysql&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/etc/localtime:/etc/localtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="nx"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openIM123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;restart&lt;/span&gt; &lt;span class="nx"&gt;always&lt;/span&gt; &lt;span class="o"&gt;\&lt;/span&gt;
     &lt;span class="nx"&gt;mariadb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;10.6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configure openim-chat&lt;/strong&gt;:&lt;br&gt;
Modify &lt;code&gt;config/config.yaml&lt;/code&gt;, replacing &lt;code&gt;172.28.0.1&lt;/code&gt; with &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start openim-chat&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verification&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nx"&gt;make&lt;/span&gt; &lt;span class="nx"&gt;check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Web Interface Access&lt;/strong&gt;:
Visit &lt;a href="http://127.0.0.1:11001"&gt;http://127.0.0.1:11001&lt;/a&gt;. For validation, see &lt;a href="https://docs.openim.io/guides/gettingStarted/quickTestServer"&gt;this guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Docker Deployment
&lt;/h2&gt;

&lt;p&gt;For Docker deployment on Mac, refer to &lt;a href="https://docs.openim.io/zh-Hans/guides/gettingStarted/dockerCompose"&gt;OpenIM Docker Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  About OpenIM
&lt;/h2&gt;

&lt;p&gt;OpenIM is an open-source instant messaging component and solution that specializes in in-app communication. It is one of the most popular open-source IM projects currently. Developers can integrate the OpenIM component and deploy the server privately, quickly incorporating instant and real-time communication capabilities into their applications, ensuring the security and confidentiality of business data.&lt;/p&gt;

&lt;p&gt;Repository address: &lt;a href="https://github.com/openimsdk"&gt;https://github.com/openimsdk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developer Documentation: &lt;a href="https://docs.openim.io/guides/introduction"&gt;https://docs.openim.io/guides/introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj92w8ifcetqm158066us.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj92w8ifcetqm158066us.jpg" alt="Image description" width="800" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>chatgpt</category>
      <category>im</category>
    </item>
    <item>
      <title>Nginx Domain Configuration for OpenIM (Open Source Instant Messaging)</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Fri, 19 Jan 2024 07:11:28 +0000</pubDate>
      <link>https://forem.com/openim-sk/nginx-domain-configuration-for-openim-open-source-instant-messaging-2372</link>
      <guid>https://forem.com/openim-sk/nginx-domain-configuration-for-openim-open-source-instant-messaging-2372</guid>
      <description>&lt;p&gt;OpenIM is an open-source instant messaging component and solution that specializes in in-app communication. It is one of the most popular open-source IM projects currently. Developers can integrate the OpenIM component and deploy the server privately, quickly incorporating instant and real-time communication capabilities into their applications, ensuring the security and confidentiality of business data.&lt;/p&gt;

&lt;p&gt;Repository address: &lt;a href="https://github.com/openimsdk" rel="noopener noreferrer"&gt;https://github.com/openimsdk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developer Documentation: &lt;a href="https://docs.openim.io/guides/introduction" rel="noopener noreferrer"&gt;https://docs.openim.io/guides/introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu9jvcqtnmp3hikwrs5q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu9jvcqtnmp3hikwrs5q.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Successful startup of open-im-server and chat (configuration of minio in open-im-server needs to be changed, refer to Step 3)&lt;/li&gt;
&lt;li&gt;Successful installation of Nginx (including SSL module)&lt;/li&gt;
&lt;li&gt;Successful application for two SSL certificates: &lt;code&gt;test-web.rentsoft.cn&lt;/code&gt;, &lt;code&gt;test-admin.rentsoft.cn&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ports 443 and 80 are open&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Domain Configuration Reference
&lt;/h2&gt;

&lt;p&gt;Taking the Nginx installation directory &lt;code&gt;/usr/local&lt;/code&gt; as an example, create a &lt;code&gt;config.conf&lt;/code&gt; file in the &lt;code&gt;/usr/local/nginx&lt;/code&gt; directory, paste the following template into the &lt;code&gt;/usr/local/nginx/config.conf&lt;/code&gt; file, and import the newly created &lt;code&gt;config.conf&lt;/code&gt; file into the general configuration file &lt;code&gt;/usr/local/nginx/nginx.conf&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt; Pay attention to replacing the domain names, SSL certificate paths, and SSL keys in the domain configuration template.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;#open-im-server chat Corresponding deployment address and port&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;msg_gateway&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#IM Message server address Multiple can be specified according to the deployment&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;im_api&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#IM Group user api server address Multiple can be specified according to the deployment&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10002&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;im_chat_api&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#IM Business version login registration server address Multiple can be specified according to the deployment&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10008&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;im_admin_api&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#IM The admin address of the commercial version can specify multiple units according to the deployment situation&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10009&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;minio_s3_2&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#Minio address can be assigned to multiple modules depending on deployment&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10005&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;pc_web&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#PC web address can be validate&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;openim_admin&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;#Admin backend address can be used for validation&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="nf"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11002&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Take the domain name "test-web.rentsoft.cn" for example&lt;/span&gt;
&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt;       &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;#Listening on port 443&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt;  &lt;span class="s"&gt;test-web.rentsoft.cn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;#Your domain name&lt;/span&gt;
    &lt;span class="kn"&gt;ssl&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;#Path of pem file for ssl certificate&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/usr/local/nginx/conf/ssh/test-web.rentsoft.cn_bundle.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;#Key file path of ssl certificate&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/usr/local/nginx/conf/ssh/test-web.rentsoft.cn.key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;gzip&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_min_length&lt;/span&gt; &lt;span class="mi"&gt;1k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_buffers&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="mi"&gt;16k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_comp_level&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_types&lt;/span&gt; &lt;span class="nc"&gt;text/plain&lt;/span&gt; &lt;span class="nc"&gt;application/javascript&lt;/span&gt; &lt;span class="nc"&gt;application/x-javascript&lt;/span&gt; &lt;span class="nc"&gt;text/css&lt;/span&gt; &lt;span class="nc"&gt;application/xml&lt;/span&gt; &lt;span class="nc"&gt;text/javascript&lt;/span&gt; &lt;span class="nc"&gt;application/x-httpd-php&lt;/span&gt; &lt;span class="nc"&gt;image/jpeg&lt;/span&gt; &lt;span class="nc"&gt;image/gif&lt;/span&gt; &lt;span class="nc"&gt;image/png&lt;/span&gt; &lt;span class="nc"&gt;application/wasm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_vary&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_disable&lt;/span&gt; &lt;span class="s"&gt;"MSIE&lt;/span&gt; &lt;span class="s"&gt;[1-6]&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="nc"&gt;application/wasm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://pc_web/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/msg_gateway&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://msg_gateway/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/api/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://im_api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/chat/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://im_chat_api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/im-minio-api/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_connect_timeout&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;chunked_transfer_encoding&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://minio_s3_2/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Take the domain name "test-admin.rentsoft.cn" for example&lt;/span&gt;
&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt;       &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;#listening port&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt;  &lt;span class="s"&gt;test-admin.rentsoft.cn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;#Your domain server_name&lt;/span&gt;
    &lt;span class="kn"&gt;ssl&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;#Path of pem file for ssl certificate&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/usr/local/nginx/conf/ssh/test-admin.rentsoft.cn_bundle.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;#Key file path of ssl certificate&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/usr/local/nginx/conf/ssh/test-admin.rentsoft.cn.key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;gzip&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_min_length&lt;/span&gt; &lt;span class="mi"&gt;1k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_buffers&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="mi"&gt;16k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_comp_level&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_types&lt;/span&gt; &lt;span class="nc"&gt;text/plain&lt;/span&gt; &lt;span class="nc"&gt;application/javascript&lt;/span&gt; &lt;span class="nc"&gt;application/x-javascript&lt;/span&gt; &lt;span class="nc"&gt;text/css&lt;/span&gt; &lt;span class="nc"&gt;application/xml&lt;/span&gt; &lt;span class="nc"&gt;text/javascript&lt;/span&gt; &lt;span class="nc"&gt;application/x-httpd-php&lt;/span&gt; &lt;span class="nc"&gt;image/jpeg&lt;/span&gt; &lt;span class="nc"&gt;image/gif&lt;/span&gt; &lt;span class="nc"&gt;image/png&lt;/span&gt; &lt;span class="nc"&gt;application/wasm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_vary&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_disable&lt;/span&gt; &lt;span class="s"&gt;"MSIE&lt;/span&gt; &lt;span class="s"&gt;[1-6]&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="nc"&gt;application/wasm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://openim_admin/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/msg_gateway&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://msg_gateway/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/api/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://im_api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/chat/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://im_chat_api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;^~/complete_admin/&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"Upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-real-ip&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://im_admin_api/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Redirection from HTTP to HTTPS&lt;/span&gt;
&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;test-web.rentsoft.cn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;rewrite&lt;/span&gt; &lt;span class="s"&gt;^(.*)&lt;/span&gt;$ &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$1&lt;/span&gt; &lt;span class="s"&gt;permanent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Minio Configuration
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;open-im-server/config/config.yaml&lt;/code&gt;, modify the corresponding Minio content, and restart open-im-server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# YAML configuration here...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Starting Nginx
&lt;/h2&gt;

&lt;p&gt;Navigate to the &lt;code&gt;/usr/local/nginx/sbin&lt;/code&gt; directory and execute the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./nginx &lt;span class="nt"&gt;-s&lt;/span&gt; reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Using the Corresponding Domain Names for Login Verification
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;IM: &lt;code&gt;test-web.rentsoft.cn&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Admin Backend: &lt;code&gt;test-admin.rentsoft.cn&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>OpenIMSDK: Universal In-App Communication Solution for All Platforms</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Wed, 17 Jan 2024 03:44:03 +0000</pubDate>
      <link>https://forem.com/openim-sk/openimsdk-universal-in-app-communication-solution-for-all-platforms-5ahi</link>
      <guid>https://forem.com/openim-sk/openimsdk-universal-in-app-communication-solution-for-all-platforms-5ahi</guid>
      <description>&lt;p&gt;From the day &lt;strong&gt;OpenIM&lt;/strong&gt; was founded, we have always believed in "open source" as the core driving force. This not only reflects the internet's ideals of freedom, equality, and sharing but also addresses global data security challenges.&lt;/p&gt;

&lt;p&gt;Issues such as data breaches, ransomware, and privacy invasions constantly remind us of the importance of security. Therefore, we offer a cost-effective and secure IM service to meet the data protection needs of enterprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenIMSDK
&lt;/h2&gt;

&lt;p&gt;With this SDK, you can add instant messaging capabilities to your application. By connecting to a self-hosted &lt;strong&gt;OpenIMServer&lt;/strong&gt; server, you can easily integrate instant messaging functions into your app with just a few lines of code.&lt;/p&gt;

&lt;p&gt;The core functionality of OpenIMSDK is implemented based on &lt;strong&gt;&lt;a href="https://github.com/openimsdk/openim-sdk-core"&gt;open-im-sdk-core&lt;/a&gt;&lt;/strong&gt;. Here are its details on different platforms:&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS Integration&lt;a href="https://docs.openim.io/sdks/introduction#ios-integration"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool&lt;/strong&gt;: gomobile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output File&lt;/strong&gt;: XCFramework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt;: iOS interacts with the SDK through JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: The SDK offers a re-wrapped API for easier integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Storage&lt;/strong&gt;: iOS utilizes the SQLite layer provided internally by the SDK&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Android Integration&lt;a href="https://docs.openim.io/sdks/introduction#android-integration"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool&lt;/strong&gt;: gomobile&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output File&lt;/strong&gt;: AAR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt;: Android interacts with the SDK through JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: The SDK offers a re-wrapped API for easier integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Storage&lt;/strong&gt;: Android utilizes the SQLite layer provided internally by the SDK&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Web Integration&lt;a href="https://docs.openim.io/sdks/introduction#web-integration"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: Go&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features&lt;/strong&gt;: Uses Go's WebAssembly support to compile into wasm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction&lt;/strong&gt;: Web pages interact with the SDK via JSON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: The SDK offers a re-wrapped API for easier integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Storage&lt;/strong&gt;: JavaScript employs &lt;a href="https://sql.js.org/"&gt;sql.js&lt;/a&gt; to virtualize SQLite and store it in IndexedDB to handle SQL logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Client SDK and Demos&lt;a href="https://docs.openim.io/sdks/introduction#client-sdk-and-demos"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform/Language&lt;/th&gt;
&lt;th&gt;SDK Resource Link&lt;/th&gt;
&lt;th&gt;SDK Description&lt;/th&gt;
&lt;th&gt;Demo Resource Link&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Golang&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-core"&gt;open-im-sdk-core&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Golang version SDK, implemented with Gomobile/wasm/cgo&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;iOS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-ios"&gt;open-im-sdk-ios&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;iOS version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-ios-demo"&gt;open-im-ios-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;iOS Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-android"&gt;open-im-sdk-android&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Android version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-android-demo"&gt;open-im-android-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Android Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flutter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-flutter"&gt;open-im-sdk-flutter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Flutter version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-flutter-demo"&gt;open-im-flutter-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Flutter Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;uni-app&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-uniapp"&gt;open-im-sdk-uniapp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uni-app version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-uniapp-demo"&gt;open-im-uniapp-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uni-app Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JS SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-web-wasm"&gt;open-im-sdk-web-wasm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JS SDK version&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/openim-electron-demo"&gt;open-im-pc-web-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Electron Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;React Native&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-reactnative"&gt;open-im-sdk-reactnative&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;React Native SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/openim-reactnative-demo"&gt;open-im-reactnative-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;React Native Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
    </item>
    <item>
      <title>🛠 OpenIM Open Source Instant Messaging Project Docker Compose Deployment Guide</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Tue, 16 Jan 2024 08:09:40 +0000</pubDate>
      <link>https://forem.com/openim-sk/openim-open-source-instant-messaging-project-docker-compose-deployment-guide-aa</link>
      <guid>https://forem.com/openim-sk/openim-open-source-instant-messaging-project-docker-compose-deployment-guide-aa</guid>
      <description>&lt;p&gt;The deployment of OpenIM involves multiple components and supports various methods including source code, Docker, and Kubernetes. This requires ensuring compatibility between different deployment methods and effectively managing differences between versions. This is undoubtedly a complex task involving technical depth and precise system configuration. We are committed to simplifying the deployment process while ensuring the system's flexibility and stability, to meet the needs of various users. Currently, in version 3.5, we have simplified the deployment process and will provide long-term maintenance for this version, looking forward to your user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Environment and Component Requirements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌐 Environmental Requirements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;th&gt;Detailed Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating System&lt;/td&gt;
&lt;td&gt;Linux system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware Resources&lt;/td&gt;
&lt;td&gt;At least 4GB available memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Golang&lt;/td&gt;
&lt;td&gt;v1.19 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;v24.0.5 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;td&gt;v2.17.1 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  💾 Storage Component Requirements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Storage Component&lt;/th&gt;
&lt;th&gt;Recommended Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;v6.0.2 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis&lt;/td&gt;
&lt;td&gt;v7.0.0 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zookeeper&lt;/td&gt;
&lt;td&gt;v3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kafka&lt;/td&gt;
&lt;td&gt;v3.5.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;v5.7 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinIO&lt;/td&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Docker Deployment
&lt;/h2&gt;

&lt;h2&gt;
  
  
  2.1 Clone Repository and Initialize
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;clone&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//github.com/openimsdk/openim-docker openim-docker &amp;amp;&amp;amp; cd openim-docker &amp;amp;&amp;amp; make init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2.2 Set OPENIM_IP
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;If&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;external&lt;/span&gt; &lt;span class="nx"&gt;IP&lt;/span&gt; 
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="nx"&gt;OPENIM_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;external IP&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;If&lt;/span&gt; &lt;span class="nx"&gt;only&lt;/span&gt; &lt;span class="nx"&gt;providing&lt;/span&gt; &lt;span class="nx"&gt;internal&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="nx"&gt;OPENIM_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;internal IP&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2.3 Start Services and View Logs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt; &lt;span class="nx"&gt;up&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;
&lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;ps&lt;/span&gt;
&lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="nx"&gt;openim&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;
&lt;span class="nx"&gt;docker&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="nx"&gt;openim&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Quick Verification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📡 Open Ports
&lt;/h3&gt;

&lt;h4&gt;
  
  
  IM Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10001&lt;/td&gt;
&lt;td&gt;ws protocol, message port, for client SDK&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10002&lt;/td&gt;
&lt;td&gt;api port, such as user, friend, group, message, etc.&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10005&lt;/td&gt;
&lt;td&gt;Needed when choosing MinIO storage (OpenIM defaults to MinIO storage)&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Chat Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10008&lt;/td&gt;
&lt;td&gt;Business system, such as registration, login, etc.&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10009&lt;/td&gt;
&lt;td&gt;Management backend, such as statistics, banning, etc.&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  PC Web and Management Backend Frontend Resource Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:11001&lt;/td&gt;
&lt;td&gt;PC Web frontend resources&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:11002&lt;/td&gt;
&lt;td&gt;Management backend frontend resources&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Grafana Port
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:13000&lt;/td&gt;
&lt;td&gt;grafana port&lt;/td&gt;
&lt;td&gt;Open Port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. Verification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PC Web Verification
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Enter &lt;code&gt;http://ip:11001&lt;/code&gt; in the browser to access PC Web. This IP should be the server's &lt;code&gt;OPENIM_IP&lt;/code&gt;, ensuring browser access. Please register via mobile phone for first-time use, the default verification code is &lt;code&gt;666666&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CVFQ1j7N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwfvatycbk1h75zdxn0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CVFQ1j7N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwfvatycbk1h75zdxn0f.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: PC Web Interface Example&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App Verification
&lt;/h3&gt;

&lt;p&gt;Scan the QR code below or click &lt;a href="https://www.pgyer.com/OpenIM-Flutter"&gt;here&lt;/a&gt; to download.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yy7pqq3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pgyer.com/app/qrcode/OpenIM-Flutter" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yy7pqq3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pgyer.com/app/qrcode/OpenIM-Flutter" alt="Download App" width="234" height="234"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image: App Download QR Code&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Double-click on OpenIM and modify the IP to the server's &lt;code&gt;OPENIM_IP&lt;/code&gt;, then restart the App. Please ensure relevant ports are open and restart the App after modification. Register via mobile phone for first-time use, the default verification code is &lt;code&gt;666666&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6ET43UNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pedyo0b7izpyv7nwpc9d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6ET43UNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pedyo0b7izpyv7nwpc9d.jpg" alt="Image description" width="800" height="1660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Server Address Modification - Step 1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;![Server Address Modification - Step 2]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6zx1MEfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/38jb9vyek1ts3ujnjnaz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6zx1MEfP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/38jb9vyek1ts3ujnjnaz.jpg" alt="Image description" width="800" height="1664"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Server Address Modification - Step 2&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. About Configuration Item Modifications
&lt;/h2&gt;

&lt;p&gt;This project has complex configuration items, mainly because some configurations involve &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;openim-chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt; files. The explanation for modifying configuration items is divided into two parts: modifications for shared configuration items and other configuration items.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Shared Configuration Items
&lt;/h3&gt;

&lt;p&gt;Shared configuration items in &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;openim-chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ports and passwords for mysql/mongo/redis/kafka/zookeeper/minio;&lt;/li&gt;
&lt;li&gt;SECRET;&lt;/li&gt;
&lt;li&gt;API_OPENIM_PORT;&lt;/li&gt;
&lt;li&gt;OPENIM_IP;&lt;/li&gt;
&lt;li&gt;MINIO_PORT;&lt;/li&gt;
&lt;li&gt;GRAFANA_PORT.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.2 Modification Methods
&lt;/h3&gt;

&lt;p&gt;For the shared configuration items in 5.1, choose one of the following two methods.&lt;/p&gt;

&lt;p&gt;Method One: Regenerate All Configurations&lt;/p&gt;

&lt;p&gt;If a comprehensive update is needed, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Delete existing configuration files: Remove &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;openim-chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt; files.&lt;/li&gt;
&lt;li&gt;Modify &lt;code&gt;.env&lt;/code&gt; file: Update related configuration items in the &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; file.&lt;/li&gt;
&lt;li&gt;Regenerate configurations and restart services: Execute &lt;strong&gt;&lt;code&gt;docker compose down ; docker compose up -d&lt;/code&gt;&lt;/strong&gt;. This will regenerate configuration files based on the new settings in the &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; file and restart the services.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Method Two: Modify Multiple Configuration Files Separately&lt;/p&gt;

&lt;p&gt;For partial updates, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Modify &lt;code&gt;.env&lt;/code&gt; file: Update related configuration items in the &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manually update configuration files: According to the modifications in the &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; file, update the corresponding configuration items in the &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;openim-chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt; files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Additional handling for special variables: If &lt;strong&gt;&lt;code&gt;OPENIM_IP&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;API_OPENIM_PORT&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;MINIO_PORT&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;GRAFANA_PORT&lt;/code&gt;&lt;/strong&gt; are modified, update the following configuration items in the &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;   &lt;span class="na"&gt;object&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;apiURL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://$OPENIM_IP:$API_OPENIM_PORT"&lt;/span&gt;
     &lt;span class="na"&gt;minio&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
       &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://$DOCKER_BRIDGE_GATEWAY:$MINIO_PORT"&lt;/span&gt;
       &lt;span class="na"&gt;signEndpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://$OPENIM_IP:$MINIO_PORT"&lt;/span&gt;

   &lt;span class="na"&gt;grafanaUrl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://$OPENIM_IP:$GRAFANA_PORT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Restart services: Execute &lt;strong&gt;&lt;code&gt;docker compose down ; docker compose up -d&lt;/code&gt;&lt;/strong&gt; to apply changes and restart services.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.3 Modifying Other Configuration Items
&lt;/h3&gt;

&lt;p&gt;For non-shared variables in &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;openim-chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, modify these configuration items directly in the respective files. Execute &lt;strong&gt;&lt;code&gt;docker compose down ; docker compose up -d&lt;/code&gt;&lt;/strong&gt; to apply changes and restart services.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❓ &lt;strong&gt;6. Frequently Asked Questions&lt;/strong&gt; 🧐
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. About Docker Version 🐋
&lt;/h3&gt;

&lt;p&gt;Newer versions of Docker have integrated docker-compose. Older versions of Docker may not support the gateway feature❌. We recommend upgrading to a newer version, such as &lt;code&gt;23.0.1&lt;/code&gt;🔝.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. About OpenIM
&lt;/h2&gt;

&lt;p&gt;Thanks to extensive developer support, OpenIM maintains a leading position in the open-source instant messaging (IM) field, with its GitHub stars surpassing 12,000. In the current context of increasing emphasis on data and privacy security, there is growing demand for IM private deployment, aligning with the rapid development trend of China's software industry. Especially in government and enterprise sectors, with the rapid development of information technology and widespread application of innovative industries, the demand for IM solutions has surged. Furthermore, the continuous expansion of the collaborative office software market has made "security and controllability" a key attribute.&lt;/p&gt;

&lt;p&gt;Repository address: &lt;a href="https://github.com/openimsdk"&gt;https://github.com/openimsdk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ0qzuTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gx5dq889t6ykr293rnzg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ0qzuTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gx5dq889t6ykr293rnzg.jpg" alt="Image description" width="800" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🛠 Open Source Instant Messaging (IM) Project OpenIM Source Code Deployment Guide</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Wed, 10 Jan 2024 07:32:23 +0000</pubDate>
      <link>https://forem.com/openim-sk/open-source-instant-messaging-im-project-openim-source-code-deployment-guide-hln</link>
      <guid>https://forem.com/openim-sk/open-source-instant-messaging-im-project-openim-source-code-deployment-guide-hln</guid>
      <description>&lt;p&gt;Deploying OpenIM involves multiple components and supports various methods, including source code, Docker, and Kubernetes. This requires ensuring compatibility between different deployment methods while effectively managing differences between versions. Indeed, these are complex issues involving in-depth technical details and precise system configurations. Our goal is to simplify the deployment process while maintaining the system's flexibility and stability to suit different users' needs. Currently, version 3.5 has simplified the deployment process, and this version will be maintained for a long time. We welcome everyone to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Environment and Component Requirements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌐 Environmental Requirements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;th&gt;Detailed Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Linux system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware&lt;/td&gt;
&lt;td&gt;At least 4GB of RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Golang&lt;/td&gt;
&lt;td&gt;v1.19 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;v24.0.5 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;td&gt;v2.17.1 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  💾 Storage Component Requirements
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Storage Component&lt;/th&gt;
&lt;th&gt;Recommended Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;v6.0.2 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redis&lt;/td&gt;
&lt;td&gt;v7.0.0 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zookeeper&lt;/td&gt;
&lt;td&gt;v3.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kafka&lt;/td&gt;
&lt;td&gt;v3.5.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQL&lt;/td&gt;
&lt;td&gt;v5.7 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MinIO&lt;/td&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Deploying OpenIM Server (IM)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 📡 Setting OPENIM_IP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# If the server has an external IP&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENIM_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"external IP"&lt;/span&gt;
&lt;span class="c"&gt;# If only providing internal network services&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;OPENIM_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"internal IP"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 🏗️ Deploying Components (mongodb/redis/zookeeper/kafka/MinIO, etc.)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/OpenIMSDK/open-im-server &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;open-im-server 
&lt;span class="c"&gt;# It's recommended to switch to release-v3.5 or later release branches &lt;/span&gt;
make init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 🛠️ Compilation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.4 🚀 Starting/Stopping/Checking
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start&lt;/span&gt;
make start
&lt;span class="c"&gt;# Stop&lt;/span&gt;
make stop
&lt;span class="c"&gt;# Check&lt;/span&gt;
make check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Deploying App Server (Chat)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 🏗️ Deploying Components (mysql)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Go back to the previous directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;span class="c"&gt;# Clone the repository, recommended to switch to release-v1.5 or later release branches&lt;/span&gt;
git clone https://github.com/OpenIMSDK/chat chat &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;chat
&lt;span class="c"&gt;# Deploy mysql&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mysql2 &lt;span class="nt"&gt;-p&lt;/span&gt; 13306:3306 &lt;span class="nt"&gt;-p&lt;/span&gt; 33306:33060 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/components/mysql/data:/var/lib/mysql"&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"/etc/localtime:/etc/localtime"&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"openIM123"&lt;/span&gt; &lt;span class="nt"&gt;--restart&lt;/span&gt; always mysql:5.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 🛠️ Compilation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make init
make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 🚀 Starting/Stopping/Checking
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start&lt;/span&gt;
make start
&lt;span class="c"&gt;# Stop&lt;/span&gt;
make stop
&lt;span class="c"&gt;# Check&lt;/span&gt;
make check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Quick Validation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📡 Open Ports
&lt;/h3&gt;

&lt;h4&gt;
  
  
  IM Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10001&lt;/td&gt;
&lt;td&gt;ws protocol, messaging port, for client SDK&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10002&lt;/td&gt;
&lt;td&gt;API port, like user, friend, group, message interfaces&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10005&lt;/td&gt;
&lt;td&gt;Required when choosing MinIO storage (OpenIM defaults to MinIO storage)&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Chat Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10008&lt;/td&gt;
&lt;td&gt;Business system, like registration, login, etc.&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:10009&lt;/td&gt;
&lt;td&gt;Management backend, like statistics, account banning, etc.&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  PC Web and Management Backend Frontend Resource Ports
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:11001&lt;/td&gt;
&lt;td&gt;PC Web frontend resources&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP:11002&lt;/td&gt;
&lt;td&gt;Management backend frontend resources&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  Grafana Port
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TCP Port&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TCP:13000&lt;/td&gt;
&lt;td&gt;Grafana port&lt;/td&gt;
&lt;td&gt;Allow port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PC Web Verification
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Enter &lt;code&gt;http://ip:11001&lt;/code&gt; in your browser to access the PC Web. This IP should be the server's &lt;code&gt;OPENIM_IP&lt;/code&gt; to ensure browser accessibility. For first-time use, please register using your mobile phone number, with the default verification code being &lt;code&gt;666666&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DoI6T_iA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7wt5wk7gfmshkq46a1bs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DoI6T_iA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7wt5wk7gfmshkq46a1bs.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: PC Web Interface Example&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App Verification
&lt;/h3&gt;

&lt;p&gt;Scan the following QR code or click &lt;a href="https://www.pgyer.com/OpenIM-Flutter"&gt;here&lt;/a&gt; to download.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yy7pqq3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pgyer.com/app/qrcode/OpenIM-Flutter" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yy7pqq3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.pgyer.com/app/qrcode/OpenIM-Flutter" alt="Download App" width="234" height="234"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image: App Download QR Code&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Double-click on OpenIM and change the IP to the server's &lt;code&gt;OPENIM_IP&lt;/code&gt; then restart the App. Please ensure related ports are open, and restart the App after making changes. For first-time use, please register first through your mobile phone number, with the default verification code being &lt;code&gt;666666&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;![Server Address Modification - Step 1]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gVbcGvaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wj9i880f5srloperhi2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gVbcGvaQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wj9i880f5srloperhi2.jpg" alt="Image description" width="800" height="1660"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image: Server Address Modification - Step 1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;![Server Address Modification - Step 2]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--21GGE28q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vbll34kfee0jfr2p5kom.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--21GGE28q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vbll34kfee0jfr2p5kom.jpg" alt="Image description" width="800" height="1664"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image: Server Address Modification - Step 2&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Modifying Configuration Items
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 🛠️ Modifying Shared Configuration Items
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration Item&lt;/th&gt;
&lt;th&gt;Files to be Modified&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mongo/kafka/minio related&lt;/td&gt;
&lt;td&gt;.env, openim-server/config/config.yaml&lt;/td&gt;
&lt;td&gt;Restart components and IM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;redis/zookeeper related&lt;/td&gt;
&lt;td&gt;.env, openim-server/config/config.yaml, chat/config/config.yaml&lt;/td&gt;
&lt;td&gt;Restart components, IM, and Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SECRET&lt;/td&gt;
&lt;td&gt;openim-server/config/config.yaml, chat/config/config.yaml&lt;/td&gt;
&lt;td&gt;Restart IM and Chat&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.2 🔄 Modifying Special Configuration Items
&lt;/h3&gt;

&lt;p&gt;Special configuration items: API_OPENIM_PORT/MINIO_PORT/OPENIM_IP/GRAFANA_PORT&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modify the special configuration items in the &lt;code&gt;.env&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Modify the configuration in &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt; according to the rules&lt;/li&gt;
&lt;li&gt;Modify the configuration in &lt;strong&gt;&lt;code&gt;chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt; according to the rules&lt;/li&gt;
&lt;li&gt;Restart IM and Chat&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.3 🛠️ Modifying Other Configuration Items
&lt;/h3&gt;

&lt;p&gt;For other configuration items in &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;chat/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;code&gt;openim-server/config/config.yaml&lt;/code&gt;&lt;/strong&gt;, you can modify these items directly in the respective files.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Modifying Ports
&lt;/h3&gt;

&lt;p&gt;Note that for any modification of IM-related ports, it's necessary to synchronize the changes in &lt;strong&gt;&lt;code&gt;open-im-server/scripts/install/environment.sh&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 📜 Viewing Logs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Runtime logs: &lt;code&gt;logs/OpenIM.log.all.*&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Startup logs: &lt;code&gt;_output/logs/openim_*.log&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 🚀 Startup Order
&lt;/h3&gt;

&lt;p&gt;The startup order is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Components IM depends on: mongo/redis/kafka/zookeeper/minio, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IM&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Components Chat depends on: mysql&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chat&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6.3 🐳 Docker Version
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The new version of Docker has integrated docker-compose.&lt;/li&gt;
&lt;li&gt;Older versions of Docker might not support the gateway feature. It's recommended to upgrade to a newer version, such as &lt;code&gt;23.0.1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. About OpenIM
&lt;/h2&gt;

&lt;p&gt;Thanks to widespread developer support, OpenIM maintains a leading position in the open-source instant messaging (IM) field, with the number of stars on Github exceeding 12,000. In the current context of increasing attention to data and privacy security, the demand for IM private deployment is growing, which aligns with the rapid development trend of China's software industry. Especially in government and enterprise sectors, with the rapid development of information technology and the widespread application of innovative&lt;/p&gt;

&lt;p&gt;industries, the demand for IM solutions has surged. Further, the continuous expansion of the collaborative office software market has made "secure and controllable" a key attribute.&lt;/p&gt;

&lt;p&gt;Repository address: &lt;a href="https://github.com/openimsdk"&gt;https://github.com/openimsdk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5FDgllgD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqgwc107hd1899cz6p4b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5FDgllgD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqgwc107hd1899cz6p4b.jpg" alt="Image description" width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploy OpenIM using Docker</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Thu, 09 Nov 2023 06:48:33 +0000</pubDate>
      <link>https://forem.com/openim-sk/deploy-openim-using-docker-hdh</link>
      <guid>https://forem.com/openim-sk/deploy-openim-using-docker-hdh</guid>
      <description>&lt;h2&gt;
  
  
  🌟 Environment Requirements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Considerations&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating System&lt;/td&gt;
&lt;td&gt;Linux, ideally Ubuntu 22.04, root user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware Resources&lt;/td&gt;
&lt;td&gt;At least 4GB RAM, for user volume &amp;lt;100,000, single machine deployment: 8C 16G 10Mb 1T regular disk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;golang&lt;/td&gt;
&lt;td&gt;1.18 and above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker&lt;/td&gt;
&lt;td&gt;Docker version 24.0.5, build ced0996 or newer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git&lt;/td&gt;
&lt;td&gt;2.17.1 and above&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📦 Storage Component Requirements
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Storage Component&lt;/th&gt;
&lt;th&gt;Recommended Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mongodb&lt;/td&gt;
&lt;td&gt;6.0.2 and above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;7.0.0 and above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;zookeeper&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kafka&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;td&gt;5.7 and above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minio&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🛠 1. Set Common Environment Variables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CHAT_BRANCH&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: chat version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;release-v1.3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consideration&lt;/strong&gt;: Supports version 1.3 and above
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;CHAT_BRANCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"release-v1.3"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;SERVER_BRANCH&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: OpenIMServer version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;release-v3.3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consideration&lt;/strong&gt;: Supports version 3.3 and above
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SERVER_BRANCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"release-v3.3"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;PASSWORD&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Component password (mysql/mongodb/redis/minio)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;openIM123&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consideration&lt;/strong&gt;: Password should be ≥8 characters and without special characters
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"openIM123"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;USER&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Component username (mysql/mongodb/redis/minio)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;root&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"root"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;API_URL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: API address&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note&lt;/strong&gt;: Automatically fetched if there's an external IP; for internal network, set it to the server IP
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://ip:10002"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;DATA_DIR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: Data volume directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;./&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DATA_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"./"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;







&lt;h3&gt;
  
  
  🛠 More Environment Variables
&lt;/h3&gt;

&lt;p&gt;🟢 For a detailed understanding of various environment variables, please refer to &lt;a href="https://github.com/openimsdk/open-im-server/blob/main/docs/contrib/environment.md"&gt;this document&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note&lt;/strong&gt;: Variables set using &lt;code&gt;export&lt;/code&gt; have higher priority than the ones in the script.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 2. Pull and Launch Image
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/openim-sigs/openim-docker openim/openim-docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;openim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/openim &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$openim&lt;/span&gt;/openim-docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; make init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🟢 If your docker doesn't support compose, it's recommended to upgrade following &lt;a href="https://docs.docker.com/compose/install/linux/"&gt;this guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📜 View Logs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose logs openim-server
docker compose logs openim-chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🟢 More logs can be found at: &lt;code&gt;openim-server/branch/logs/&lt;/code&gt; and &lt;code&gt;openim-chat/branch/logs&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🩺 Check Health Status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GnNy6hRx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./assets/docker-ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GnNy6hRx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./assets/docker-ps.png" alt="docker-ps" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Quick Verification
&lt;/h2&gt;

&lt;p&gt;Please refer to the &lt;a href="//./quickTestServer"&gt;Quick Verification&lt;/a&gt; document.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❓ &lt;strong&gt;Frequently Asked Questions&lt;/strong&gt; 🧐
&lt;/h2&gt;




&lt;h3&gt;
  
  
  1. How to modify using external components? 🛠️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example: Using external mysql🔗:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📝 Edit &lt;code&gt;docker-compose.yaml&lt;/code&gt; and comment out mysql configuration and its corresponding depends_on.&lt;/li&gt;
&lt;li&gt;📝 Edit &lt;code&gt;scripts/install/environment.sh&lt;/code&gt; and change the mysql configuration.&lt;/li&gt;
&lt;li&gt;💻 Run the command: &lt;code&gt;make init&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🚀 Run the command: &lt;code&gt;docker compose up -d&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Health status is &lt;code&gt;starting&lt;/code&gt;? 🟠
&lt;/h3&gt;

&lt;p&gt;Initially, before the health check, Docker's default status is &lt;code&gt;starting&lt;/code&gt;⏳. Approximately after 1 minute, the status changes to &lt;code&gt;healthy&lt;/code&gt;✅.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Port Mapping 🌐
&lt;/h3&gt;

&lt;p&gt;Docker networks allow for user-defined settings🔧. You can map ports as usual🔀.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. About Docker Version 🐋
&lt;/h3&gt;

&lt;p&gt;The new version of Docker has integrated docker-compose. Older versions of Docker might not support the gateway feature❌. It's recommended to upgrade to a newer version, such as &lt;code&gt;23.0.1&lt;/code&gt;🔝.&lt;/p&gt;




&lt;h2&gt;
  
  
  About  OpenIM
&lt;/h2&gt;

&lt;p&gt;Open source, and universal instant messaging components&lt;/p&gt;

&lt;p&gt;OpenIM includes server and client SDKs, achieving high performance, lightweight, and easy-to-extend features. Developers can integrate instant messaging and real-time networking capabilities quickly into their applications by integrating the OpenIM SDK and deploying the server privately, ensuring the security and privacy of business data.&lt;/p&gt;

&lt;p&gt;Currently, the github star is over 12,000, including iOS, Android, Flutter, ReactNative, web, pc, and Uniapp platforms.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/openimsdk/open-im-server"&gt;https://github.com/openimsdk/open-im-server&lt;/a&gt;&lt;br&gt;
Official Website: &lt;a href="https://docs.openim.io/"&gt;https://docs.openim.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQJ0WYdn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts0v6nlzt0gwiix1nvcg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQJ0WYdn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ts0v6nlzt0gwiix1nvcg.jpg" alt="Image description" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 OpenIM: An Open-Source Instant Messaging SDK Solution</title>
      <dc:creator>skiffer-git</dc:creator>
      <pubDate>Tue, 24 Oct 2023 06:27:16 +0000</pubDate>
      <link>https://forem.com/openim-sk/openim-an-open-source-instant-messaging-sdk-solution-hl2</link>
      <guid>https://forem.com/openim-sk/openim-an-open-source-instant-messaging-sdk-solution-hl2</guid>
      <description>&lt;h1&gt;
  
  
  🚀 OpenIM: An Open-Source Instant Messaging SDK Solution
&lt;/h1&gt;

&lt;p&gt;OpenIM consists of two main components: &lt;strong&gt;OpenIMSDK&lt;/strong&gt; and &lt;strong&gt;OpenIMServer&lt;/strong&gt;. Their main features are:&lt;/p&gt;

&lt;p&gt;📦 OpenIMSDK &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embedded directly into applications as a library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🖥️ OpenIMServer &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployed as an independent server-side program.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;📢 &lt;strong&gt;Note&lt;/strong&gt;: OpenIMSDK does not integrate a UI interface, and OpenIMServer does not provide user registration and login functions, meaning it's not a complete IM product.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--alRwLlRr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./assets/relation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--alRwLlRr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/v1/./assets/relation.png" alt="Relationship Diagram" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  📘 Detailed about OpenIMSDK
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;OpenIMSDK&lt;/strong&gt; is the IM SDK designed for &lt;strong&gt;OpenIMServer&lt;/strong&gt;, made specifically for embedding into client applications. Its main features and technical characteristics are:&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 Local storage&lt;/li&gt;
&lt;li&gt;🔔 Listener callback&lt;/li&gt;
&lt;li&gt;🛡️ API encapsulation&lt;/li&gt;
&lt;li&gt;🌐 Connection management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📚 Main Modules:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;🚀 Initialization and login&lt;/li&gt;
&lt;li&gt;👤 User management&lt;/li&gt;
&lt;li&gt;👫 Friend management&lt;/li&gt;
&lt;li&gt;🤖 Group functions&lt;/li&gt;
&lt;li&gt;💬 Conversation handling&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🔧 Technical Implementation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🏗️ Written in Golang&lt;/li&gt;
&lt;li&gt;🌉 Cross-platform compilation using Gomobile&lt;/li&gt;
&lt;li&gt;🕸️ Web SDK implementation using wasm technology&lt;/li&gt;
&lt;li&gt;🌌 C interface export via cgo&lt;/li&gt;
&lt;li&gt;🌍 Covers almost all platforms and languages&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform/Language&lt;/th&gt;
&lt;th&gt;SDK Resource Link&lt;/th&gt;
&lt;th&gt;SDK Description&lt;/th&gt;
&lt;th&gt;Sample Resource Link&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Golang&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-core"&gt;open-im-sdk-core&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Golang version SDK using Gomobile/wasm/cgo&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-ios"&gt;open-im-sdk-ios&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;iOS version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-ios-demo"&gt;open-im-ios-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;iOS sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-android"&gt;open-im-sdk-android&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Android version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-android-demo"&gt;open-im-android-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Android sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flutter&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-flutter"&gt;open-im-sdk-flutter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Flutter version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-flutter-demo"&gt;open-im-flutter-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Flutter sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uni-app&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-uniapp"&gt;open-im-sdk-uniapp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uni-app version SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-uniapp-demo"&gt;open-im-uniapp-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;uni-app sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-web-wasm"&gt;open-im-sdk-web-wasm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JS SDK version&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-pc-web-demo"&gt;open-im-pc-web-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;PC web sample&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/open-im-sdk-reactnative"&gt;open-im-sdk-reactnative&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;React Native SDK&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/openimsdk/openim-reactnative-demo"&gt;open-im-reactnative-demo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;React Native sample&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔍 Detailed about OpenIMServer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OpenIMServer&lt;/strong&gt; has the following characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧩 Made up of multiple modules, such as the gateway and several rpc services.&lt;/li&gt;
&lt;li&gt;🌐 Microservice architecture, supports cluster mode.&lt;/li&gt;
&lt;li&gt;🚀 Variety of deployment methods, like from source code, kubernetes or docker deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/openimsdk/open-im-server"&gt;🔗 OpenIMServer Repository Link&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 REST API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenIMServer offers a REST API for business systems, aiming to provide more functionalities, like creating groups or sending push notifications via backend interfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📞 Callback
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenIMServer provides callback capabilities to expand more business forms. In this context, a callback means that OpenIMServer will send a request to the business server either before or after a certain event, such as a callback before or after sending a message.&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
