# How to develop discourse in a team?

**URL:** https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492
**Category:** Development
**Created:** [June 30, 2021, 1:43pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492 "2021-06-30T13:43:01Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [June 30, 2021, 1:43pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/1 "2021-06-30T13:43:01Z")

</div>

Hello everyone. I ran into a problem while developing discourse

I usually clone files from Git  
Making changes  
Making a commit on Git

My teammate does a git pull  
And gets all my changes

How can I implement something similar in discourse?  
How can I make changes so that other people can install them at home?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [June 30, 2021, 1:45pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/2 "2021-06-30T13:45:41Z")

</div>

If you are developing a Discourse theme or a plugin, either can live in a Git repository just fine.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [June 30, 2021, 2:00pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/3 "2021-06-30T14:00:37Z")

</div>

Thanks for the reply. Yes, you are right about the topic. What about the synchronization of components and settings?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [June 30, 2021, 2:19pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/4 "2021-06-30T14:19:43Z")

</div>

Your plugin code can define migrations and/or seed contents as necessary. They can also ensure that site settings have the appropriate value.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [June 30, 2021, 2:31pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/5 "2021-06-30T14:31:19Z")

</div>

I want to clone my installation completely

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [June 30, 2021, 2:32pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/6 "2021-06-30T14:32:26Z")

</div>

You can take a backup and restore where needed.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [June 30, 2021, 2:54pm UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/7 "2021-06-30T14:54:37Z")

</div>

I tried it. I get an error when restoring

 ![image](https://global.discourse-cdn.com/meta/original/3X/c/c/cc68009b06b81899a50f5ade58d9ae47c98b40f6.png)  
The copy does not appear in the list after even 30 minutes

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [July 1, 2021, 12:43am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/8 "2021-07-01T00:43:15Z")

</div>

I like to use S3 for backups and then all sites can share the same backup set. Then when you do a backup on production, you can immediately restore it on your staging sites to see that it works with the current data.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [July 1, 2021, 7:14am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/9 "2021-07-01T07:14:17Z")

</div>

What it is S3? I would like to use this

---

<div class="post-metadata">

### Author: ![uwe\_keim](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/uwe_keim/32/326762_2.png) [@uwe\_keim](https://meta.discourse.org/u/uwe_keim)
#### Post date: [July 1, 2021, 7:17am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/10 "2021-07-01T07:17:28Z")

</div>

> **[Amazon S3 - Cloud Object Storage - AWS](https://aws.amazon.com/s3/)**
>
> Amazon S3 is cloud object storage with industry-leading scalability, data availability, security, and performance. S3 is ideal for data lakes, mobile applications, backup and restore, archival, IoT devices, ML, AI, and analytics.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [July 1, 2021, 9:11am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/11 "2021-07-01T09:11:02Z")

</div>

[Using Object Storage for Uploads (S3 & Clones)](https://meta.discourse.org/t/using-object-storage-for-uploads-s3-clones/148916) [Setting up file and image uploads to S3](https://meta.discourse.org/t/setting-up-file-and-image-uploads-to-s3/7229) are where to start. For backups only its quite simple.

Backblaze and wasabi are cheap. Also [storj.io](http://storj.io) has a product that I’ve used for backups.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [July 1, 2021, 9:53am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/12 "2021-07-01T09:53:13Z")

</div>

Just my 10 cents, and not to take away from the helpful comments here on backups, but stepping back a bit: I’m really not sure if ‘synchronising’ installs of Discourse is worth much effort.

Unless you intend on PRing into Discourse core, developing plugins or TCs is where it’s at and gives you the most robust, efficient solution for customisation.

The key thing with developing Plugins and Theme Components is they will be deployed to multiple instances of Discourse over which you may not have control in any case?

So having a slightly unique local Discourse instance for development is totally ok. (within reason)

The key workflow should involve keeping the plugin or TC up to date in a shared repo, most likely on Github.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [July 1, 2021, 10:02am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/13 "2021-07-01T10:02:18Z")

</div>

I totally agree. I have a few clients with customizations that can’t be checked (or are easiest checked) against their actual data, so they really like to see the site with the current data.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [July 1, 2021, 10:03am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/14 "2021-07-01T10:03:29Z")

</div>

Yes, that’s fair. It depends what you are trying to do and what the client base is (single target, or multiple customers?) and how much control you expect to have.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [July 1, 2021, 10:17am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/15 "2021-07-01T10:17:07Z")

</div>

Thank you all for your advice. Most likely, I will use PRing into Discourse core. Therefore, I need the ability to upload the assembly to the git, and from the git to the server

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [July 1, 2021, 10:24am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/16 "2021-07-01T10:24:40Z")

</div>

If you are PRing to Discourse core, then again, exact config of local install not critical (just make sure you are on latest), because code contribution is a very controlled process anyway, especially with test cases., so a little variation in settings or content is unlikely to be an issue.

Normally, if working on joint contributions, you’d fork to your org’s repo and work on there before PRing?

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [July 1, 2021, 10:39am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/17 "2021-07-01T10:39:09Z")

</div>

> [@merefield](#):
>
> if working on joint contributions

No, I not working on joint contributions. I work for personal use

> [@Mikhail\_Tyuftyaev](#):
>
> I will use PRing into Discourse core

I didn’t to put it that way  
How can I install a discourse from a fork of the git?  
I will make changes into Discourse core and add them to my repo on git

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [July 1, 2021, 10:45am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/18 "2021-07-01T10:45:32Z")

</div>

So I’m confused why you need to sync your installations?

Just git clone your fork.

Normally you would not use docker for development but if you are you can enter your container and check out your fork.

---

<div class="post-metadata">

### Author: ![Mikhail\_Tyuftyaev](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mikhail_tyuftyaev/32/237998_2.png) [@Mikhail\_Tyuftyaev](https://meta.discourse.org/u/Mikhail_Tyuftyaev)
#### Post date: [July 1, 2021, 10:53am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/19 "2021-07-01T10:53:20Z")

</div>

For example.

Now I have Discourse configured  
Then, when everything is ready, I update my build.

Then I continue the development again. I’m changing some settings in the control panel. There can be a lot of them.  
When I want to update my build, I will need to update the settings as well

In this case, I will have to manually set the settings

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [July 1, 2021, 10:55am UTC](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492/20 "2021-07-01T10:55:19Z")

</div>

Settings are persistent, and you are working alone, so why the need to focus on backup/sync?

(also the title of the Topic is confusing then, why “in a team”?)

When you clone or checkout you do not wipe the database (where the settings are held).

You are in control of when to run migrations (if any exist). Otherwise the DB should be stable.

[Next page](https://meta.discourse.org/t/how-to-develop-discourse-in-a-team/195492.md?page=2)
