Signed-off-by: Xinwei Xiong (cubxxw) <3293172751nss@gmail.com>pull/1721/head
parent
83c2351957
commit
f074c6c6cf
@ -0,0 +1,112 @@
|
|||||||
|
# Code - OSS Development Container
|
||||||
|
|
||||||
|
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/openimsdk/open-im-server)
|
||||||
|
|
||||||
|
This repository includes configuration for a development container for working with Code - OSS in a local container or using [GitHub Codespaces](https://github.com/features/codespaces).
|
||||||
|
|
||||||
|
> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` and a web client is available on port `6080`.
|
||||||
|
|
||||||
|
## Quick start - local
|
||||||
|
|
||||||
|
If you already have VS Code and Docker installed, you can click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/openimsdk/open-im-server) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.
|
||||||
|
|
||||||
|
1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)
|
||||||
|
|
||||||
|
2. **Important**: Docker needs at least **4 Cores and 8 GB of RAM** to run a full build with **9 GB of RAM** being recommended. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.
|
||||||
|
|
||||||
|
> **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.
|
||||||
|
|
||||||
|
3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Dev Containers](https://aka.ms/vscode-remote/download/containers) extension.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> **Note:** The Dev Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
|
||||||
|
|
||||||
|
4. Press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Dev Containers: Clone Repository in Container Volume...**.
|
||||||
|
|
||||||
|
> **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend using the WSL filesystem on Windows or the "clone repository in container" approach on Windows and macOS instead since it uses "named volume" rather than the local filesystem.
|
||||||
|
|
||||||
|
5. Type `https://github.com/openimsdk/open-im-server` (or a branch or PR URL) in the input box and press <kbd>Enter</kbd>.
|
||||||
|
|
||||||
|
6. After the container is running:
|
||||||
|
1. If you have the `DISPLAY` or `WAYLAND_DISPLAY` environment variables set locally (or in WSL on Windows), desktop apps in the container will be shown in local windows.
|
||||||
|
2. If these are not set, open a web browser and go to [http://localhost:6080](http://localhost:6080), or use a [VNC Viewer][def] to connect to `localhost:5901` and enter `vscode` as the password. Anything you start in VS Code, or the integrated terminal, will appear here.
|
||||||
|
|
||||||
|
Next: **[Try it out!](#try-it)**
|
||||||
|
|
||||||
|
## Quick start - GitHub Codespaces
|
||||||
|
|
||||||
|
1. From the [openimsdk/open-im-server GitHub repository](https://github.com/openimsdk/open-im-server), click on the **Code** dropdown, select **Open with Codespaces**, and then click on **New codespace**. If prompted, select the **Standard** machine size (which is also the default).
|
||||||
|
|
||||||
|
> **Note:** You will not see these options within GitHub if you are not in the Codespaces beta.
|
||||||
|
|
||||||
|
2. After the codespace is up and running in your browser, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd> and select **Ports: Focus on Ports View**.
|
||||||
|
|
||||||
|
3. You should see **VNC web client (6080)** under in the list of ports. Select the line and click on the globe icon to open it in a browser tab.
|
||||||
|
|
||||||
|
> **Tip:** If you do not see the port, <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, select **Forward a Port** and enter port `6080`.
|
||||||
|
|
||||||
|
4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password.
|
||||||
|
|
||||||
|
Anything you start in VS Code, or the integrated terminal, will appear here.
|
||||||
|
|
||||||
|
Next: **[Try it out!](#try-it)**
|
||||||
|
|
||||||
|
### Using VS Code with GitHub Codespaces
|
||||||
|
|
||||||
|
You may see improved VNC responsiveness when accessing a codespace from VS Code client since you can use a [VNC Viewer][def]. Here's how to do it.
|
||||||
|
|
||||||
|
1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).
|
||||||
|
|
||||||
|
> **Note:** The GitHub Codespaces extension requires the Visual Studio Code distribution of Code - OSS.
|
||||||
|
|
||||||
|
2. After the VS Code is up and running, press <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> or <kbd>F1</kbd>, choose **Codespaces: Create New Codespace**, and use the following settings:
|
||||||
|
|
||||||
|
- `openimsdk/open-im-server` for the repository.
|
||||||
|
- Select any branch (e.g. **main**) - you can select a different one later.
|
||||||
|
- Choose **Standard** (4-core, 8GB) as the size.
|
||||||
|
|
||||||
|
3. After you have connected to the codespace, you can use a [VNC Viewer][def] to connect to `localhost:5901` and enter `vscode` as the password.
|
||||||
|
|
||||||
|
> **Tip:** You may also need change your VNC client's **Picture Quality** setting to **High** to get a full color desktop.
|
||||||
|
|
||||||
|
4. Anything you start in VS Code, or the integrated terminal, will appear here.
|
||||||
|
|
||||||
|
Next: **[Try it out!](#try-it)**
|
||||||
|
|
||||||
|
## Try it
|
||||||
|
|
||||||
|
This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.
|
||||||
|
|
||||||
|
> **Note:** You can also set the resolution from the command line by typing `set-resolution`.
|
||||||
|
|
||||||
|
To start working with Code - OSS, follow these steps:
|
||||||
|
|
||||||
|
1. In your local VS Code client, open a terminal (<kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>\`</kbd>) and type the following commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn install
|
||||||
|
bash scripts/code.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. After the build is complete, open a web browser or a [VNC Viewer][def] to connect to the desktop environment as described in the quick start and enter `vscode` as the password.
|
||||||
|
|
||||||
|
3. You should now see Code - OSS!
|
||||||
|
|
||||||
|
Next, let's try debugging.
|
||||||
|
|
||||||
|
1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.
|
||||||
|
|
||||||
|
2. Go to your local VS Code client, and use the **Run / Debug** view to launch the **VS Code** configuration. (Typically the default, so you can likely just press <kbd>F5</kbd>).
|
||||||
|
|
||||||
|
> **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../../.vscode/launch.json). However, running `./scripts/code.sh` first will set up Electron which will usually solve timeout issues.
|
||||||
|
|
||||||
|
3. After a bit, Code - OSS will appear with the debugger attached!
|
||||||
|
|
||||||
|
Enjoy!
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
The container comes with VS Code Insiders installed. To run it from an Integrated Terminal use `VSCODE_IPC_HOOK_CLI= /usr/bin/code-insiders .`.
|
||||||
|
|
||||||
|
[def]: https://www.realvnc.com/en/connect/download/viewer/
|
@ -1,79 +1,83 @@
|
|||||||
{
|
{
|
||||||
// Reference Doc: https://code.visualstudio.com/remote/advancedcontainers/overview
|
// Reference Doc: https://code.visualstudio.com/remote/advancedcontainers/overview
|
||||||
"name": "OpenIM Dev Environment",
|
"name": "OpenIM Dev Environment",
|
||||||
// Update the container version when you publish dev-container
|
// Update the container version when you publish dev-container
|
||||||
"dockerComposeFile": "docker-compose.yml",
|
"dockerComposeFile": "docker-compose.yml",
|
||||||
"build": { "dockerfile": "Dockerfile" },
|
"build": { "dockerfile": "Dockerfile" },
|
||||||
// Replace with uncommented line below to build your own local copy of the image
|
// Replace with uncommented line below to build your own local copy of the image
|
||||||
// "dockerFile": "../docker/Dockerfile-dev",
|
// "dockerFile": "../docker/Dockerfile-dev",
|
||||||
"containerEnv": {
|
"containerEnv": {
|
||||||
// Uncomment to overwrite devcontainer .kube/config and .minikube certs with the localhost versions
|
// Uncomment to overwrite devcontainer .kube/config and .minikube certs with the localhost versions
|
||||||
// each time the devcontainer starts, if the respective .kube-localhost/config and .minikube-localhost
|
// each time the devcontainer starts, if the respective .kube-localhost/config and .minikube-localhost
|
||||||
// folders respectively are bind mounted to the devcontainer.
|
// folders respectively are bind mounted to the devcontainer.
|
||||||
// "SYNC_LOCALHOST_KUBECONFIG": "true"
|
// "SYNC_LOCALHOST_KUBECONFIG": "true"
|
||||||
|
|
||||||
// Uncomment to disable docker-in-docker and automatically proxy default /var/run/docker.sock to
|
// Uncomment to disable docker-in-docker and automatically proxy default /var/run/docker.sock to
|
||||||
// the localhost bind-mount /var/run/docker-host.sock.
|
// the localhost bind-mount /var/run/docker-host.sock.
|
||||||
// "BIND_LOCALHOST_DOCKER": "true"
|
// "BIND_LOCALHOST_DOCKER": "true"
|
||||||
},
|
},
|
||||||
"remoteEnv": {
|
"remoteEnv": {
|
||||||
"GO111MODULE": "on",
|
"GO111MODULE": "on",
|
||||||
"GOPROXY": "https://goproxy.cn",
|
"GOPROXY": "https://goproxy.cn",
|
||||||
"GOSUMDB": "sum.golang.org",
|
"GOSUMDB": "sum.golang.org",
|
||||||
"GONOPROXY": "github.com/openimsdk",
|
"GONOPROXY": "github.com/openimsdk",
|
||||||
"GONOSUMDB": "github.com/openimsdk",
|
"GONOSUMDB": "github.com/openimsdk",
|
||||||
"GOPRIVATE": "github.com/openimsdk"
|
"GOPRIVATE": "github.com/openimsdk"
|
||||||
},
|
},
|
||||||
"extensions": [
|
"customizations": {
|
||||||
"davidanson.vscode-markdownlint",
|
"vscode": {
|
||||||
"golang.go",
|
"extensions": [
|
||||||
"ms-azuretools.vscode-dapr",
|
"davidanson.vscode-markdownlint",
|
||||||
"ms-azuretools.vscode-docker",
|
"golang.go",
|
||||||
"ms-kubernetes-tools.vscode-kubernetes-tools"
|
"ms-azuretools.vscode-dapr",
|
||||||
],
|
"ms-azuretools.vscode-docker",
|
||||||
"mounts": [
|
"ms-kubernetes-tools.vscode-kubernetes-tools"
|
||||||
// Mount docker-in-docker library volume
|
],
|
||||||
"type=volume,source=dind-var-lib-docker,target=/var/lib/docker",
|
"settings": {
|
||||||
|
"go.toolsManagement.checkForUpdates": "local",
|
||||||
|
"go.useLanguageServer": true,
|
||||||
|
"go.gopath": "/go"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mounts": [
|
||||||
|
// Mount docker-in-docker library volume
|
||||||
|
"type=volume,source=dind-var-lib-docker,target=/var/lib/docker",
|
||||||
|
|
||||||
// Bind mount docker socket under an alias to support docker-from-docker
|
// Bind mount docker socket under an alias to support docker-from-docker
|
||||||
"type=bind,source=/var/run/docker.sock,target=/var/run/docker-host.sock",
|
"type=bind,source=/var/run/docker.sock,target=/var/run/docker-host.sock",
|
||||||
|
|
||||||
// Bind mount docker socket under an alias to support docker-from-docker
|
// Bind mount docker socket under an alias to support docker-from-docker
|
||||||
// "type=bind,source=${env:HOME}${env:USERPROFILE}/.minikube/cache,target=/home/openim/.minikube/cache",
|
// "type=bind,source=${env:HOME}${env:USERPROFILE}/.minikube/cache,target=/home/openim/.minikube/cache",
|
||||||
|
|
||||||
// Uncomment to clone local .kube/config into devcontainer
|
// Uncomment to clone local .kube/config into devcontainer
|
||||||
"type=bind,source=${env:HOME}${env:USERPROFILE}/.kube,target=/home/openim/.kube-localhost"
|
"type=bind,source=${env:HOME}${env:USERPROFILE}/.kube,target=/home/openim/.kube-localhost"
|
||||||
|
|
||||||
// Uncomment to additionally clone minikube certs into devcontainer for use with .kube/config
|
// Uncomment to additionally clone minikube certs into devcontainer for use with .kube/config
|
||||||
// "type=bind,source=${env:HOME}${env:USERPROFILE}/.minikube,target=/home/openim/.minikube-localhost"
|
// "type=bind,source=${env:HOME}${env:USERPROFILE}/.minikube,target=/home/openim/.minikube-localhost"
|
||||||
],
|
],
|
||||||
// Always run image-defined default command
|
// Always run image-defined default command
|
||||||
"overrideCommand": false,
|
"overrideCommand": false,
|
||||||
// On Linux, this will prevent new files getting created as root, but you
|
// On Linux, this will prevent new files getting created as root, but you
|
||||||
// may need to update the USER_UID and USER_GID in docker/Dockerfile-dev
|
// may need to update the USER_UID and USER_GID in docker/Dockerfile-dev
|
||||||
// to match your user if not 1000.
|
// to match your user if not 1000.
|
||||||
// "remoteUser": "openimsdk",
|
// "remoteUser": "openimsdk",
|
||||||
"runArgs": [
|
"runArgs": [
|
||||||
// Enable ptrace-based debugging for go
|
// Enable ptrace-based debugging for go
|
||||||
"--cap-add=SYS_PTRACE",
|
"--cap-add=SYS_PTRACE",
|
||||||
"--security-opt",
|
"--security-opt",
|
||||||
"seccomp=unconfined",
|
"seccomp=unconfined",
|
||||||
|
|
||||||
// Uncomment to bind to host network for local devcontainer; this is necessary if using the
|
// Uncomment to bind to host network for local devcontainer; this is necessary if using the
|
||||||
// bind-mounted /var/run/docker-host.sock directly.
|
// bind-mounted /var/run/docker-host.sock directly.
|
||||||
"--net=host",
|
"--net=host",
|
||||||
|
|
||||||
// Enable docker-in-docker configuration. Comment out if not using for better security.
|
// Enable docker-in-docker configuration. Comment out if not using for better security.
|
||||||
"--privileged",
|
"--privileged",
|
||||||
|
|
||||||
// Run the entrypoint defined in container image.
|
// Run the entrypoint defined in container image.
|
||||||
"--init"
|
"--init"
|
||||||
],
|
],
|
||||||
"settings": {
|
"workspaceFolder": "/workspaces/openim",
|
||||||
"go.toolsManagement.checkForUpdates": "local",
|
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/workspaces/openim"
|
||||||
"go.useLanguageServer": true,
|
|
||||||
"go.gopath": "/go"
|
|
||||||
},
|
|
||||||
"workspaceFolder": "/workspaces/openim",
|
|
||||||
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/workspaces/openim"
|
|
||||||
}
|
}
|
@ -0,0 +1,137 @@
|
|||||||
|
# Mac Developer Deployment Guide for OpenIM
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This guide aims to assist Mac-based developers in contributing effectively to OpenIM. It covers the setup of a development environment tailored for Mac, including the use of GitHub for development workflow and `devcontainer` for a consistent development experience.
|
||||||
|
|
||||||
|
Before contributing to OpenIM through issues and pull requests, make sure you are familiar with GitHub and the [pull request workflow](https://docs.github.com/en/get-started/quickstart/github-flow).
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
### System Requirements
|
||||||
|
|
||||||
|
- macOS (latest stable version recommended)
|
||||||
|
- Internet connection
|
||||||
|
- Administrator access
|
||||||
|
|
||||||
|
### Knowledge Requirements
|
||||||
|
|
||||||
|
- Basic understanding of Git and GitHub
|
||||||
|
- Familiarity with Docker and containerization
|
||||||
|
- Experience with Go programming language
|
||||||
|
|
||||||
|
## Setting up the Development Environment
|
||||||
|
|
||||||
|
### Installing Homebrew
|
||||||
|
|
||||||
|
Homebrew is an essential package manager for macOS. Install it using:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installing and Configuring Git
|
||||||
|
|
||||||
|
1. Install Git:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install git
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Configure Git with your user details:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git config --global user.name "Your Name"
|
||||||
|
git config --global user.email "your.email@example.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Forking and Cloning the Repository
|
||||||
|
|
||||||
|
1. Fork the OpenIM repository on GitHub to your account.
|
||||||
|
2. Clone your fork to your local machine:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/<your-username>/open-im-server.git
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting Up the Devcontainer
|
||||||
|
|
||||||
|
`Devcontainers` provide a Docker-based isolated development environment.
|
||||||
|
|
||||||
|
Read [README.md](https://github.com/openimsdk/open-im-server/tree/main/.devcontainer) in the `.devcontainer` directory of the project to learn more about the devcontainer.
|
||||||
|
|
||||||
|
To set it up:
|
||||||
|
|
||||||
|
1. Install Docker Desktop for Mac from [Docker Hub](https://docs.docker.com/desktop/install/mac-install/).
|
||||||
|
2. Install Visual Studio Code and the Remote - Containers extension.
|
||||||
|
3. Open the cloned OpenIM repository in VS Code.
|
||||||
|
4. VS Code will prompt to reopen the project in a container. Accept this to set up the environment automatically.
|
||||||
|
|
||||||
|
### Installing Go and Dependencies
|
||||||
|
|
||||||
|
Use Homebrew to install Go:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install go
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensure the version of Go is compatible with the version required by OpenIM (refer to the main documentation for version requirements).
|
||||||
|
|
||||||
|
### Additional Tools
|
||||||
|
|
||||||
|
Install other required tools like Docker, Vagrant, and necessary GNU utils as described in the main documentation.
|
||||||
|
|
||||||
|
## GitHub Development Workflow
|
||||||
|
|
||||||
|
### Creating a New Branch
|
||||||
|
|
||||||
|
For new features or fixes, create a new branch:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git checkout -b feat/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### Making Changes and Committing
|
||||||
|
|
||||||
|
1. Make your changes in the code.
|
||||||
|
2. Stage your changes:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git add .
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Commit with a meaningful message:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git commit -m "Add a brief description of your changes"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pushing Changes and Creating Pull Requests
|
||||||
|
|
||||||
|
1. Push your branch to GitHub:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git push origin feat/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Go to your fork on GitHub and create a pull request to the main OpenIM repository.
|
||||||
|
|
||||||
|
### Keeping Your Fork Updated
|
||||||
|
|
||||||
|
Regularly sync your fork with the main repository:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git fetch upstream
|
||||||
|
git checkout main
|
||||||
|
git rebase upstream/main
|
||||||
|
```
|
||||||
|
|
||||||
|
More read: [https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md](https://github.com/openimsdk/open-im-server/blob/main/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
## Testing and Quality Assurance
|
||||||
|
|
||||||
|
Run tests as described in the OpenIM documentation to ensure your changes do not break existing functionality.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
This guide provides a comprehensive overview for Mac developers to set up and contribute to OpenIM. By following these steps, you can ensure a smooth and efficient development experience. Happy coding!
|
@ -0,0 +1,8 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
fmt.Println("imctl")
|
||||||
|
}
|
Loading…
Reference in new issue