使用 Docker 为开发环境安装 Discourse

使用 Docker 进行开发

由于 Discourse 运行在 Docker 中,您应该能够直接使用 Discourse 开发容器从源代码目录运行 Discourse。

:white_check_mark: 优点:无需安装任何系统依赖项,也无需任何配置即可快速搭建开发环境。

:x: 缺点:比 Ubuntu 上的原生开发环境稍慢,比 MacOS 上的原生安装慢得多。

另请参阅 Developing Discourse using a Dev Container

步骤 1:安装 Docker

Ubuntu

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

19.10

sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot

Windows WSL:Ubuntu

您可以在 WSL 内运行上述命令,但您必须将所有文件放在 WSL 文件系统中。例如,如果文件位于 ~/discourse 内,则可以正常工作;但如果放在 /mnt/c/discourse 内,则会失败。

MacOS

:warning: Discourse 开发 Docker 镜像仅适用于 x86_64 架构。M1 Mac 可以通过架构模拟启动该镜像,但由于 QEMU 中 缺乏 inotify 支持,Discourse 很可能无法启动。

相反,您应该使用 Install Discourse on macOS for development

选项 1:Docker 商店 下载打包好的 .dmg 文件
选项 2: brew install docker

步骤 2:启动容器

将 Discourse 仓库克隆到本地设备。

git clone https://github.com/discourse/discourse.git
cd discourse

(从您的源代码根目录)

d/boot_dev --init
    # 等待:
    #   - 安装依赖项,
    #   - 迁移数据库,以及
    #   - 创建管理员用户(您需要与此交互)

# 在一个终端中:
d/rails s

# 在另一个终端中
d/dev --only ember

…然后在 http://localhost:3000 打开浏览器,!您应该能看到 Discourse。

插件符号链接

Docker 开发流程支持 plugins/ 目录下的符号链接,但有以下注意事项:

每当创建新的插件符号链接时,必须使用以下命令重启 Docker 容器:

d/shutdown_dev; d/boot_dev

注意:

  • 要测试电子邮件,请运行 MailHog:

    d/mailhog
    
  • 如果缺少 gems,请运行:

    d/bundle install
    
  • 如果需要数据库迁移:

    d/rake db:migrate RAILS_ENV=development
    
  • 完成后,您可以选择使用以下命令终止 Docker 容器:

    d/shutdown_dev
    
  • 数据在容器调用之间会持久保存在您的源代码根目录 tmp/postgres 中。如果出于任何原因需要重置数据库,请运行:

    sudo rm -fr data
    
  • 如果您看到类似“尝试连接 Docker 时权限被拒绝”的错误,请运行:

    run `sudo usermod -aG docker ${USER}`
    sudo service docker restart
    
  • 如果您希望将容器的端口全局暴露给网络(默认关闭),请使用:

    d/boot_dev -p
    
  • Dockerfile 来自 GitHub 上的 discourse/discourse_docker,特别是 image/discourse_dev

运行测试

d/rake autospec

要运行特定的插件测试,您还可以这样做:

d/rake plugin:spec["discourse-follow"]

或者甚至更具体地执行以下操作:

my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

本文档已进行版本控制 - 请在 GitHub 上提出更改。

72 个赞
Using a launcher built docker image in docker-compose
IDE and comfortable DEV environment for newbies
Docker install on MacOS
How to install Discourse locally?
Installing Discourse for macOS Development Using asdf and docker-compose
Discourse on local pc
Discourse developement environment setup
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
Install Discourse Docker on Ubuntu 11
Unicode (Russian) username validation fails randomly
Qunit in Docker
Is it possible to use a local plugin directory with a docker install?
Is it possible to use a local plugin directory with a docker install?
Problem with development on Windows with Docker and mounted volume
[Resolved] Recent change breaks connectivity in Docker (+ non-Docker)
How might we better structure #howto?
Apple M1 for discourse development
How to open via internal IP?
Fast, efficient plugin development with Docker dev install (Windows WSL2)
How do I install a stable version of Discourse on Docker locally?
Backup fails on localhost with docker
How do I install a stable version of Discourse on Docker locally?
Problems with understanding the development of Discourse
Need to create custom static page as home page
Docker new licensing
Backup restore failing on clean dev docker env: FATAL: Peer authentication failed for user “postgres”
Can't build Discourse on Ubuntu 20.10
Installing discourse for development is failing
Create, download, and restore a backup of your Discourse database
Set up a local Discourse Development Environment?
How do you install Discourse using Windows 10 Docker Desktop?
NoMethodError: undefined method `min_tags_from_required_group'
Migrate a phpBB3 forum to Discourse
Install plugins in your non-Docker development environment
NoMethodError: undefined method `min_tags_from_required_group'
Error installing `bullseye-backports` when trying to install for Development
What I should do for migration from Cusdis to Discourse
Migrate a MyBB forum to Discourse
Local installation internal use only
Maintaining an up-to-date development environment
PG::UndefinedTable: ERROR: relation "pg_range" does not exist
Docker-compose.yml to run discourse locally
Allow subscription of predetermined length
Cannot load any images “Uncaught (in promise) no-response: no-response”
Discovery document is missing
What are the benefits of a dev environment?
Installing Discourse on windows using Docker Desktop
Installing discourse follow plugin in development (boot_dev) setup — no app.yml file
How to troubleshoot database errors in an outdated plugin?
Error when building: discourse does not support compiling scss/sass files via sprockets
Integration into custom auth system where emails are not unique?
Installer un environnement developpement discourse sur windows
Contributing to Discourse development
Install Discourse on Ubuntu or Debian for Development
There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path
Tags rearranged, triggering an extra edit
Ember addons are resolving as incorrect peer dependencies. -- fixed by removing "content-tag@3.1.0": "patches/content-tag@3.1.0.patch",
Trying to install Discourse on portainer but it's not pulling the base container
Developing Discourse using a Dev Container
Subscribe to post an ad
Postgres doesn't seem to be running when running Discourse locally using Docker
Discourse OpenID Connect (OIDC)
How can I install Discourse on Windows? Getting restarting (100) error
Dev environment: recommended way to bootstrap the first admin account without email?
Dev environment: recommended way to bootstrap the first admin account without email?
Total newbie struggling to preview the signup modal with my test theme, what am I missing?
Configure Discourse to use a separate PostgreSQL server
External database ENV VARs not documented (external PG Port, external Redis ENV VARs)
'Arrive at topic' info missing from email when re-sending invites
Developing Discourse using a Dev Container
Discourse API developers docker-compose basic image
Which is the better option to self-host?
Using a launcher built docker image in docker-compose
Without any coding knowledge, is it possible to install and maintain Discourse?
I want to install a plugin for development, what should I do?
Can't uninstall on Ubuntu 18.04
Install Discourse on macOS for development
Developing Discourse using a Dev Container
Using a launcher built docker image in docker-compose
Bundle install fails after adding gem "mysql2" and gem "reverse_markdown"
Issue in setup discourse on ubuntu server
`script/osx_dev` script is pretty broken
Can't set up dev environment due to cppjieba_rb failing to install
I want to install a plugin for development, what should I do?
Stuck in infinite loop in Mac terminal after source ~/.bashrc
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install on macOS – Failure: Scheduler::Defer can pause and resume
Install Discourse for Development using Docker is Failed
OAuth2 and Microsoft ADFS
Availability of OpenID Connect in hosted plans
Can't set up dev environment due to cppjieba_rb failing to install
Adding command line tools support for user api keys
Adding command line tools support for user api keys
Discourse redirects to the OAuth server after loading `/?authComplete=true`
Hello from Gitpod! (installing on google cloud + automated dev setup)
How to Install Discourse on LocalHost in Windows?