use sphinx to manage docs (#651)

diff --git a/.gitignore b/.gitignore
index cde0957..b855df9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,7 @@
 tmp/
 servicecomb-service-center
 service-center
+
+docs/_build
+docs/_static
+docs/_templates
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..298ea9e
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,19 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+SOURCEDIR     = .
+BUILDDIR      = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index d632d74..0000000
--- a/docs/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-## Documentation Index
-
-#### [Design](/docs/design.md)
-
-#### Development Guide
-
-- [Guides](/docs/dev-guide.md) 
-- [Api Documentation](https://rawcdn.githack.com/ServiceComb/service-center/master/docs/api-docs.html),
-Swagger [`v4`](/server/core/swagger/v4.yaml)|[`v3`](/server/core/swagger/v3.yaml)
-- [Plug-in Extension](/docs/plugin.md)
-- [Command Line Client](/scctl/README.md)
-
-#### Docker Image Guide
-
-- [Making Service-Center Image](/scripts/docker/build-image)
-- [Making Front-end Image](/scripts/docker/build-frontend-image)
-
-#### Deploy Service-Center Locally
-
-- [Local](/README.md#running-service-center-using-the-release)
-- [Frontend](/README.md#running-frontend-using-the-release)
-- [Docker Compose](/scripts/docker) 
-
-#### Deploy Service-Center Cluster
-
-+ **General**
-  - [VMs Cluster](/docs/sc-cluster.md)
-  - [Deploy with TLS](/docs/security-tls.md)
-  - [Multiple Datacenters](/docs/multidcs.md)
-+ **Kubernetes**
-  - [Helm Chart](/docs/helm.md)
-  - [Access Distinct Clusters](/docs/kubeclusters.md)
-  - [Multiple Registry Aggregation](/docs/aggregate.md)
-
-#### Monitoring Service-Center
-
-- [Integrate with Grafana](/docs/integration-grafana.md)
-
-#### [Contribution Guide](/CONTRIBUTING.md) 
\ No newline at end of file
diff --git a/docs/aggregate.PNG b/docs/aggregate.PNG
deleted file mode 100644
index a23c00a..0000000
--- a/docs/aggregate.PNG
+++ /dev/null
Binary files differ
diff --git a/docs/aggregate.md b/docs/aggregate.md
deleted file mode 100644
index e69de29..0000000
--- a/docs/aggregate.md
+++ /dev/null
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..38b6e93
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,194 @@
+# -*- coding: utf-8 -*-
+#
+# Configuration file for the Sphinx documentation builder.
+#
+# This file does only contain a selection of the most common options. For a
+# full list see the documentation:
+# http://www.sphinx-doc.org/en/master/config
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+import sphinx_rtd_theme
+
+# -- Project information -----------------------------------------------------
+
+project = u'servicecomb-service-center'
+copyright = u'2020, The Apache Software Foundation'
+author = u'The Apache Software Foundation'
+
+# The short X.Y version
+version = u''
+# The full version, including alpha/beta/rc tags
+release = u''
+
+
+# -- General configuration ---------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+from recommonmark.parser import CommonMarkParser
+from recommonmark.transform import AutoStructify
+source_parsers = {
+    '.md': CommonMarkParser,
+}
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.doctest',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode',
+    'sphinx.ext.githubpages',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store']
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = None
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+
+html_theme = 'sphinx_rtd_theme'
+html_static_path = ['_static']
+html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+html_logo = 'img/logo.svg'
+html_theme_options = {
+    'logo_only': True,
+    'display_version': False,
+}
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# The default sidebars (for documents that don't match any pattern) are
+# defined by theme itself.  Builtin themes are using these templates by
+# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
+# 'searchbox.html']``.
+#
+# html_sidebars = {}
+
+
+# -- Options for HTMLHelp output ---------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'servicecomb-service-centerdoc'
+
+
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    #
+    # 'papersize': 'letterpaper',
+
+    # The font size ('10pt', '11pt' or '12pt').
+    #
+    # 'pointsize': '10pt',
+
+    # Additional stuff for the LaTeX preamble.
+    #
+    # 'preamble': '',
+
+    # Latex figure (float) alignment
+    #
+    # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, 'servicecomb-service-center.tex', u'servicecomb-service-center Documentation',
+     u'The Apache Software Foundation', 'manual'),
+]
+
+
+# -- Options for manual page output ------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'servicecomb-service-center', u'servicecomb-service-center Documentation',
+     [author], 1)
+]
+
+
+# -- Options for Texinfo output ----------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (master_doc, 'servicecomb-service-center', u'servicecomb-service-center Documentation',
+     author, 'servicecomb-service-center', 'One line description of project.',
+     'Miscellaneous'),
+]
+
+
+# -- Options for Epub output -------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#
+# epub_identifier = ''
+
+# A unique identification for the text.
+#
+# epub_uid = ''
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+def setup(app):
+    app.add_config_value('recommonmark_config', {
+        #'url_resolver': lambda url: github_doc_root + url,
+        'auto_toc_tree_section': 'Contents',
+        'enable_eval_rst': True,
+    }, True)
+    app.add_transform(AutoStructify)
\ No newline at end of file
diff --git a/docs/design-guides.rst b/docs/design-guides.rst
new file mode 100644
index 0000000..564b115
--- /dev/null
+++ b/docs/design-guides.rst
@@ -0,0 +1,10 @@
+Design Guides
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   design-guides/design.md
+   design-guides/plugin.md
+
diff --git a/docs/aggregator-design.PNG b/docs/design-guides/aggregator-design.PNG
similarity index 100%
rename from docs/aggregator-design.PNG
rename to docs/design-guides/aggregator-design.PNG
Binary files differ
diff --git a/docs/communication.PNG b/docs/design-guides/communication.PNG
similarity index 100%
rename from docs/communication.PNG
rename to docs/design-guides/communication.PNG
Binary files differ
diff --git a/docs/design.md b/docs/design-guides/design.md
similarity index 93%
rename from docs/design.md
rename to docs/design-guides/design.md
index fc81afd..7ceb003 100644
--- a/docs/design.md
+++ b/docs/design-guides/design.md
@@ -1,9 +1,13 @@
+# Design Guides
+
 ## Service-Center Design
 
 Service-Center(SC) is a service registry that allows services to register their instance information and to discover providers of a given service.
 Generally, SC uses etcd to store all the information of micro-service and its instances.
 
-![architecture](/docs/aggregator-design.PNG)
+```eval_rst
+.. image:: aggregator-design.PNG
+```
 
 - **API Layer**: To expose the RESTful and gRPC service.
 - **Metedata**: The business logic to manage microservice, instance, schema, tag, dependency and ACL rules.
@@ -26,12 +30,16 @@
 4. Consumer sdk stores all the information of provider instances in its cache.
 5. Consumer sdk creates a web socket connection to SC to watch all the provider instance information, if there is any change in the provider then sdk updates it's cache information.
 
-![Onstartup](/docs/onStartup.PNG)
+```eval_rst
+.. image:: onStartup.PNG
+```
 
 #### Communication between Consumer -> Provider
 Once the bootup is successful then the consumer can communicate with providers flawlessly, below is the diagram illustrating the communication between provider and consumer.
 
-![Commuication](/docs/communication.PNG)
+```eval_rst
+.. image:: communication.PNG
+```
 
 Provider instance regularly sends heartbeat signal every 30 seconds to SC, if SC does not receive the heartbeat for particular instance then the information in etcd expires and the provider instance information is removed.  
 Consumer watches the information of provider instances from SC and if there is any change then the cache is updated.  
diff --git a/docs/onStartup.PNG b/docs/design-guides/onStartup.PNG
similarity index 100%
rename from docs/onStartup.PNG
rename to docs/design-guides/onStartup.PNG
Binary files differ
diff --git a/docs/plugin.md b/docs/design-guides/plugin.md
similarity index 80%
rename from docs/plugin.md
rename to docs/design-guides/plugin.md
index 8041df3..cea6ddb 100644
--- a/docs/plugin.md
+++ b/docs/design-guides/plugin.md
@@ -3,7 +3,7 @@
 1. Go version 1.8(+)
 1. Compile service-center with GO_EXTLINK_ENABLED=1 and CGO_ENABLED=1
 1. The plugin file name must has suffix '_plugin.so'
-1. All plugin interface files are in [infra](/server/infra) package
+1. All plugin interface files are in [plugin](https://github.com/apache/servicecomb-service-center/blob/master/server/plugin) package
 
 ## Plug-in names
 1. **auth**: Customize authentication of service-center.
@@ -18,7 +18,7 @@
 
 ### Step 1: code auth.go
 
-auth.go is the implement from [auth interface](/server/infra/auth/auth.go)
+auth.go is the implement from [auth interface](https://github.com/apache/servicecomb-service-center/blob/master/server/plugin/pkg/auth/auth.go)
 
 ```go
 package main
diff --git a/docs/dev-guides.rst b/docs/dev-guides.rst
new file mode 100644
index 0000000..4f751cd
--- /dev/null
+++ b/docs/dev-guides.rst
@@ -0,0 +1,13 @@
+Development guide
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   dev-guides/dev-guide.md
+   dev-guides/extendmodule.md
+   dev-guides/multidcs.rst
+   dev-guides/multidcs2.rst
+   dev-guides/helm.md
+   dev-guides/kubeclusters.rst
diff --git a/docs/api-docs.html b/docs/dev-guides/api-docs.html
similarity index 100%
rename from docs/api-docs.html
rename to docs/dev-guides/api-docs.html
diff --git a/docs/dev-guide.md b/docs/dev-guides/dev-guide.md
similarity index 94%
rename from docs/dev-guide.md
rename to docs/dev-guides/dev-guide.md
index 98f3527..b119c41 100644
--- a/docs/dev-guide.md
+++ b/docs/dev-guides/dev-guide.md
@@ -1,7 +1,7 @@
 # Development Guide
 
 This chapter is about how to implement the feature of micro-service discovery with ServiceCenter,
-and you can get more detail at [here](/server/core/swagger/v3.yaml)
+and you can get more detail at [here](https://github.com/apache/servicecomb-service-center/blob/master/server/core/swagger/v3.yaml)
 
 ## Micro-service registration
 ```bash
diff --git a/docs/dev-guides/extendmodule.md b/docs/dev-guides/extendmodule.md
new file mode 100644
index 0000000..7247fef
--- /dev/null
+++ b/docs/dev-guides/extendmodule.md
@@ -0,0 +1,62 @@
+# Module mechanism
+
+Service center(SC) support an extend modules mechanism that developers can new some features in SC easily. 
+
+## Just 4 steps, you can add a module in service center
+1. Create a module(package) under the github.com/apache/servicecomb-service-center/server package.
+1. Here you just need to implement the controller and service interfaces in your module.
+1. And register service to SC when the module initializes.
+1. Import the package in github.com/apache/servicecomb-service-center/server/bootstrap/bootstrap.go
+
+## Quit start for the RESTful module
+
+Implement the [ROAServantService](https://github.com/apache/servicecomb-service-center/tree/master/pkg/rest/roa.go) interface.
+
+```go
+package hello
+
+import (
+	"net/http"
+	"github.com/apache/servicecomb-service-center/pkg/rest"
+)
+
+type HelloService struct {
+}
+
+func (s *HelloService) URLPatterns() []rest.Route {
+	return []rest.Route{
+		{
+		    rest.HTTP_METHOD_GET, // Method is one of the following: GET,PUT,POST,DELETE
+		    "/helloWorld", // Path contains a path pattern
+		    s.SayHello, // rest callback function for the specified Method and Path
+        },
+	}
+}
+
+func (s *HelloService) SayHello(w http.ResponseWriter, r *http.Request) {
+    // say Hi
+}
+```
+
+Register the service in SC ROA framework when the module initializes.
+
+```go
+package hello
+
+import roa "github.com/apache/servicecomb-service-center/pkg/rest"
+
+func init() {
+    roa.RegisterServant(&HelloService{})
+}
+```
+
+Modify [bootstarp.go](https://github.com/apache/servicecomb-service-center/tree/master/server/bootstrap/bootstrap.go) file to import your module.
+
+```go
+// module
+import _ "github.com/apache/servicecomb-service-center/server/hello"
+```
+
+## About GRPC module
+
+To see [govern](https://github.com/apache/servicecomb-service-center/tree/master/server/govern) module for help.
\ No newline at end of file
diff --git a/docs/helm.md b/docs/dev-guides/helm.md
similarity index 97%
rename from docs/helm.md
rename to docs/dev-guides/helm.md
index dc8f760..a9fd1e9 100644
--- a/docs/helm.md
+++ b/docs/dev-guides/helm.md
@@ -1,5 +1,4 @@
-Integrate with Kubernetes
--------
+# Integrate with Kubernetes
 
 A simple demo to deploy ServiceCenter Cluster in Kubernetes.
 ServiceCenter supports two deploy modes: `Platform Registration` and `Client Side Registration`
@@ -86,7 +85,7 @@
 
 1. You can execute the command `kubectl get pod`, to check all pods are running.
 1. You can also point your browser to `http://${NODE}:30103` to view the dashboard of ServiceCenter.
-1. (Recommended) You can use [`scctl`](/scctl) tool to list micro-service information.
+1. (Recommended) You can use [scctl](https://github.com/apache/servicecomb-service-center/tree/master/scctl) tool to list micro-service information.
 
 ```bash
 # ./scctl get svc --addr http://servicecomb-service-center:30100 -owide
diff --git a/docs/kubeclusters.PNG b/docs/dev-guides/kubeclusters.PNG
similarity index 100%
rename from docs/kubeclusters.PNG
rename to docs/dev-guides/kubeclusters.PNG
Binary files differ
diff --git a/docs/dev-guides/kubeclusters.rst b/docs/dev-guides/kubeclusters.rst
new file mode 100644
index 0000000..5852070
--- /dev/null
+++ b/docs/dev-guides/kubeclusters.rst
@@ -0,0 +1,135 @@
+Access Distinct Clusters
+========================
+
+ServiceCenter Aggregate Architecture
+------------------------------------
+
+In the `Multiple Datacenters`_ article, we introduce the aggregation
+architecture of service center. In fact, this aggregation architecture
+of service center can be applied not only to the scene deployed in
+multiple datacenters, but also to the scene services data aggregation in
+multiple kubernetes clusters.
+
+.. figure:: kubeclusters.PNG
+   :alt: architecture
+
+   architecture
+
+The service centers deployed in distinct kubernetes clusters can
+communicate with each other, sync the services data from other
+kubernetes clusters. Applications can discover services from different
+the kubernetes cluster through using the service center HTTP API. **It
+solve the problem of isolation between kubernetes clusters**.
+
+Quick Start
+-----------
+
+Let’s assume you want to install 2 clusters of Service-Center in
+different Kubernetes clusters with following details.
+
+======= ========== ========= =========
+Cluster Kubernetes namespace Node
+======= ========== ========= =========
+sc1     k1         default   10.12.0.1
+sc2     k2         default   10.12.0.2
+======= ========== ========= =========
+
+To facilitate deployment, we will publish the service address of the
+service center in [``NodePort``] mode.
+
+Deploy the Service Center
+'''''''''''''''''''''''''
+
+Using helm to deploy the service center to kubernetes here, the
+instructions for specific ``values`` can be referred to `here`_.
+
+Take deployment to kubernetes cluster 1 as an example.
+
+.. code:: bash
+
+   # login the k1 kubernetes master node to deploy sc1
+   git clone git@github.com:apache/servicecomb-service-center.git
+   cd examples/infrastructures/k8s
+   helm install --name k1 \
+       --set sc.discovery.clusters="sc2=http://10.12.0.2:30100" \
+       --set sc.discovery.aggregate="k8s\,servicecenter" \
+       --set sc.registry.type="buildin" \
+       --set sc.service.type=NodePort \
+       service-center/
+
+Notes: To deploy Service Center in kuberbetes cluster 2, you can repeat
+the above steps and just change the ``sc.discovery.clusters`` value to
+``sc1=http://10.12.0.1:30100``.
+
+Start Server
+''''''''''''
+
+Edit the configuration of the ip/port on which Server will register.
+
+::
+
+   vi examples/discovery/server/conf/chassis.yaml
+
+Replace the below values
+
+.. code:: yaml
+
+   cse:
+     service:
+       registry:
+         type: servicecenter
+         address: http://10.12.0.2:30100 # the address of SC in dc-2
+
+Run the Server
+
+.. code:: bash
+
+   go run examples/discovery/server/main.go
+
+Start Client
+''''''''''''
+
+Edit the configuration of the ip/port on which Client will register and
+discover.
+
+.. code:: bash
+
+   vi examples/discovery/client/conf/chassis.yaml
+
+Replace the below values
+
+.. code:: yaml
+
+   cse:
+     service:
+       registry:
+         registrator:
+           type: servicecenter
+           address: http://10.12.0.1:30100 # the address of SC in dc-1
+         serviceDiscovery:
+           type: servicecenter
+           address: http://10.12.0.3:30100 # the address of SC Aggregate
+
+Run the Client
+
+.. code:: bash
+
+   go run examples/discovery/client/main.go
+
+Confirm the multiple datacenters discovery is OK
+''''''''''''''''''''''''''''''''''''''''''''''''
+
+Since client is not a service, we check its running log.
+
+::
+
+   2018-09-29 10:30:25.556 +08:00 INFO registry/bootstrap.go:69 Register [Client] success
+   ...
+   2018-09-29 10:30:25.566 +08:00 WARN servicecenter/servicecenter.go:324 55c783c5c38e11e8951f0a58ac00011d Get instances from remote, key: default Server
+   2018-09-29 10:30:25.566 +08:00 INFO client/client_manager.go:86 Create client for highway:Server:127.0.0.1:8082
+   ...
+   2018/09/29 10:30:25 AddEmploy ------------------------------ employList:<name:"One" phone:"15989351111" >
+
+
+.. _Multiple Datacenters: multidcs.rst
+.. _here: https://github.com/apache/servicecomb-service-center/tree/master/scctl/examples/infrastructures/k8s
\ No newline at end of file
diff --git a/docs/multidcs.PNG b/docs/dev-guides/multidcs.PNG
similarity index 100%
rename from docs/multidcs.PNG
rename to docs/dev-guides/multidcs.PNG
Binary files differ
diff --git a/docs/dev-guides/multidcs.rst b/docs/dev-guides/multidcs.rst
new file mode 100644
index 0000000..6816d7c
--- /dev/null
+++ b/docs/dev-guides/multidcs.rst
@@ -0,0 +1,154 @@
+Multiple Datacenters
+====================
+
+ServiceCenter Aggregate Architecture
+------------------------------------
+
+Now, service center has supported multiple datacenters deployment. Its
+architecture likes below.
+
+.. figure:: multidcs.PNG
+   :alt: architecture
+
+   architecture
+
+As shown in the figure, we deploy an SC(Service-Center) cluster
+independently under each DC(datacenter). Each SC cluster manages the
+micro-service instances under the DC under which it belongs, and the DCs
+are isolated from each other. Another implementation of the discovery
+plug-in, ``Service-Center Aggregate`` service, can access multiple SC
+instances and periodically pull up micro-service instance information so
+that if some micro-services can request aggregate, cross-DCs can be
+implemented using the same API as SC cluster.
+
+If SC aggregate is not deployed globally, SC also supports another way
+to implement multiple DCs discovery, as shown below.
+
+.. figure:: multidcs2.PNG
+   :alt: architecture
+
+   architecture
+
+The difference between the two approaches is that global deployment
+aggregate can divert service discovery traffic, the whole architecture
+is more like a read-write separation architecture, and the SC of each DC
+manage microservice information independently, which reduces the
+complexity. So we recommend the first architecture.
+
+Quick Start
+-----------
+
+Let’s assume you want to install 2 clusters of Service-Center in
+different DCs with following details.
+
+======= ========== =========
+Cluster Datacenter Address
+======= ========== =========
+sc-1    dc-1       10.12.0.1
+sc-2    dc-2       10.12.0.2
+======= ========== =========
+
+you can follow `this`_ guide to install Service-Center in cluster mode.
+After that, we can deploy a Service-Center Aggregate service now.
+
+Start Service-Center Aggregate
+''''''''''''''''''''''''''''''
+
+Edit the configuration of the ip/port on which SC aggregate will run, we
+assume you launch it at 10.12.0.3.
+
+.. code:: bash
+
+   vi conf/app.conf
+   # Replace the below values
+   httpaddr = 10.12.0.3
+   discovery_plugin = servicecenter
+   registry_plugin = buildin
+   self_register = 0
+   manager_cluster = "sc-1=http://10.12.0.1:30100,sc-2=http://10.12.0.2:30100"
+
+   # Start the Service-center
+   ./service-center
+
+Note: Please don’t run start.sh as it will also start the etcd.
+
+Confirm the service is OK
+'''''''''''''''''''''''''
+
+We recommend that you use `scctl`_, and using `cluster command`_
+which makes it very convenient to verify OK.
+
+.. code:: bash
+
+   scctl --addr http://10.12.0.3:30100 get cluster
+   #   CLUSTER |        ENDPOINTS
+   # +---------+-------------------------+
+   #   sc-1    | http://10.12.0.1:30100
+   #   sc-2    | http://10.12.0.2:30100
+
+Example
+-------
+
+Here we show a ``golang`` example of multiple datacenters access, where
+we use an `example`_ of the `go-chassis`_ project, assuming that below.
+
+============ ========== =========
+Microservice Datacenter Address
+============ ========== =========
+Client       dc-1       10.12.0.4
+Server       dc-2       10.12.0.5
+============ ========== =========
+
+Notes: ``go-chassis`` application can run perfectly in the above 2
+architectures. If you are using `java-chassis`_, there are only support
+the service center with the second architecture at the moment. You can
+ref to `here`_ for more details of the second architecture.
+
+Start Server
+''''''''''''
+
+Edit the configuration of the ip/port on which Server will register.
+
+::
+
+   vi examples/discovery/server/conf/chassis.yaml
+
+Replace the below values
+
+.. code:: yaml
+
+   cse:
+     service:
+       registry:
+         type: servicecenter
+         address: http://10.12.0.2:30100 # the address of SC in dc-2
+
+Run the Server
+
+.. code:: bash
+
+   go run examples/discovery/server/main.go
+
+Confirm the multiple datacenters discovery is OK
+''''''''''''''''''''''''''''''''''''''''''''''''
+
+Since client is not a service, we check its running log.
+
+::
+
+   2018-09-29 10:30:25.556 +08:00 INFO registry/bootstrap.go:69 Register [Client] success
+   ...
+   2018-09-29 10:30:25.566 +08:00 WARN servicecenter/servicecenter.go:324 55c783c5c38e11e8951f0a58ac00011d Get instances from remote, key: default Server
+   2018-09-29 10:30:25.566 +08:00 INFO client/client_manager.go:86 Create client for highway:Server:127.0.0.1:8082
+   ...
+   2018/09/29 10:30:25 AddEmploy ------------------------------ employList:<name:"One" phone:"15989351111" >
+
+
+.. _this: ../user-guides/sc-cluster.rst
+.. _scctl: ../intro/scctl.md
+.. _cluster command: https://github.com/apache/servicecomb-service-center/blob/master/scctl/pkg/plugin/README.md#cluster-options
+.. _example: https://github.com/go-chassis/go-chassis/tree/master/examples/discovery
+.. _go-chassis: https://github.com/go-chassis/go-chassis
+.. _java-chassis: https://github.com/apache/servicecomb-java-chassis
+.. _here: multidcs2.rst
+
diff --git a/docs/multidcs2-1.PNG b/docs/dev-guides/multidcs2-1.PNG
similarity index 100%
rename from docs/multidcs2-1.PNG
rename to docs/dev-guides/multidcs2-1.PNG
Binary files differ
diff --git a/docs/multidcs2.PNG b/docs/dev-guides/multidcs2.PNG
similarity index 100%
rename from docs/multidcs2.PNG
rename to docs/dev-guides/multidcs2.PNG
Binary files differ
diff --git a/docs/dev-guides/multidcs2.rst b/docs/dev-guides/multidcs2.rst
new file mode 100644
index 0000000..7b2d538
--- /dev/null
+++ b/docs/dev-guides/multidcs2.rst
@@ -0,0 +1,148 @@
+Using Java chassis for cross data center access
+===============================================
+
+Now that you’ve seen two `multiple data center`_ architectures of the
+Service Center, we’ll show you how to implement micro-service cross data
+center access with the `java-chassis`_ framework.
+
+.. figure:: multidcs2-1.PNG
+   :alt: architecture
+
+   architecture
+
+Quick Start
+-----------
+
+Let’s assume you want to install 2 clusters of Service-Center in
+different DCs with following details.
+
+======= ========== =========
+Cluster Datacenter Address
+======= ========== =========
+sc-1    dc-1       10.12.0.1
+sc-2    dc-2       10.12.0.2
+======= ========== =========
+
+Start Service-Center
+''''''''''''''''''''
+
+Edit the configuration of the ip/port on which SC will run in dc-1. And
+here we assume your etcd is running on http://127.0.0.1:2379 (you can
+follow `this`_ guide to install etcd in cluster mode.)
+
+.. code:: bash
+
+   vi conf/app.conf
+   # Replace the below values
+   httpaddr = 10.12.0.1
+   discovery_plugin = aggregate
+   aggregate_mode = "etcd,servicecenter"
+   manager_name = "sc-1"
+   manager_addr = "http://127.0.0.1:2379"
+   manager_cluster = "sc-1=http://10.12.0.1:30100,sc-2=http://10.12.0.2:30100"
+
+   # Start the Service-center
+   ./service-center
+
+Notes: + ``manager_name`` is the alias of the data center.
+``manager_addr`` is the etcd cluster client urls. ``manager_cluster`` is
+the full Service Center clusters list. + To deploy Service Center in
+dc-2, you can repeat the above steps and just change the ``httpaddr``
+value to ``10.12.0.2``.
+
+Confirm the service is OK
+'''''''''''''''''''''''''
+
+We recommend that you use `scctl`_, and using `cluster command`_
+which makes it very convenient to verify OK.
+
+.. code:: bash
+
+   scctl --addr http://10.12.0.3:30100 get cluster
+   #   CLUSTER |        ENDPOINTS
+   # +---------+-------------------------+
+   #   sc-1    | http://10.12.0.1:30100
+   #   sc-2    | http://10.12.0.2:30100
+
+Example
+-------
+
+Here we show a ``java`` example of multiple datacenters access, where we
+use an `example`_, assuming that below.
+
+============ ========== =========
+Microservice Datacenter Address
+============ ========== =========
+Client       dc-1       10.12.0.4
+Server       dc-2       10.12.0.5
+============ ========== =========
+
+Start springmvc-server
+''''''''''''''''''''''
+
+Edit the configuration of the ip/port on which ``springmvc-server`` will
+register.
+
+::
+
+   vi src/main/resources/microservice.yaml
+
+Replace the below values
+
+.. code:: yaml
+
+   cse:
+     service:
+       registry:
+         address: http://10.12.0.2:30100 # the address of SC in dc-2
+
+Run the Server
+
+.. code:: bash
+
+   mvn clean install
+   java -jar target/springmvc-server-0.0.1-SNAPSHOT.jar
+
+Start springmvc-client
+''''''''''''''''''''''
+
+Edit the configuration of the ip/port on which ``springmvc-client`` will
+register.
+
+.. code:: bash
+
+   vi src/main/resources/microservice.yaml
+
+Replace the below values
+
+.. code:: yaml
+
+   cse:
+     service:
+       registry:
+         address: http://10.12.0.1:30100 # the address of SC in dc-1
+
+Run the Client
+
+.. code:: bash
+
+   mvn clean install
+   java -jar target/springmvc-client-0.0.1-SNAPSHOT.jar
+
+Confirm the multiple datacenters discovery is OK
+''''''''''''''''''''''''''''''''''''''''''''''''
+
+Since ``springmvc-client`` is not a service, we check its running log.
+
+::
+
+   ...
+   [2018-10-19 23:04:42,800/CST][main][INFO]............. test finished ............ org.apache.servicecomb.demo.TestMgr.summary(TestMgr.java:83)
+
+
+.. _multiple data center: multidcs.rst
+.. _java-chassis: https://github.com/apache/servicecomb-java-chassis
+.. _this: https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md
+.. _scctl: ../scctl/README.md
+.. _cluster command: https://github.com/apache/servicecomb-service-center/tree/master/scctl/pkg/plugin/README.md#cluster-options
+.. _example: https://github.com/apache/servicecomb-java-chassis/tree/master/demo/demo-springmvc
\ No newline at end of file
diff --git a/docs/get-started.rst b/docs/get-started.rst
new file mode 100644
index 0000000..e990290
--- /dev/null
+++ b/docs/get-started.rst
@@ -0,0 +1,9 @@
+Get started
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   get-started/install.md
+
diff --git a/docs/get-started/install.md b/docs/get-started/install.md
new file mode 100644
index 0000000..be15705
--- /dev/null
+++ b/docs/get-started/install.md
@@ -0,0 +1,118 @@
+## Quick Start
+
+### Getting Service Center
+
+The easiest way to get Service Center is to use one of the pre-built release binaries which are available for Linux, Windows and Docker.
+
+[github-release]: http://servicecomb.apache.org/release/
+
+### Running Service Center using the Release
+
+You can download our latest release from [ServiceComb Website][github-release].When you get these release, you can execute the start script to run Service Center.
+
+Windows(apache-servicecomb-service-center-XXX-windows-amd64.zip):
+```
+start-service-center.bat
+```
+
+Linux(apache-servicecomb-service-center-XXXX-linux-amd64.tar.gz):
+```sh
+./start-service-center.sh
+```
+Docker:
+```sh
+docker pull servicecomb/service-center
+docker run -d -p 30100:30100 servicecomb/service-center
+```
+
+Note: The Releases of Service-Center uses emebeded etcd, if you want to use the seperate instance of etcd then you can deploy the etcd seperately and configure the etcd ip over here.
+```
+vi conf/app.conf
+
+## Edit this file
+# registry address
+# 1. if registry_plugin equals to 'embeded_etcd'
+# manager_name = "sc-0"
+# manager_addr = "http://127.0.0.1:2380"
+# manager_cluster = "sc-0=http://127.0.0.1:2380"
+# 2. if registry_plugin equals to 'etcd'
+# manager_cluster = "127.0.0.1:2379"
+manager_cluster = "127.0.0.1:2379"
+```
+
+By default the SC comes up on 127.0.0.1:30100, however you can change the configuration of these address over here.
+
+```
+vi conf/app.conf
+
+httpaddr = 127.0.0.1
+httpport = 30100
+```
+
+### Building & Running Service-Center from source
+
+Requirements
+
++ [Go](https://golang.org) version 1.8+ is required to build the latest version of Service-Center.
+
+Download the Code
+```sh
+git clone https://github.com/apache/servicecomb-service-center.git $GOPATH/src/github.com/apache/servicecomb-service-center
+cd $GOPATH/src/github.com/apache/servicecomb-service-center
+```
+
+Dependencies
+
+you can download dependencies directly using command `go mod`. Please follow below steps to
+download all the dependency.
+
+```sh
+# greater then go1.11
+GO111MODULE=on go mod download
+GO111MODULE=on go mod vendor
+```
+
+Build the Service-Center
+
+```sh
+go build -o service-center
+```
+
+First, you need to run a etcd(version: 3.x) as a database service and then modify the etcd IP and port in the Service Center configuration file (./etc/conf/app.conf : manager_cluster).
+
+```sh
+wget https://github.com/coreos/etcd/releases/download/v3.1.8/etcd-v3.1.8-linux-amd64.tar.gz
+tar -xvf etcd-v3.1.8-linux-amd64.tar.gz
+cd etcd-v3.1.8-linux-amd64
+./etcd
+
+cd $GOPATH/src/github.com/apache/servicecomb-service-center
+cp -r ./etc/conf .
+./service-center
+```
+This will bring up Service Center listening on ip/port 127.0.0.1:30100 for service communication.If you want to change the listening ip/port, you can modify it in the Service Center configuration file (./conf/app.conf : httpaddr,httpport).
+
+[github-release]: https://github.com/servicecomb/service-center/releases/
+
+### Running Frontend using the Release
+
+You can download our latest release from ServiceComb Website and then untar it and run start-frontend.sh/start-frontend.bat.
+This will bring up the Service-Center UI on [http://127.0.0.1:30103](http://127.0.0.1:30103).
+
+Windows(apache-servicecomb-service-center-XXX-windows-amd64.zip):
+```
+start-frontend.bat
+```
+
+Linux(apache-servicecomb-service-center-XXXX-linux-amd64.tar.gz):
+```sh
+./start-frontend.sh
+```
+
+Note: By default frontend runs on 127.0.0.1, if you want to change this then you can change it in `conf/app.conf`.
+```
+frontend_host_ip=127.0.0.1
+frontend_host_port=30103
+```
+
+You can follow the guide over [here](https://github.com/apache/servicecomb-service-center/blob/master/frontend/Readme.md#running-ui-from-source-code) to run the Frontend from source.
\ No newline at end of file
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000..a624c97
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,43 @@
+.. servicecomb-service-center documentation master file, created by
+   sphinx-quickstart on Mon Jun 22 17:04:47 2020.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to servicecomb-service-center's documentation!
+======================================================
+
+.. toctree::
+   :maxdepth: 4
+   :caption: User Documentations
+   :glob:
+
+   intro
+   get-started
+   user-guides
+   plugin-tracing-guides
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Development Documentations
+
+   dev-guides
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Design Documentations
+
+   design-guides
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Release Version
+
+   release
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/integration-grafana.md b/docs/integration-grafana.md
deleted file mode 100644
index 29a1bb4..0000000
--- a/docs/integration-grafana.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Integrate with Grafana
-
-As Service-Center uses Prometheus lib to report metrics.
-Then it is easy to integrate with Grafana.
-Here is a [`DEMO`](/examples/infrastructures/docker) to deploy Service-Center with Grafana, 
-and this is the [`template`](/integration/health-metrics-grafana.json) file 
-can be imported in Grafana.
-
-After the import, you can get the view like blow.
-
-![Grafana](/docs/integration-grafana.PNG)
-
-Note: As the template has an ASF header, please remove the header first
-if you import this template file.
\ No newline at end of file
diff --git a/docs/intro.rst b/docs/intro.rst
new file mode 100644
index 0000000..f400f0c
--- /dev/null
+++ b/docs/intro.rst
@@ -0,0 +1,10 @@
+Introductions
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   intro/what-is.md
+   intro/scctl.md
+
diff --git a/docs/intro/scctl.md b/docs/intro/scctl.md
new file mode 100644
index 0000000..23e9299
--- /dev/null
+++ b/docs/intro/scctl.md
@@ -0,0 +1,54 @@
+# Service Center Commands
+
+## scctl
+
+`scctl` enables user to view the list of MicroServices registered in service center(version 1.1.0+).
+You can view all the commands from [here](https://github.com/apache/servicecomb-service-center/blob/master/scctl/pkg/plugin/)
+
+### QuickStart Guide
+
+##### Install
+Easiest way to get started with `scctl` is to download the release 
+from [`here`](http://servicecomb.apache.org/release/)
+and then untar/unzip it based on your OS.
+
+##### Check the version
+Windows(apache-servicecomb-service-center-XXX-windows-amd64.zip):
+```
+scctl.exe version
+```
+
+Linux(apache-servicecomb-service-center-XXXX-linux-amd64.tar.gz):
+```sh
+./scctl version
+```
+
+Note: If you already bootstrap SC and listen on `127.0.0.1:30100`, this
+command will also print the SC version.
+
+### Running scctl from source code
+
+Requirements
+
++ [Go](https://golang.org) version 1.8+ is required to build the latest version of scctl.
+
+However if you want to try our latest code then you can follow the below steps
+```
+#Make sure your GOPATH is set correctly and download all the vendors of SC
+git clone https://github.com/apache/servicecomb-service-center.git $GOPATH/src/github.com/apache/servicecomb-service-center
+cd $GOPATH/src/github.com/apache/servicecomb-service-center
+
+cd scctl
+
+go build
+
+```
+Windows:
+```
+scctl.exe version
+```
+
+Linux:
+```sh
+./scctl version
+```
diff --git a/docs/intro/what-is.md b/docs/intro/what-is.md
new file mode 100644
index 0000000..f382ce6
--- /dev/null
+++ b/docs/intro/what-is.md
@@ -0,0 +1,20 @@
+# Introduction
+
+## What is ServiceComb Service Center
+
+Apache ServiceComb Service-Center is a Restful based service-registry that provides micro-services discovery and 
+micro-service management. It is based on Open API format and provides features like service-discovery, fault-tolerance, 
+dynamic routing, notify subscription and scalable by design. 
+It has high performance cache design and separate entity management for micro-services and their instances. 
+It provides out of box support for metrics and tracing. It has a web portal to manage the micro-services.
+
+
+## Why use ServiceComb Service Center
+
+ServiceCenter is a service registry. Like other service registry, 
+its main role is to solve the problem of service registration and discovery, 
+that is the problem of dynamic routing. At the same time, 
+in order to better solve the problem of cross-team collaboration, 
+it adds support for contract (based on OpenAPI specifications) services. 
+If it is used with contract tools (Toolkit) or Java microservice development kit (Java Chassis), 
+communication Interfaces will become transparent, allowing users to focus on business development.
diff --git a/docs/kubeclusters.md b/docs/kubeclusters.md
deleted file mode 100644
index fb5ed48..0000000
--- a/docs/kubeclusters.md
+++ /dev/null
@@ -1,73 +0,0 @@
-Access Distinct Clusters
--------
-
-## ServiceCenter Aggregate Architecture
-
-In the [`Multiple Datacenters`](/docs/multidcs.md) article, we introduce
-the aggregation architecture of service center. In fact, this aggregation
-architecture of service center can be applied not only to the scene deployed 
-in multiple datacenters, but also to the scene services data aggregation in 
-multiple kubernetes clusters.
-
-![architecture](/docs/kubeclusters.PNG)
-
-The service centers deployed in distinct kubernetes clusters can communicate 
-with each other, sync the services data from other kubernetes clusters.
-Applications can discover services from different the kubernetes cluster through
-using the service center HTTP API.
-**It solve the problem of isolation between kubernetes clusters**.
-
-## Quick Start
-
-Let's assume you want to install 2 clusters of Service-Center in different Kubernetes clusters with following details.
-
-| Cluster | Kubernetes | namespace  | Node        |  
-| :-----: | :--------: | :--------: | :---------: |  
-| sc1     | k1         | default    | 10.12.0.1   |   
-| sc2     | k2         | default    | 10.12.0.2   | 
-
-To facilitate deployment, we will publish the service address of the service center in [`NodePort`] mode.
-
-##### Deploy the Service Center
-
-Using helm to deploy the service center to kubernetes here, the instructions for specific `values` can be referred to
-[`here`](/examples/infrastructures/k8s/README.md#helm-configuration-values).
-
-Take deployment to kubernetes cluster 1 as an example.
-```bash
-# login the k1 kubernetes master node to deploy sc1
-git clone git@github.com:apache/servicecomb-service-center.git
-cd examples/infrastructures/k8s
-helm install --name k1 \
-    --set sc.discovery.clusters="sc2=http://10.12.0.2:30100" \
-    --set sc.discovery.aggregate="k8s\,servicecenter" \
-    --set sc.registry.type="buildin" \
-    --set sc.service.type=NodePort \
-    service-center/
-```
-Notes: To deploy Service Center in kuberbetes cluster 2, you can repeat the
-above steps and just change the `sc.discovery.clusters` value to 
-`sc1=http://10.12.0.1:30100`.
-
-##### Confirm the service is OK
-
-We recommend that you use [`scctl`](/scctl/README.md), and using
-[`cluster command`](/scctl/pkg/plugin/README.md#cluster-options)
-which makes it very convenient to verify OK.
-
-```bash
-# check the sc1 cluster api
-scctl --addr http://10.12.0.3:30100 get cluster
-#   CLUSTER |        ENDPOINTS         
-# +---------+-------------------------+
-#   sc2     | http://10.12.0.2:30100
-
-# check the sc2 cluster api
-scctl --addr http://10.12.0.3:30100 get cluster
-#   CLUSTER |        ENDPOINTS         
-# +---------+-------------------------+
-#   sc1     | http://10.12.0.1:30100
-```
-
-
-
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000..7893348
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.http://sphinx-doc.org/
+	exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+
+:end
+popd
diff --git a/docs/multidcs.md b/docs/multidcs.md
deleted file mode 100644
index 1f8e341..0000000
--- a/docs/multidcs.md
+++ /dev/null
@@ -1,140 +0,0 @@
-Multiple Datacenters
--------
-
-## ServiceCenter Aggregate Architecture
-
-Now, service center has supported multiple datacenters deployment. 
-Its architecture likes below.
-
-![architecture](/docs/multidcs.PNG)
-
-As shown in the figure, we deploy an SC(Service-Center) cluster independently under each DC(datacenter).
-Each SC cluster manages the micro-service instances under the DC under which it belongs, and the DCs are
-isolated from each other. Another implementation of the discovery plug-in, `Service-Center Aggregate` service, can
-access multiple SC instances and periodically pull up micro-service instance information so that if some
-micro-services can request aggregate, cross-DCs can be implemented using the same API as SC cluster.
-
-If SC aggregate is not deployed globally, SC also supports another way to implement multiple DCs discovery,
-as shown below.
-
-![architecture](/docs/multidcs2.PNG)
-
-The difference between the two approaches is that global deployment aggregate can divert service discovery traffic,
-the whole architecture is more like a read-write separation architecture, and the SC of each DC manage microservice
-information independently, which reduces the complexity. So we recommend the first architecture.
-
-## Quick Start
-
-Let's assume you want to install 2 clusters of Service-Center in different DCs with following details.
-
-| Cluster | Datacenter  | Address     |  
-| :-----: | :---------: | :---------: |  
-| sc-1    | dc-1        | 10.12.0.1   |   
-| sc-2    | dc-2        | 10.12.0.2   | 
-
-you can follow [this](/docs/sc-cluster.md) guide to install Service-Center in cluster mode. After that,
-we can deploy a Service-Center Aggregate service now. 
-
-##### Start Service-Center Aggregate
-
-Edit the configuration of the ip/port on which SC aggregate will run, we assume you launch it at 10.12.0.3.
-```bash
-vi conf/app.conf
-# Replace the below values
-httpaddr = 10.12.0.3
-discovery_plugin = servicecenter
-registry_plugin = buildin
-self_register = 0
-manager_cluster = "sc-1=http://10.12.0.1:30100,sc-2=http://10.12.0.2:30100"
-
-# Start the Service-center
-./service-center
-```
-
-Note: Please don't run start.sh as it will also start the etcd.
-
-##### Confirm the service is OK
-
-We recommend that you use [`scctl`](/scctl/README.md), and using
-[`cluster command`](/scctl/pkg/plugin/README.md#cluster-options)
-which makes it very convenient to verify OK.
-
-```bash
-scctl --addr http://10.12.0.3:30100 get cluster
-#   CLUSTER |        ENDPOINTS         
-# +---------+-------------------------+
-#   sc-1    | http://10.12.0.1:30100  
-#   sc-2    | http://10.12.0.2:30100
-```
-
-## Example
-
-Here we show a `golang` example of multiple datacenters access, where we use an 
-[`example`](https://github.com/go-chassis/go-chassis/tree/master/examples/discovery)
-of the [`go-chassis`](https://github.com/go-chassis/go-chassis) project, assuming that below.
-
-| Microservice | Datacenter  | Address     |  
-| :-----:      | :---------: | :---------: |  
-| Client       | dc-1        | 10.12.0.4   |   
-| Server       | dc-2        | 10.12.0.5   |
-
-Notes: `go-chassis` application can run perfectly in the above 2 architectures.
-If you are using [`java-chassis`](https://github.com/apache/servicecomb-java-chassis),
-there are only support the service center with the second architecture at the moment.
-You can ref to [`here`](/docs/multidcs2.md) for more details of the second architecture.
-
-##### Start Server
-
-Edit the configuration of the ip/port on which Server will register.
-```
-vi examples/discovery/server/conf/chassis.yaml
-```
-Replace the below values
-```yaml
-cse:
-  service:
-    registry:
-      type: servicecenter
-      address: http://10.12.0.2:30100 # the address of SC in dc-2
-```
-
-Run the Server
-```bash
-go run examples/discovery/server/main.go
-```
-##### Start Client
-
-Edit the configuration of the ip/port on which Client will register and discover.
-```bash
-vi examples/discovery/client/conf/chassis.yaml
-```
-Replace the below values
-```yaml
-cse:
-  service:
-    registry:
-      registrator:
-        type: servicecenter
-        address: http://10.12.0.1:30100 # the address of SC in dc-1
-      serviceDiscovery:
-        type: servicecenter
-        address: http://10.12.0.3:30100 # the address of SC Aggregate
-```
-
-Run the Client
-```bash
-go run examples/discovery/client/main.go
-```
-
-##### Confirm the multiple datacenters discovery is OK
-
-Since client is not a service, we check its running log.
-```
-2018-09-29 10:30:25.556 +08:00 INFO registry/bootstrap.go:69 Register [Client] success
-...
-2018-09-29 10:30:25.566 +08:00 WARN servicecenter/servicecenter.go:324 55c783c5c38e11e8951f0a58ac00011d Get instances from remote, key: default Server
-2018-09-29 10:30:25.566 +08:00 INFO client/client_manager.go:86 Create client for highway:Server:127.0.0.1:8082
-...
-2018/09/29 10:30:25 AddEmploy ------------------------------ employList:<name:"One" phone:"15989351111" > 
-```
-
diff --git a/docs/multidcs2.md b/docs/multidcs2.md
deleted file mode 100644
index 6790395..0000000
--- a/docs/multidcs2.md
+++ /dev/null
@@ -1,114 +0,0 @@
-Using Java chassis for cross data center access
--------
-
-Now that you've seen two [`multiple data center`](/docs/multidcs.md) architectures of the Service Center, 
-we'll show you how to implement micro-service cross data center access with the 
-[`java-chassis`](https://github.com/apache/servicecomb-java-chassis) framework.
-
-![architecture](/docs/multidcs2-1.PNG)
-
-## Quick Start
-
-Let's assume you want to install 2 clusters of Service-Center in different DCs with following details.
-
-| Cluster | Datacenter  | Address     |  
-| :-----: | :---------: | :---------: |  
-| sc-1    | dc-1        | 10.12.0.1   |   
-| sc-2    | dc-2        | 10.12.0.2   | 
-
-##### Start Service-Center
-
-Edit the configuration of the ip/port on which SC will run in dc-1.
-And here we assume your etcd is running on http://127.0.0.1:2379 (you can follow [this](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md) guide to install etcd in cluster mode.)
-```bash
-vi conf/app.conf
-# Replace the below values
-httpaddr = 10.12.0.1
-discovery_plugin = aggregate
-aggregate_mode = "etcd,servicecenter"
-manager_name = "sc-1"
-manager_addr = "http://127.0.0.1:2379"
-manager_cluster = "sc-1=http://10.12.0.1:30100,sc-2=http://10.12.0.2:30100"
-
-# Start the Service-center
-./service-center
-```
-
-Notes:
-+ `manager_name` is the alias of the data center.
-`manager_addr` is the etcd cluster client urls.
-`manager_cluster` is the full Service Center clusters list.
-+ To deploy Service Center in dc-2, you can repeat the
-above steps and just change the `httpaddr` value to `10.12.0.2`.
-
-##### Confirm the service is OK
-
-We recommend that you use [`scctl`](/scctl/README.md), and using
-[`cluster command`](/scctl/pkg/plugin/README.md#cluster-options)
-which makes it very convenient to verify OK.
-
-```bash
-scctl --addr http://10.12.0.3:30100 get cluster
-#   CLUSTER |        ENDPOINTS         
-# +---------+-------------------------+
-#   sc-1    | http://10.12.0.1:30100  
-#   sc-2    | http://10.12.0.2:30100
-```
-
-## Example
-
-Here we show a `java` example of multiple datacenters access, where we use an 
-[`example`](https://github.com/apache/servicecomb-java-chassis/tree/master/demo/demo-springmvc),
-assuming that below.
-
-| Microservice | Datacenter  | Address     |  
-| :-----:      | :---------: | :---------: |  
-| Client       | dc-1        | 10.12.0.4   |   
-| Server       | dc-2        | 10.12.0.5   |
-
-##### Start springmvc-server
-
-Edit the configuration of the ip/port on which `springmvc-server` will register.
-```
-vi src/main/resources/microservice.yaml
-```
-Replace the below values
-```yaml
-cse:
-  service:
-    registry:
-      address: http://10.12.0.2:30100 # the address of SC in dc-2
-```
-
-Run the Server
-```bash
-mvn clean install
-java -jar target/springmvc-server-0.0.1-SNAPSHOT.jar
-```
-##### Start springmvc-client
-
-Edit the configuration of the ip/port on which `springmvc-client` will register.
-```bash
-vi src/main/resources/microservice.yaml
-```
-Replace the below values
-```yaml
-cse:
-  service:
-    registry:
-      address: http://10.12.0.1:30100 # the address of SC in dc-1
-```
-
-Run the Client
-```bash
-mvn clean install
-java -jar target/springmvc-client-0.0.1-SNAPSHOT.jar
-```
-
-##### Confirm the multiple datacenters discovery is OK
-
-Since `springmvc-client` is not a service, we check its running log.
-```
-...
-[2018-10-19 23:04:42,800/CST][main][INFO]............. test finished ............ org.apache.servicecomb.demo.TestMgr.summary(TestMgr.java:83)
-```
diff --git a/docs/plugin-tracing-guides.rst b/docs/plugin-tracing-guides.rst
new file mode 100644
index 0000000..bc739db
--- /dev/null
+++ b/docs/plugin-tracing-guides.rst
@@ -0,0 +1,9 @@
+Tracing Plugins
+=========================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   plugins-tracing/tracing.md
+
diff --git a/docs/tracing-file.PNG b/docs/plugins-tracing/tracing-file.PNG
similarity index 100%
rename from docs/tracing-file.PNG
rename to docs/plugins-tracing/tracing-file.PNG
Binary files differ
diff --git a/docs/tracing-server.PNG b/docs/plugins-tracing/tracing-server.PNG
similarity index 100%
rename from docs/tracing-server.PNG
rename to docs/plugins-tracing/tracing-server.PNG
Binary files differ
diff --git a/docs/tracing.md b/docs/plugins-tracing/tracing.md
similarity index 87%
rename from docs/tracing.md
rename to docs/plugins-tracing/tracing.md
index e6c7c19..e2ae7a2 100644
--- a/docs/tracing.md
+++ b/docs/plugins-tracing/tracing.md
@@ -7,7 +7,9 @@
 
 ## To zipkin server
 
-![zipkin](/docs/tracing-server.PNG)
+```eval_rst
+.. image:: tracing-server.PNG
+```
 
 ### Add the zipkin server endpoint
 ```
@@ -21,7 +23,9 @@
 
 ## To file
 
-![file](/docs/tracing-file.PNG)
+```eval_rst
+.. image:: tracing-file.PNG
+```
 
 ### Customize the path of trace data file
 ```
diff --git a/docs/release.rst b/docs/release.rst
new file mode 100644
index 0000000..6965272
--- /dev/null
+++ b/docs/release.rst
@@ -0,0 +1,12 @@
+Release Notes
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   release/Readme.md
+   release/releaseNotes-1.0.0.md
+   release/releaseNotes-1.0.0-m1.md
+   release/releaseNotes-1.0.0-m2.md
+   release/releaseNotes-1.1.0.md
\ No newline at end of file
diff --git a/docs/release/Readme.md b/docs/release/Readme.md
index e17ee39..ff07c61 100644
--- a/docs/release/Readme.md
+++ b/docs/release/Readme.md
@@ -1,10 +1,10 @@
-## Service-Center Release
+# Service-Center Release
 
 #### Release Notes
- - [Service-Center-1.1.0 Release Notes](/docs/release/releaseNotes-1.1.0.md)
- - [Service-Center-1.0.0 Release Notes](/docs/release/releaseNotes-1.0.0.md)
- - [Service-Center-1.0.0-m1 Release Notes](/docs/release/releaseNotes-1.0.0-m1.md)
- - [Service-Center-1.0.0-m2 Release Notes](/docs/release/releaseNotes-1.0.0-m2.md)
+ - [Service-Center-1.1.0 Release Notes](releaseNotes-1.1.0.md)
+ - [Service-Center-1.0.0 Release Notes](releaseNotes-1.0.0.md)
+ - [Service-Center-1.0.0-m1 Release Notes](releaseNotes-1.0.0-m1.md)
+ - [Service-Center-1.0.0-m2 Release Notes](releaseNotes-1.0.0-m2.md)
  
 
 #### Running Apache Rat tool
@@ -41,6 +41,6 @@
  - cert_pwd server.cer trust.cer :  Skip ssl files
  - *.tpl : Ignore template files
  - glide.yaml go.mod go.sum : Skip dependency config files 
-You can access the latest RAT report [here](/docs/release/rat-report)  
+You can access the latest RAT report [here](/rat-report)  
  
  
diff --git a/docs/release/releaseNotes-1.0.0-m1.md b/docs/release/releaseNotes-1.0.0-m1.md
index 7158fbb..e0fa4f7 100644
--- a/docs/release/releaseNotes-1.0.0-m1.md
+++ b/docs/release/releaseNotes-1.0.0-m1.md
@@ -1,4 +1,4 @@
-## Release Notes
+# Release Notes
 
 ### Apache ServiceComb Service-Center (incubating) version 1.0.0-m1
 #### API Changes :
diff --git a/docs/release/releaseNotes-1.0.0-m2.md b/docs/release/releaseNotes-1.0.0-m2.md
index 0bc5247..05da566 100644
--- a/docs/release/releaseNotes-1.0.0-m2.md
+++ b/docs/release/releaseNotes-1.0.0-m2.md
@@ -1,4 +1,4 @@
-## Release Notes
+# Release Notes
 
 ### Apache ServiceComb Service-Center (incubating) version 1.0.0-m2
 
diff --git a/docs/release/releaseNotes-1.0.0.md b/docs/release/releaseNotes-1.0.0.md
index 1ba7b7f..f2ea51e 100644
--- a/docs/release/releaseNotes-1.0.0.md
+++ b/docs/release/releaseNotes-1.0.0.md
@@ -1,4 +1,4 @@
-## Release Notes
+# Release Notes
 
 ### Apache ServiceComb Service-Center (incubating) version 1.0.0
 
diff --git a/docs/release/releaseNotes-1.1.0.md b/docs/release/releaseNotes-1.1.0.md
index 17f8dd2..1098b61 100644
--- a/docs/release/releaseNotes-1.1.0.md
+++ b/docs/release/releaseNotes-1.1.0.md
@@ -1,4 +1,4 @@
-
+# Release Notes
         Release Notes - Apache ServiceComb - Version service-center-1.1.0
             
 <h2>        Bug
diff --git a/docs/sc-cluster.md b/docs/sc-cluster.md
deleted file mode 100644
index 4d2427b..0000000
--- a/docs/sc-cluster.md
+++ /dev/null
@@ -1,109 +0,0 @@
-### Deploying Service-Center in Cluster Mode
-
-As Service-center is a stateless application so it can be seamlessly deployed in cluster mode to achieve HA.
-SC is dependent on the etcd to store the microservices information so you can opt for running etcd standalone or in [cluster](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md) mode.
-Once you are done with installing the etcd either in cluster or standalone mode then you can follow the below steps to run the Service-Center.
-
-Let's assume you want to install 2 instances of Service-Center on VM with following details  
-
-| Name    | Address     |  
-| :-----: | :---------: |  
-| VM1     | 10.12.0.1   |   
-| VM2     | 10.12.0.2   |  
-
-Here we assume your etcd is running on http://10.12.0.4:2379 (you can follow [this](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md) guide to install etcd in cluster mode.)
-
-##### Step 1
-Download the SC release from [here](https://github.com/apache/servicecomb-service-center/releases) on all the VM's.
-```
-# Untar the release
-# tar -xvf service-center-X.X.X-linux-amd64.tar.gz
-
-```
-
-Note: Please don't run start.sh as it will also start the etcd.
-
-##### Step 2
-Edit the configuration of the ip/port on which SC will run and etcd ip
-###### VM1
-```
-# vi conf/app.conf
-#Replace the below values
-httpaddr = 10.12.0.1
-manager_cluster = "10.12.0.4:2379"
-
-# Start the Service-center
-./service-center
-```
-
-###### VM2
-```
-# vi conf/app.conf
-#Replace the below values
-httpaddr = 10.12.0.2
-manager_cluster = "10.12.0.4:2379"
-
-# Start the Service-center
-./service-center
-```
-
-Note: In `manger_cluster` you can put the multiple instances of etcd in the cluster like 
-```
-manager_cluster= "10.12.0.4:2379,10.12.0.X:2379,10.12.0.X:2379"
-```
-
-#### Step 4
-Verify your instances
-```
-# curl http://10.12.0.1:30101/v4/default/registry/health
-{
-    "instances": [
-        {
-            "instanceId": "d6e9e976f9df11e7a72b286ed488ff9f",
-            "serviceId": "d6e99f4cf9df11e7a72b286ed488ff9f",
-            "endpoints": [
-                "rest://10.12.0.1:30100"
-            ],
-            "hostName": "service_center_10_12_0_1",
-            "status": "UP",
-            "healthCheck": {
-                "mode": "push",
-                "interval": 30,
-                "times": 3
-            },
-            "timestamp": "1516012543",
-            "modTimestamp": "1516012543"
-        },
-        {
-            "instanceId": "16d4cb35f9e011e7a58a286ed488ff9f",
-            "serviceId": "d6e99f4cf9df11e7a72b286ed488ff9f",
-            "endpoints": [
-                "rest://10.12.0.2:30100"
-            ],
-            "hostName": "service_center_10_12_0_2",
-            "status": "UP",
-            "healthCheck": {
-                "mode": "push",
-                "interval": 30,
-                "times": 3
-            },
-            "timestamp": "1516012650",
-            "modTimestamp": "1516012650"
-        }
-    ]
-}
-```
-
-As we can see here the Service-Center can auto-discover all the instances of the Service-Center running in cluster, this auto-discovery feature is used by the [Java-Chassis SDK](https://github.com/apache/servicecomb-java-chassis) to auto-discover all the instances of the Service-Center by knowing atleast 1 IP of Service-Center running in cluster.
-
-In your microservice.yaml you can provide the SC IP of both the instance or any one instance, sdk can auto-discover other instances and use the other instances to get microservice details in case of failure of the first one.
-```
-cse:
-  service:
-    registry:
-      address: "http://10.12.0.1:30100,http://10.12.0.2:30100"
-      autodiscovery: true
-```
-In this case sdk will be able to discover all the instances of SC in cluster.
-
-
diff --git a/docs/security-tls.md b/docs/security-tls.md
deleted file mode 100644
index 1ce23ef..0000000
--- a/docs/security-tls.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Setup SSL/TLS
-
-## Requirement
-Service center(SC) takes several files related SSL/TLS options.
-
-1. Environment variable 'SSL_ROOT': The directory contains certificates. If not set, uses 'etc/ssl' under the SC work directory.
-1. $SSL_ROOT/trust.cer: Trusted certificate authority.
-1. $SSL_ROOT/server.cer: Certificate used for SSL/TLS connections to SC.
-1. $SSL_ROOT/server_key.pem: Key for the certificate. If key is encrypted, 'cert_pwd' must be set.
-1. $SSL_ROOT/cert_pwd(optional): The password used to decrypt the private key.
-
-## Configuration
-Please modify the conf/app.conf before start up SC
-
-1. ssl_mode: Enabled SSL/TLS mode. [0, 1]
-1. ssl_verify_client: Whether the SC verify client(including etcd server). [0, 1]
-1. ssl_min_version: Minimal SSL/TLS protocol version. ["TLSv1.0", "TLSv1.1", "TLSv1.2", "TLSv1.3"], based on Go version
-1. ssl_ciphers: A list of cipher suite. By default, uses TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
diff --git a/docs/user-guides.rst b/docs/user-guides.rst
new file mode 100644
index 0000000..fcee1f8
--- /dev/null
+++ b/docs/user-guides.rst
@@ -0,0 +1,11 @@
+User Guides
+======================================
+
+.. toctree::
+   :maxdepth: 4
+   :glob:
+
+   user-guides/pr-raising-guide.md
+   user-guides/security-tls.md
+   user-guides/sc-cluster.rst
+   user-guides/integration-grafana.md
diff --git a/docs/integration-grafana.PNG b/docs/user-guides/integration-grafana.PNG
similarity index 100%
rename from docs/integration-grafana.PNG
rename to docs/user-guides/integration-grafana.PNG
Binary files differ
diff --git a/docs/user-guides/integration-grafana.md b/docs/user-guides/integration-grafana.md
new file mode 100644
index 0000000..effb7b9
--- /dev/null
+++ b/docs/user-guides/integration-grafana.md
@@ -0,0 +1,16 @@
+# Integrate with Grafana
+
+As Service-Center uses Prometheus lib to report metrics.
+Then it is easy to integrate with Grafana.
+Here is a [DEMO](https://github.com/apache/servicecomb-service-center/blob/master/examples/infrastructures/docker) to deploy Service-Center with Grafana, 
+and this is the [template](https://github.com/apache/servicecomb-service-center/blob/master/integration/health-metrics-grafana.json) file 
+can be imported in Grafana.
+
+After the import, you can get the view like blow.
+
+```eval_rst
+.. image:: integration-grafana.PNG
+```
+
+Note: As the template has an ASF header, please remove the header first
+if you import this template file.
\ No newline at end of file
diff --git a/docs/pr-raising-guide.md b/docs/user-guides/pr-raising-guide.md
similarity index 95%
rename from docs/pr-raising-guide.md
rename to docs/user-guides/pr-raising-guide.md
index 6d48464..9f50739 100644
--- a/docs/pr-raising-guide.md
+++ b/docs/user-guides/pr-raising-guide.md
@@ -1,4 +1,6 @@
-### PR raising Guide
+# PR raising Guide
+
+### Steps
 
 If you want to raise a PR in this repo then you can follow the below guidelines to avoid conflicts.
 
diff --git a/docs/user-guides/sc-cluster.rst b/docs/user-guides/sc-cluster.rst
new file mode 100644
index 0000000..7223329
--- /dev/null
+++ b/docs/user-guides/sc-cluster.rst
@@ -0,0 +1,146 @@
+Deploying Service-Center
+========================
+
+Deploying Service-Center in Cluster Mode
+----------------------------------------
+
+As Service-center is a stateless application so it can be seamlessly
+deployed in cluster mode to achieve HA. SC is dependent on the etcd to
+store the microservices information so you can opt for running etcd
+standalone or in `cluster`_ mode. Once you are done with installing the
+etcd either in cluster or standalone mode then you can follow the below
+steps to run the Service-Center.
+
+Let’s assume you want to install 2 instances of Service-Center on VM
+with following details
+
+==== =========
+Name Address
+==== =========
+VM1  10.12.0.1
+VM2  10.12.0.2
+==== =========
+
+Here we assume your etcd is running on http://10.12.0.4:2379 (you can
+follow `this`_ guide to install etcd in cluster mode.)
+
+Step 1
+~~~~~~
+
+Download the SC release from `here`_ on all the VM’s.
+
+::
+
+   # Untar the release
+   # tar -xvf service-center-X.X.X-linux-amd64.tar.gz
+
+Note: Please don’t run start.sh as it will also start the etcd.
+
+Step 2
+~~~~~~
+
+Edit the configuration of the ip/port on which SC will run and etcd ip
+#### VM1
+
+::
+
+   # vi conf/app.conf
+   #Replace the below values
+   httpaddr = 10.12.0.1
+   manager_cluster = "10.12.0.4:2379"
+
+   # Start the Service-center
+   ./service-center
+
+VM2
+^^^
+
+::
+
+   # vi conf/app.conf
+   #Replace the below values
+   httpaddr = 10.12.0.2
+   manager_cluster = "10.12.0.4:2379"
+
+   # Start the Service-center
+   ./service-center
+
+Note: In ``manger_cluster`` you can put the multiple instances of etcd
+in the cluster like
+
+::
+
+   manager_cluster= "10.12.0.4:2379,10.12.0.X:2379,10.12.0.X:2379"
+
+Step 3
+~~~~~~
+
+Verify your instances
+
+::
+
+   # curl http://10.12.0.1:30101/v4/default/registry/health
+   {
+       "instances": [
+           {
+               "instanceId": "d6e9e976f9df11e7a72b286ed488ff9f",
+               "serviceId": "d6e99f4cf9df11e7a72b286ed488ff9f",
+               "endpoints": [
+                   "rest://10.12.0.1:30100"
+               ],
+               "hostName": "service_center_10_12_0_1",
+               "status": "UP",
+               "healthCheck": {
+                   "mode": "push",
+                   "interval": 30,
+                   "times": 3
+               },
+               "timestamp": "1516012543",
+               "modTimestamp": "1516012543"
+           },
+           {
+               "instanceId": "16d4cb35f9e011e7a58a286ed488ff9f",
+               "serviceId": "d6e99f4cf9df11e7a72b286ed488ff9f",
+               "endpoints": [
+                   "rest://10.12.0.2:30100"
+               ],
+               "hostName": "service_center_10_12_0_2",
+               "status": "UP",
+               "healthCheck": {
+                   "mode": "push",
+                   "interval": 30,
+                   "times": 3
+               },
+               "timestamp": "1516012650",
+               "modTimestamp": "1516012650"
+           }
+       ]
+   }
+
+As we can see here the Service-Center can auto-discover all the
+instances of the Service-Center running in cluster, this auto-discovery
+feature is used by the `Java-Chassis SDK`_ to auto-discover all the
+instances of the Service-Center by knowing atleast 1 IP of
+Service-Center running in cluster.
+
+In your microservice.yaml you can provide the SC IP of both the instance
+or any one instance, sdk can auto-discover other instances and use the
+other instances to get microservice details in case of failure of the
+first one.
+
+::
+
+   cse:
+     service:
+       registry:
+         address: "http://10.12.0.1:30100,http://10.12.0.2:30100"
+         autodiscovery: true
+
+In this case sdk will be able to discover all the instances of SC in
+cluster.
+
+
+.. _cluster: https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md
+.. _this: https://github.com/coreos/etcd/blob/master/Documentation/op-guide/container.md
+.. _here: https://github.com/apache/servicecomb-service-center/releases
+.. _Java-Chassis SDK: https://github.com/apache/servicecomb-java-chassis
\ No newline at end of file
diff --git a/docs/user-guides/security-tls.md b/docs/user-guides/security-tls.md
new file mode 100644
index 0000000..da26c0f
--- /dev/null
+++ b/docs/user-guides/security-tls.md
@@ -0,0 +1,18 @@
+# Setup SSL/TLS
+
+## Requirement
+Service center(SC) takes several files related SSL/TLS options.
+
+1. Environment variable 'SSL_ROOT': The directory contains certificates. If not set, uses 'etc/ssl' under the SC work directory.
+1. `$SSL_ROOT`/trust.cer: Trusted certificate authority.
+1. `$SSL_ROOT`/server.cer: Certificate used for SSL/TLS connections to SC.
+1. `$SSL_ROOT`/server_key.pem: Key for the certificate. If key is encrypted, 'cert_pwd' must be set.
+1. `$SSL_ROOT`/cert_pwd(optional): The password used to decrypt the private key.
+
+## Configuration
+Please modify the conf/app.conf before start up SC
+
+1. ssl_mode: Enabled SSL/TLS mode. [0, 1]
+1. ssl_verify_client: Whether the SC verify client(including etcd server). [0, 1]
+1. ssl_min_version: Minimal SSL/TLS protocol version. ["TLSv1.0", "TLSv1.1", "TLSv1.2", "TLSv1.3"], based on Go version
+1. ssl_ciphers: A list of cipher suite. By default, uses `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`, `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`, `TLS_RSA_WITH_AES_256_GCM_SHA384`, `TLS_RSA_WITH_AES_128_GCM_SHA256`