mirror of https://github.com/zulip/zulip.git
Remove Debian 10 support.
As a consequence: • Bump minimum supported Python version to 3.8. • Move Vagrant environment to Ubuntu 20.04, which has Python 3.8. • Move CI frontend tests to Ubuntu 20.04. • Move production build test to Ubuntu 20.04. • Move 3.4 upgrade test to Ubuntu 20.04. Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
a7e6cb7705
commit
a543dcc8e3
|
@ -30,13 +30,13 @@ jobs:
|
||||||
production_build:
|
production_build:
|
||||||
# This job builds a release tarball from the current commit, which
|
# This job builds a release tarball from the current commit, which
|
||||||
# will be used for all of the following install/upgrade tests.
|
# will be used for all of the following install/upgrade tests.
|
||||||
name: Debian 10 production build
|
name: Ubuntu 20.04 production build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
|
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
|
||||||
# the top explain how to build and upload these images.
|
# the top explain how to build and upload these images.
|
||||||
# Debian 10 ships with Python 3.7.3.
|
# Ubuntu 20.04 ships with Python 3.8.10.
|
||||||
container: zulip/ci:buster
|
container: zulip/ci:focal
|
||||||
steps:
|
steps:
|
||||||
- name: Add required permissions
|
- name: Add required permissions
|
||||||
run: |
|
run: |
|
||||||
|
@ -66,22 +66,22 @@ jobs:
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: /srv/zulip-npm-cache
|
path: /srv/zulip-npm-cache
|
||||||
key: v1-yarn-deps-buster-${{ hashFiles('package.json') }}-${{ hashFiles('yarn.lock') }}
|
key: v1-yarn-deps-focal-${{ hashFiles('package.json') }}-${{ hashFiles('yarn.lock') }}
|
||||||
restore-keys: v1-yarn-deps-buster
|
restore-keys: v1-yarn-deps-focal
|
||||||
|
|
||||||
- name: Restore python cache
|
- name: Restore python cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: /srv/zulip-venv-cache
|
path: /srv/zulip-venv-cache
|
||||||
key: v1-venv-buster-${{ hashFiles('requirements/dev.txt') }}
|
key: v1-venv-focal-${{ hashFiles('requirements/dev.txt') }}
|
||||||
restore-keys: v1-venv-buster
|
restore-keys: v1-venv-focal
|
||||||
|
|
||||||
- name: Restore emoji cache
|
- name: Restore emoji cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: /srv/zulip-emoji-cache
|
path: /srv/zulip-emoji-cache
|
||||||
key: v1-emoji-buster-${{ hashFiles('tools/setup/emoji/emoji_map.json') }}-${{ hashFiles('tools/setup/emoji/build_emoji') }}-${{ hashFiles('tools/setup/emoji/emoji_setup_utils.py') }}-${{ hashFiles('tools/setup/emoji/emoji_names.py') }}-${{ hashFiles('package.json') }}
|
key: v1-emoji-focal-${{ hashFiles('tools/setup/emoji/emoji_map.json') }}-${{ hashFiles('tools/setup/emoji/build_emoji') }}-${{ hashFiles('tools/setup/emoji/emoji_setup_utils.py') }}-${{ hashFiles('tools/setup/emoji/emoji_names.py') }}-${{ hashFiles('package.json') }}
|
||||||
restore-keys: v1-emoji-buster
|
restore-keys: v1-emoji-focal
|
||||||
|
|
||||||
- name: Build production tarball
|
- name: Build production tarball
|
||||||
run: ./tools/ci/production-build
|
run: ./tools/ci/production-build
|
||||||
|
@ -114,15 +114,10 @@ jobs:
|
||||||
os: focal
|
os: focal
|
||||||
extra_args: ""
|
extra_args: ""
|
||||||
|
|
||||||
- docker_image: zulip/ci:buster
|
|
||||||
name: Debian 10 production install with custom db name and user
|
|
||||||
os: buster
|
|
||||||
extra_args: --test-custom-db
|
|
||||||
|
|
||||||
- docker_image: zulip/ci:bullseye
|
- docker_image: zulip/ci:bullseye
|
||||||
name: Debian 11 production install
|
name: Debian 11 production install with custom db name and user
|
||||||
os: bullseye
|
os: bullseye
|
||||||
extra_args: ""
|
extra_args: --test-custom-db
|
||||||
|
|
||||||
name: ${{ matrix.name }}
|
name: ${{ matrix.name }}
|
||||||
container:
|
container:
|
||||||
|
@ -209,10 +204,9 @@ jobs:
|
||||||
include:
|
include:
|
||||||
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
|
# Docker images are built from 'tools/ci/Dockerfile'; the comments at
|
||||||
# the top explain how to build and upload these images.
|
# the top explain how to build and upload these images.
|
||||||
- docker_image: zulip/ci:buster-3.4
|
- docker_image: zulip/ci:focal-3.4
|
||||||
name: 3.4 Version Upgrade
|
name: 3.4 Version Upgrade
|
||||||
os: buster
|
os: focal
|
||||||
|
|
||||||
- docker_image: zulip/ci:bullseye-4.11
|
- docker_image: zulip/ci:bullseye-4.11
|
||||||
name: 4.11 Version Upgrade
|
name: 4.11 Version Upgrade
|
||||||
os: bullseye
|
os: bullseye
|
||||||
|
|
|
@ -18,19 +18,14 @@ jobs:
|
||||||
include:
|
include:
|
||||||
# Base images are built using `tools/ci/Dockerfile.prod.template`.
|
# Base images are built using `tools/ci/Dockerfile.prod.template`.
|
||||||
# The comments at the top explain how to build and upload these images.
|
# The comments at the top explain how to build and upload these images.
|
||||||
# Debian 10 ships with Python 3.7.3.
|
# Ubuntu 20.04 ships with Python 3.8.10.
|
||||||
- docker_image: zulip/ci:buster
|
|
||||||
name: Debian 10 Buster (Python 3.7, backend + frontend)
|
|
||||||
os: buster
|
|
||||||
include_frontend_tests: true
|
|
||||||
# Ubuntu 20.04 ships with Python 3.8.2.
|
|
||||||
- docker_image: zulip/ci:focal
|
- docker_image: zulip/ci:focal
|
||||||
name: Ubuntu 20.04 Focal (Python 3.8, backend)
|
name: Ubuntu 20.04 (Python 3.8, backend + frontend)
|
||||||
os: focal
|
os: focal
|
||||||
include_frontend_tests: false
|
include_frontend_tests: true
|
||||||
# Debian 11 ships with Python 3.9.2.
|
# Debian 11 ships with Python 3.9.2.
|
||||||
- docker_image: zulip/ci:bullseye
|
- docker_image: zulip/ci:bullseye
|
||||||
name: Debian 11 Bullseye (Python 3.9, backend)
|
name: Debian 11 (Python 3.9, backend)
|
||||||
os: bullseye
|
os: bullseye
|
||||||
include_frontend_tests: false
|
include_frontend_tests: false
|
||||||
|
|
||||||
|
@ -124,8 +119,9 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
source tools/ci/activate-venv
|
source tools/ci/activate-venv
|
||||||
|
|
||||||
# Currently our compiled requirements files will differ for different python versions
|
# Currently our compiled requirements files will differ for different
|
||||||
# so we will run test-locked-requirements only for Debian 10.
|
# Python versions, so we will run test-locked-requirements only on the
|
||||||
|
# platform with the oldest one.
|
||||||
# ./tools/test-locked-requirements
|
# ./tools/test-locked-requirements
|
||||||
# ./tools/test-run-dev # https://github.com/zulip/zulip/pull/14233
|
# ./tools/test-run-dev # https://github.com/zulip/zulip/pull/14233
|
||||||
#
|
#
|
||||||
|
@ -192,7 +188,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Test locked requirements
|
- name: Test locked requirements
|
||||||
if: ${{ matrix.os == 'buster' }}
|
if: ${{ matrix.os == 'focal' }}
|
||||||
run: |
|
run: |
|
||||||
. /srv/zulip-py3-venv/bin/activate && \
|
. /srv/zulip-py3-venv/bin/activate && \
|
||||||
./tools/test-locked-requirements
|
./tools/test-locked-requirements
|
||||||
|
@ -216,7 +212,6 @@ jobs:
|
||||||
retention-days: 60
|
retention-days: 60
|
||||||
|
|
||||||
- name: Check development database build
|
- name: Check development database build
|
||||||
if: ${{ matrix.os == 'focal' || matrix.os == 'bullseye' || matrix.os == 'jammy' }}
|
|
||||||
run: ./tools/ci/setup-backend
|
run: ./tools/ci/setup-backend
|
||||||
|
|
||||||
- name: Report status
|
- name: Report status
|
||||||
|
|
|
@ -12,9 +12,11 @@ Vagrant.configure("2") do |config|
|
||||||
vm_num_cpus = "2"
|
vm_num_cpus = "2"
|
||||||
vm_memory = "2048"
|
vm_memory = "2048"
|
||||||
|
|
||||||
debian_mirror = ""
|
ubuntu_mirror = ""
|
||||||
vboxadd_version = nil
|
vboxadd_version = nil
|
||||||
|
|
||||||
|
config.vm.box = "bento/ubuntu-20.04"
|
||||||
|
|
||||||
config.vm.synced_folder ".", "/vagrant", disabled: true
|
config.vm.synced_folder ".", "/vagrant", disabled: true
|
||||||
config.vm.synced_folder ".", "/srv/zulip"
|
config.vm.synced_folder ".", "/srv/zulip"
|
||||||
|
|
||||||
|
@ -32,7 +34,7 @@ Vagrant.configure("2") do |config|
|
||||||
when "HOST_IP_ADDR"; host_ip_addr = value
|
when "HOST_IP_ADDR"; host_ip_addr = value
|
||||||
when "GUEST_CPUS"; vm_num_cpus = value
|
when "GUEST_CPUS"; vm_num_cpus = value
|
||||||
when "GUEST_MEMORY_MB"; vm_memory = value
|
when "GUEST_MEMORY_MB"; vm_memory = value
|
||||||
when "DEBIAN_MIRROR"; debian_mirror = value
|
when "UBUNTU_MIRROR"; ubuntu_mirror = value
|
||||||
when "VBOXADD_VERSION"; vboxadd_version = value
|
when "VBOXADD_VERSION"; vboxadd_version = value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -61,23 +63,23 @@ Vagrant.configure("2") do |config|
|
||||||
config.vm.network "forwarded_port", guest: 9994, host: host_port + 3, host_ip: host_ip_addr
|
config.vm.network "forwarded_port", guest: 9994, host: host_port + 3, host_ip: host_ip_addr
|
||||||
# Specify Docker provider before VirtualBox provider so it's preferred.
|
# Specify Docker provider before VirtualBox provider so it's preferred.
|
||||||
config.vm.provider "docker" do |d, override|
|
config.vm.provider "docker" do |d, override|
|
||||||
|
override.vm.box = nil
|
||||||
d.build_dir = File.join(__dir__, "tools", "setup", "dev-vagrant-docker")
|
d.build_dir = File.join(__dir__, "tools", "setup", "dev-vagrant-docker")
|
||||||
d.build_args = ["--build-arg", "VAGRANT_UID=#{Process.uid}"]
|
d.build_args = ["--build-arg", "VAGRANT_UID=#{Process.uid}"]
|
||||||
if !debian_mirror.empty?
|
if !ubuntu_mirror.empty?
|
||||||
d.build_args += ["--build-arg", "DEBIAN_MIRROR=#{debian_mirror}"]
|
d.build_args += ["--build-arg", "UBUNTU_MIRROR=#{ubuntu_mirror}"]
|
||||||
end
|
end
|
||||||
d.has_ssh = true
|
d.has_ssh = true
|
||||||
d.create_args = ["--ulimit", "nofile=1024:65536"]
|
d.create_args = ["--ulimit", "nofile=1024:65536"]
|
||||||
end
|
end
|
||||||
|
|
||||||
config.vm.provider "virtualbox" do |vb, override|
|
config.vm.provider "virtualbox" do |vb, override|
|
||||||
override.vm.box = "bento/debian-10"
|
|
||||||
# It's possible we can get away with just 1.5GB; more testing needed
|
# It's possible we can get away with just 1.5GB; more testing needed
|
||||||
vb.memory = vm_memory
|
vb.memory = vm_memory
|
||||||
vb.cpus = vm_num_cpus
|
vb.cpus = vm_num_cpus
|
||||||
|
|
||||||
if !vboxadd_version.nil?
|
if !vboxadd_version.nil?
|
||||||
override.vbguest.installer = Class.new(VagrantVbguest::Installers::Debian) do
|
override.vbguest.installer = Class.new(VagrantVbguest::Installers::Ubuntu) do
|
||||||
define_method(:host_version) do |reload = false|
|
define_method(:host_version) do |reload = false|
|
||||||
VagrantVbguest::Version(vboxadd_version)
|
VagrantVbguest::Version(vboxadd_version)
|
||||||
end
|
end
|
||||||
|
@ -88,14 +90,12 @@ Vagrant.configure("2") do |config|
|
||||||
end
|
end
|
||||||
|
|
||||||
config.vm.provider "hyperv" do |h, override|
|
config.vm.provider "hyperv" do |h, override|
|
||||||
override.vm.box = "bento/debian-10"
|
|
||||||
h.memory = vm_memory
|
h.memory = vm_memory
|
||||||
h.maxmemory = vm_memory
|
h.maxmemory = vm_memory
|
||||||
h.cpus = vm_num_cpus
|
h.cpus = vm_num_cpus
|
||||||
end
|
end
|
||||||
|
|
||||||
config.vm.provider "parallels" do |prl, override|
|
config.vm.provider "parallels" do |prl, override|
|
||||||
override.vm.box = "bento/debian-10"
|
|
||||||
prl.memory = vm_memory
|
prl.memory = vm_memory
|
||||||
prl.cpus = vm_num_cpus
|
prl.cpus = vm_num_cpus
|
||||||
end
|
end
|
||||||
|
@ -104,5 +104,5 @@ Vagrant.configure("2") do |config|
|
||||||
# We want provision to be run with the permissions of the vagrant user.
|
# We want provision to be run with the permissions of the vagrant user.
|
||||||
privileged: false,
|
privileged: false,
|
||||||
path: "tools/setup/vagrant-provision",
|
path: "tools/setup/vagrant-provision",
|
||||||
env: { "DEBIAN_MIRROR" => debian_mirror }
|
env: { "UBUNTU_MIRROR" => ubuntu_mirror }
|
||||||
end
|
end
|
||||||
|
|
|
@ -135,7 +135,7 @@ The following review steps apply to the majority of PRs.
|
||||||
the job to fail by clicking on the failed job. This will open
|
the job to fail by clicking on the failed job. This will open
|
||||||
up a page in the CI that has more details on why the job failed.
|
up a page in the CI that has more details on why the job failed.
|
||||||
For example [this](https://github.com/zulip/zulip/runs/2092955762)
|
For example [this](https://github.com/zulip/zulip/runs/2092955762)
|
||||||
is the page of the "Debian 10 Buster (Python 3.7, backend + frontend)" job.
|
is the page of the "Ubuntu 20.04 (Python 3.8, backend + frontend)" job.
|
||||||
See our docs on [continuous integration](../testing/continuous-integration.md)
|
See our docs on [continuous integration](../testing/continuous-integration.md)
|
||||||
to learn more.
|
to learn more.
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@ Contents:
|
||||||
If you'd like to install a Zulip development environment on a computer
|
If you'd like to install a Zulip development environment on a computer
|
||||||
that's running one of:
|
that's running one of:
|
||||||
|
|
||||||
- Ubuntu 20.04 Focal
|
- Ubuntu 20.04
|
||||||
- Debian 10 Buster, 11 Bullseye
|
- Debian 11
|
||||||
- CentOS 7 (beta)
|
- CentOS 7 (beta)
|
||||||
- Fedora 33 and 34 (beta)
|
- Fedora 33 and 34 (beta)
|
||||||
- RHEL 7 (beta)
|
- RHEL 7 (beta)
|
||||||
|
|
|
@ -18,7 +18,7 @@ Contents:
|
||||||
- [Step 3: Start the development environment](#step-3-start-the-development-environment)
|
- [Step 3: Start the development environment](#step-3-start-the-development-environment)
|
||||||
- [Step 4: Developing](#step-4-developing)
|
- [Step 4: Developing](#step-4-developing)
|
||||||
- [Troubleshooting and common errors](#troubleshooting-and-common-errors)
|
- [Troubleshooting and common errors](#troubleshooting-and-common-errors)
|
||||||
- [Specifying a Debian mirror](#specifying-a-debian-mirror)
|
- [Specifying an Ubuntu mirror](#specifying-an-ubuntu-mirror)
|
||||||
- [Specifying a proxy](#specifying-a-proxy)
|
- [Specifying a proxy](#specifying-a-proxy)
|
||||||
- [Customizing CPU and RAM allocation](#customizing-cpu-and-ram-allocation)
|
- [Customizing CPU and RAM allocation](#customizing-cpu-and-ram-allocation)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ a proxy to access the internet.)
|
||||||
- **All**: 2GB available RAM, Active broadband internet connection, [GitHub account][set-up-git].
|
- **All**: 2GB available RAM, Active broadband internet connection, [GitHub account][set-up-git].
|
||||||
- **macOS**: macOS (10.11 El Capitan or newer recommended)
|
- **macOS**: macOS (10.11 El Capitan or newer recommended)
|
||||||
- **Ubuntu LTS**: 20.04
|
- **Ubuntu LTS**: 20.04
|
||||||
- or **Debian**: 10 "buster" or 11 "bullseye"
|
- **Debian**: 11
|
||||||
- **Windows**: Windows 64-bit (Win 10 recommended), hardware
|
- **Windows**: Windows 64-bit (Win 10 recommended), hardware
|
||||||
virtualization enabled (VT-x or AMD-V), administrator access.
|
virtualization enabled (VT-x or AMD-V), administrator access.
|
||||||
|
|
||||||
|
@ -143,10 +143,7 @@ Now you are ready for [Step 2: Get Zulip code](#step-2-get-zulip-code).
|
||||||
|
|
||||||
#### Debian
|
#### Debian
|
||||||
|
|
||||||
The setup for Debian is very similar to that [for Ubuntu
|
The setup for Debian is the same as that [for Ubuntu above](#ubuntu).
|
||||||
above](#ubuntu), except that the `docker.io` package is only available
|
|
||||||
in Debian 10 and later; for Debian 9, see [Docker CE for
|
|
||||||
Debian](https://docs.docker.com/install/linux/docker-ce/debian/).
|
|
||||||
|
|
||||||
#### Windows 10
|
#### Windows 10
|
||||||
|
|
||||||
|
@ -285,7 +282,7 @@ vagrant up --provider=docker
|
||||||
The first time you run this command it will take some time because vagrant
|
The first time you run this command it will take some time because vagrant
|
||||||
does the following:
|
does the following:
|
||||||
|
|
||||||
- downloads the base Debian 10 virtual machine image (for macOS and Windows)
|
- downloads the base Ubuntu 20.04 virtual machine image (for macOS and Windows)
|
||||||
or container (for Linux)
|
or container (for Linux)
|
||||||
- configures this virtual machine/container for use with Zulip,
|
- configures this virtual machine/container for use with Zulip,
|
||||||
- creates a shared directory mapping your clone of the Zulip code inside the
|
- creates a shared directory mapping your clone of the Zulip code inside the
|
||||||
|
@ -324,7 +321,7 @@ $ vagrant ssh
|
||||||
You should see output that starts like this:
|
You should see output that starts like this:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
Linux debian-10 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
|
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-107-generic x86_64)
|
||||||
```
|
```
|
||||||
|
|
||||||
Congrats, you're now inside the Zulip development environment!
|
Congrats, you're now inside the Zulip development environment!
|
||||||
|
@ -337,7 +334,7 @@ provisioning failed and you should look at the
|
||||||
Next, start the Zulip server:
|
Next, start the Zulip server:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip
|
||||||
$ ./tools/run-dev.py
|
$ ./tools/run-dev.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -485,7 +482,7 @@ From the window where run-dev.py is running:
|
||||||
2016-05-04 18:33:13,330 INFO 127.0.0.1 GET 200 92ms /register/ (unauth@zulip via ?)
|
2016-05-04 18:33:13,330 INFO 127.0.0.1 GET 200 92ms /register/ (unauth@zulip via ?)
|
||||||
^C
|
^C
|
||||||
KeyboardInterrupt
|
KeyboardInterrupt
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$ exit
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$ exit
|
||||||
logout
|
logout
|
||||||
Connection to 127.0.0.1 closed.
|
Connection to 127.0.0.1 closed.
|
||||||
christie@win10 ~/zulip
|
christie@win10 ~/zulip
|
||||||
|
@ -523,7 +520,7 @@ christie@win10 ~/zulip
|
||||||
$ vagrant up
|
$ vagrant up
|
||||||
$ vagrant ssh
|
$ vagrant ssh
|
||||||
|
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip
|
||||||
$ ./tools/run-dev.py
|
$ ./tools/run-dev.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -788,8 +785,8 @@ by rebooting the guest via `vagrant halt; vagrant up`.
|
||||||
|
|
||||||
The `vagrant up` command basically does the following:
|
The `vagrant up` command basically does the following:
|
||||||
|
|
||||||
- Downloads a Debian image and starts it using a Vagrant provider.
|
- Downloads an Ubuntu image and starts it using a Vagrant provider.
|
||||||
- Uses `vagrant ssh` to connect to that Debian guest, and then runs
|
- Uses `vagrant ssh` to connect to that Ubuntu guest, and then runs
|
||||||
`tools/provision`, which has a lot of subcommands that are
|
`tools/provision`, which has a lot of subcommands that are
|
||||||
executed via Python's `subprocess` module. These errors mean that
|
executed via Python's `subprocess` module. These errors mean that
|
||||||
one of those subcommands failed.
|
one of those subcommands failed.
|
||||||
|
@ -903,11 +900,11 @@ vagrant ssh -- 'sudo modinfo -F version vboxsf'
|
||||||
|
|
||||||
The bug has not been fixed upstream as of this writing, but you may be
|
The bug has not been fixed upstream as of this writing, but you may be
|
||||||
able to work around it by downgrading VirtualBox Guest Additions to
|
able to work around it by downgrading VirtualBox Guest Additions to
|
||||||
6.0.4. To do this, create a `~/.zulip-vagrant-config` file and add
|
5.2.44. To do this, create a `~/.zulip-vagrant-config` file and add
|
||||||
this line:
|
this line:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
VBOXADD_VERSION 6.0.4
|
VBOXADD_VERSION 5.2.44
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run these commands (yes, reload is needed twice):
|
Then run these commands (yes, reload is needed twice):
|
||||||
|
@ -918,18 +915,18 @@ vagrant reload
|
||||||
vagrant reload --provision
|
vagrant reload --provision
|
||||||
```
|
```
|
||||||
|
|
||||||
### Specifying a Debian mirror
|
### Specifying an Ubuntu mirror
|
||||||
|
|
||||||
Bringing up a development environment for the first time involves
|
Bringing up a development environment for the first time involves
|
||||||
downloading many packages from the Debian archive. The Debian cloud
|
downloading many packages from the Ubuntu archive. The Ubuntu cloud
|
||||||
images use the global mirror `http://deb.debian.org/debian` by
|
images use the global mirror `http://archive.ubuntu.com/ubuntu/` by
|
||||||
default, but you may find that you can speed up the download by using
|
default, but you may find that you can speed up the download by using
|
||||||
a local mirror closer to your location. To do this, create
|
a local mirror closer to your location. To do this, create
|
||||||
`~/.zulip-vagrant-config` and add a line like this, replacing the URL
|
`~/.zulip-vagrant-config` and add a line like this, replacing the URL
|
||||||
as appropriate:
|
as appropriate:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
DEBIAN_MIRROR http://ftp.us.debian.org/debian
|
UBUNTU_MIRROR http://us.archive.ubuntu.com/ubuntu/
|
||||||
```
|
```
|
||||||
|
|
||||||
### Specifying a proxy
|
### Specifying a proxy
|
||||||
|
|
|
@ -4,9 +4,8 @@ To run a Zulip server, you will need:
|
||||||
|
|
||||||
- A dedicated machine or VM
|
- A dedicated machine or VM
|
||||||
- A supported OS:
|
- A supported OS:
|
||||||
- Ubuntu 20.04 Focal
|
- Ubuntu 20.04
|
||||||
- Debian 11 Bullseye
|
- Debian 11
|
||||||
- Debian 10 Buster
|
|
||||||
- At least 2 GB RAM, and 10 GB disk space
|
- At least 2 GB RAM, and 10 GB disk space
|
||||||
- If you expect 100+ users: 4 GB RAM, and 2 CPUs
|
- If you expect 100+ users: 4 GB RAM, and 2 CPUs
|
||||||
- If you intend to [upgrade from Git][upgrade-from-git]: 3 GB RAM, or
|
- If you intend to [upgrade from Git][upgrade-from-git]: 3 GB RAM, or
|
||||||
|
@ -33,8 +32,8 @@ on issues you'll encounter](install-existing-server.md).
|
||||||
|
|
||||||
#### Operating system
|
#### Operating system
|
||||||
|
|
||||||
Ubuntu 20.04 Focal, Debian 11 Bullseye, and Debian 10
|
Ubuntu 20.04 and Debian 11
|
||||||
Buster are supported for running Zulip in production. You can also
|
are supported for running Zulip in production. You can also
|
||||||
run Zulip on other platforms that support Docker using
|
run Zulip on other platforms that support Docker using
|
||||||
[docker-zulip][docker-zulip-homepage].
|
[docker-zulip][docker-zulip-homepage].
|
||||||
|
|
||||||
|
|
|
@ -413,7 +413,9 @@ instructions for other supported platforms.
|
||||||
|
|
||||||
### Upgrading from Debian 10 to 11
|
### Upgrading from Debian 10 to 11
|
||||||
|
|
||||||
1. Upgrade your server to the latest Zulip `4.x` release.
|
1. Upgrade your server to the latest `5.x` release. You can only
|
||||||
|
upgrade to Zulip Server 6.0 and newer after completing this
|
||||||
|
process, since newer releases don't support Debian 10.
|
||||||
|
|
||||||
2. As the Zulip user, stop the Zulip server and run the following
|
2. As the Zulip user, stop the Zulip server and run the following
|
||||||
to back up the system:
|
to back up the system:
|
||||||
|
@ -464,7 +466,7 @@ instructions for other supported platforms.
|
||||||
/home/zulip/deployments/current/scripts/setup/reindex-textual-data --force
|
/home/zulip/deployments/current/scripts/setup/reindex-textual-data --force
|
||||||
```
|
```
|
||||||
|
|
||||||
7. As an additional step, you can also [upgrade the postgresql version](#upgrading-postgresql).
|
7. As an additional step, you can also [upgrade the PostgreSQL version](#upgrading-postgresql).
|
||||||
|
|
||||||
### Upgrading from Debian 9 to 10
|
### Upgrading from Debian 9 to 10
|
||||||
|
|
||||||
|
@ -519,7 +521,7 @@ instructions for other supported platforms.
|
||||||
be able to navigate to its URL and confirm everything is working
|
be able to navigate to its URL and confirm everything is working
|
||||||
correctly.
|
correctly.
|
||||||
|
|
||||||
6. [Upgrade to the latest Zulip release](#upgrading-to-a-release), now
|
6. [Upgrade to the latest `5.x` release](#upgrading-to-a-release), now
|
||||||
that your server is running a supported operating system.
|
that your server is running a supported operating system.
|
||||||
|
|
||||||
7. Debian 10 has a different version of the low-level glibc
|
7. Debian 10 has a different version of the low-level glibc
|
||||||
|
@ -537,6 +539,9 @@ instructions for other supported platforms.
|
||||||
/home/zulip/deployments/current/manage.py audit_fts_indexes
|
/home/zulip/deployments/current/manage.py audit_fts_indexes
|
||||||
```
|
```
|
||||||
|
|
||||||
|
9. [Upgrading from Debian 10 to 11](#upgrading-from-debian-10-to-11),
|
||||||
|
so that you are running a supported operating system.
|
||||||
|
|
||||||
## Upgrading PostgreSQL
|
## Upgrading PostgreSQL
|
||||||
|
|
||||||
Starting with Zulip 3.0, we use the latest available version of
|
Starting with Zulip 3.0, we use the latest available version of
|
||||||
|
|
|
@ -120,8 +120,8 @@ extension, used by our [full-text search](full-text-search.md).
|
||||||
## Python packages
|
## Python packages
|
||||||
|
|
||||||
Zulip uses the version of Python itself provided by the host OS for
|
Zulip uses the version of Python itself provided by the host OS for
|
||||||
the Zulip server. We currently support Python 3.7 and newer, with
|
the Zulip server. We currently support Python 3.8 and newer, with
|
||||||
Debian 10 being the platform requiring 3.7 support. The comments
|
Ubuntu 20.04 being the platform requiring 3.8 support. The comments
|
||||||
in `.github/workflows/zulip-ci.yml` document the Python versions used
|
in `.github/workflows/zulip-ci.yml` document the Python versions used
|
||||||
by each supported platform.
|
by each supported platform.
|
||||||
|
|
||||||
|
|
|
@ -613,16 +613,8 @@ importlib-metadata==4.11.3 ; python_version < "3.10" \
|
||||||
# via
|
# via
|
||||||
# -r requirements/common.in
|
# -r requirements/common.in
|
||||||
# -r requirements/mypy.in
|
# -r requirements/mypy.in
|
||||||
# click
|
|
||||||
# cssutils
|
|
||||||
# jsonpickle
|
|
||||||
# jsonschema
|
|
||||||
# markdown
|
# markdown
|
||||||
# moto
|
|
||||||
# pep517
|
|
||||||
# redis
|
|
||||||
# sphinx
|
# sphinx
|
||||||
# sqlalchemy
|
|
||||||
# zulip-bots
|
# zulip-bots
|
||||||
importlib-resources==5.4.0 ; python_version < "3.9" \
|
importlib-resources==5.4.0 ; python_version < "3.9" \
|
||||||
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
|
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
|
||||||
|
@ -1966,34 +1958,6 @@ twisted==22.2.0 \
|
||||||
# via
|
# via
|
||||||
# -r requirements/dev.in
|
# -r requirements/dev.in
|
||||||
# scrapy
|
# scrapy
|
||||||
typed-ast==1.5.2 \
|
|
||||||
--hash=sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e \
|
|
||||||
--hash=sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344 \
|
|
||||||
--hash=sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266 \
|
|
||||||
--hash=sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a \
|
|
||||||
--hash=sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd \
|
|
||||||
--hash=sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d \
|
|
||||||
--hash=sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837 \
|
|
||||||
--hash=sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098 \
|
|
||||||
--hash=sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e \
|
|
||||||
--hash=sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27 \
|
|
||||||
--hash=sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b \
|
|
||||||
--hash=sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596 \
|
|
||||||
--hash=sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76 \
|
|
||||||
--hash=sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30 \
|
|
||||||
--hash=sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4 \
|
|
||||||
--hash=sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78 \
|
|
||||||
--hash=sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca \
|
|
||||||
--hash=sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985 \
|
|
||||||
--hash=sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb \
|
|
||||||
--hash=sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88 \
|
|
||||||
--hash=sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7 \
|
|
||||||
--hash=sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5 \
|
|
||||||
--hash=sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e \
|
|
||||||
--hash=sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7
|
|
||||||
# via
|
|
||||||
# black
|
|
||||||
# mypy
|
|
||||||
typeguard==2.13.3 \
|
typeguard==2.13.3 \
|
||||||
--hash=sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4 \
|
--hash=sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4 \
|
||||||
--hash=sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1
|
--hash=sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1
|
||||||
|
@ -2105,16 +2069,10 @@ typing-extensions==4.1.1 \
|
||||||
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
||||||
# via
|
# via
|
||||||
# -r requirements/common.in
|
# -r requirements/common.in
|
||||||
# argon2-cffi
|
|
||||||
# arrow
|
|
||||||
# asgiref
|
|
||||||
# async-timeout
|
|
||||||
# black
|
# black
|
||||||
# boto3-stubs
|
# boto3-stubs
|
||||||
# botocore-stubs
|
# botocore-stubs
|
||||||
# importlib-metadata
|
|
||||||
# libcst
|
# libcst
|
||||||
# markdown-it-py
|
|
||||||
# mypy
|
# mypy
|
||||||
# mypy-boto3-s3
|
# mypy-boto3-s3
|
||||||
# myst-parser
|
# myst-parser
|
||||||
|
@ -2277,7 +2235,6 @@ zipp==3.7.0 \
|
||||||
# via
|
# via
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
# importlib-resources
|
# importlib-resources
|
||||||
# pep517
|
|
||||||
zope.interface==5.4.0 \
|
zope.interface==5.4.0 \
|
||||||
--hash=sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192 \
|
--hash=sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192 \
|
||||||
--hash=sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702 \
|
--hash=sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702 \
|
||||||
|
|
|
@ -208,10 +208,7 @@ sphinxcontrib-serializinghtml==1.1.5 \
|
||||||
typing-extensions==4.1.1 \
|
typing-extensions==4.1.1 \
|
||||||
--hash=sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42 \
|
--hash=sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42 \
|
||||||
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
||||||
# via
|
# via myst-parser
|
||||||
# importlib-metadata
|
|
||||||
# markdown-it-py
|
|
||||||
# myst-parser
|
|
||||||
urllib3==1.26.9 \
|
urllib3==1.26.9 \
|
||||||
--hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
|
--hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
|
||||||
--hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
|
--hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
|
||||||
|
|
|
@ -78,9 +78,7 @@ greenlet==1.1.2 \
|
||||||
importlib-metadata==4.11.3 ; python_version < "3.10" \
|
importlib-metadata==4.11.3 ; python_version < "3.10" \
|
||||||
--hash=sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6 \
|
--hash=sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6 \
|
||||||
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
|
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
|
||||||
# via
|
# via -r requirements/mypy.in
|
||||||
# -r requirements/mypy.in
|
|
||||||
# sqlalchemy
|
|
||||||
lxml-stubs==0.4.0 \
|
lxml-stubs==0.4.0 \
|
||||||
--hash=sha256:184877b42127256abc2b932ba8bd0ab5ea80bd0b0fee618d16daa40e0b71abee \
|
--hash=sha256:184877b42127256abc2b932ba8bd0ab5ea80bd0b0fee618d16daa40e0b71abee \
|
||||||
--hash=sha256:3b381e9e82397c64ea3cc4d6f79d1255d015f7b114806d4826218805c10ec003
|
--hash=sha256:3b381e9e82397c64ea3cc4d6f79d1255d015f7b114806d4826218805c10ec003
|
||||||
|
@ -165,32 +163,6 @@ tomli==2.0.1 \
|
||||||
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
|
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
|
||||||
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
|
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
|
||||||
# via mypy
|
# via mypy
|
||||||
typed-ast==1.5.2 \
|
|
||||||
--hash=sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e \
|
|
||||||
--hash=sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344 \
|
|
||||||
--hash=sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266 \
|
|
||||||
--hash=sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a \
|
|
||||||
--hash=sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd \
|
|
||||||
--hash=sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d \
|
|
||||||
--hash=sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837 \
|
|
||||||
--hash=sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098 \
|
|
||||||
--hash=sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e \
|
|
||||||
--hash=sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27 \
|
|
||||||
--hash=sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b \
|
|
||||||
--hash=sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596 \
|
|
||||||
--hash=sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76 \
|
|
||||||
--hash=sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30 \
|
|
||||||
--hash=sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4 \
|
|
||||||
--hash=sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78 \
|
|
||||||
--hash=sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca \
|
|
||||||
--hash=sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985 \
|
|
||||||
--hash=sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb \
|
|
||||||
--hash=sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88 \
|
|
||||||
--hash=sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7 \
|
|
||||||
--hash=sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5 \
|
|
||||||
--hash=sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e \
|
|
||||||
--hash=sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7
|
|
||||||
# via mypy
|
|
||||||
types-beautifulsoup4==4.10.16 \
|
types-beautifulsoup4==4.10.16 \
|
||||||
--hash=sha256:903d20430df659e98ea5063c013b9219d91861ecef145a0ac63061f0aad63d7b \
|
--hash=sha256:903d20430df659e98ea5063c013b9219d91861ecef145a0ac63061f0aad63d7b \
|
||||||
--hash=sha256:b48fa153ddfeb4c338f83ac8510de0085cf6e1a221b4adf9e52d9d6349205fda
|
--hash=sha256:b48fa153ddfeb4c338f83ac8510de0085cf6e1a221b4adf9e52d9d6349205fda
|
||||||
|
@ -299,7 +271,6 @@ typing-extensions==4.1.1 \
|
||||||
# via
|
# via
|
||||||
# boto3-stubs
|
# boto3-stubs
|
||||||
# botocore-stubs
|
# botocore-stubs
|
||||||
# importlib-metadata
|
|
||||||
# mypy
|
# mypy
|
||||||
# mypy-boto3-s3
|
# mypy-boto3-s3
|
||||||
# sqlalchemy2-stubs
|
# sqlalchemy2-stubs
|
||||||
|
|
|
@ -422,12 +422,7 @@ importlib-metadata==4.11.3 ; python_version < "3.10" \
|
||||||
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
|
--hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
|
||||||
# via
|
# via
|
||||||
# -r requirements/common.in
|
# -r requirements/common.in
|
||||||
# click
|
|
||||||
# cssutils
|
|
||||||
# jsonschema
|
|
||||||
# markdown
|
# markdown
|
||||||
# redis
|
|
||||||
# sqlalchemy
|
|
||||||
# zulip-bots
|
# zulip-bots
|
||||||
importlib-resources==5.4.0 ; python_version < "3.9" \
|
importlib-resources==5.4.0 ; python_version < "3.9" \
|
||||||
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
|
--hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
|
||||||
|
@ -1308,10 +1303,6 @@ typing-extensions==4.1.1 \
|
||||||
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
--hash=sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2
|
||||||
# via
|
# via
|
||||||
# -r requirements/common.in
|
# -r requirements/common.in
|
||||||
# argon2-cffi
|
|
||||||
# asgiref
|
|
||||||
# async-timeout
|
|
||||||
# importlib-metadata
|
|
||||||
# mypy-boto3-s3
|
# mypy-boto3-s3
|
||||||
# redis
|
# redis
|
||||||
# zulip
|
# zulip
|
||||||
|
|
|
@ -212,7 +212,7 @@ if [ -f /etc/os-release ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$os_id $os_version_id" in
|
case "$os_id $os_version_id" in
|
||||||
'debian 10' | 'debian 11' | 'ubuntu 20.04') ;;
|
'debian 11' | 'ubuntu 20.04') ;;
|
||||||
*)
|
*)
|
||||||
set +x
|
set +x
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
@ -220,9 +220,8 @@ case "$os_id $os_version_id" in
|
||||||
Unsupported OS release: $os_id $os_version_id
|
Unsupported OS release: $os_id $os_version_id
|
||||||
|
|
||||||
Zulip in production is supported only on:
|
Zulip in production is supported only on:
|
||||||
- Debian 10 "buster"
|
- Debian 11
|
||||||
- Debian 11 "bullseye"
|
- Ubuntu 20.04 LTS
|
||||||
- Ubuntu 20.04 LTS "focal"
|
|
||||||
|
|
||||||
For more information, see:
|
For more information, see:
|
||||||
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
||||||
|
|
|
@ -64,6 +64,7 @@ UNSUPPORTED_DISTROS = [
|
||||||
("ubuntu", "16.04"),
|
("ubuntu", "16.04"),
|
||||||
("ubuntu", "18.04"),
|
("ubuntu", "18.04"),
|
||||||
("debian", "9"),
|
("debian", "9"),
|
||||||
|
("debian", "10"),
|
||||||
]
|
]
|
||||||
distro_info = parse_os_release()
|
distro_info = parse_os_release()
|
||||||
vendor = distro_info["ID"]
|
vendor = distro_info["ID"]
|
||||||
|
@ -165,7 +166,6 @@ if os.path.exists("/etc/init.d/postgresql"):
|
||||||
postgresql_version = get_config(config_file, "postgresql", "version")
|
postgresql_version = get_config(config_file, "postgresql", "version")
|
||||||
if not postgresql_version:
|
if not postgresql_version:
|
||||||
default_postgresql_version = {
|
default_postgresql_version = {
|
||||||
("debian", "10"): "11",
|
|
||||||
("debian", "11"): "13",
|
("debian", "11"): "13",
|
||||||
("ubuntu", "20.04"): "12",
|
("ubuntu", "20.04"): "12",
|
||||||
("ubuntu", "22.04"): "14",
|
("ubuntu", "22.04"): "14",
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main
|
|
||||||
deb-src http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main
|
|
||||||
|
|
||||||
deb http://apt-archive.postgresql.org/pub/repos/apt/ buster-pgdg-archive main
|
|
||||||
deb-src http://apt-archive.postgresql.org/pub/repos/apt/ buster-pgdg-archive main
|
|
|
@ -258,7 +258,7 @@ After running the above command, you should see something similar to:
|
||||||
Using `manage.py` from within the Zulip development environment:
|
Using `manage.py` from within the Zulip development environment:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
|
||||||
./manage.py send_webhook_fixture_message \
|
./manage.py send_webhook_fixture_message \
|
||||||
--fixture=zerver/webhooks/helloworld/fixtures/hello.json \
|
--fixture=zerver/webhooks/helloworld/fixtures/hello.json \
|
||||||
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
||||||
|
@ -384,7 +384,7 @@ Once you have written some tests, you can run just these new tests from within
|
||||||
the Zulip development environment with this command:
|
the Zulip development environment with this command:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
|
||||||
./tools/test-backend zerver/webhooks/helloworld
|
./tools/test-backend zerver/webhooks/helloworld
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -433,7 +433,7 @@ stream name:
|
||||||
To trigger a notification using this webhook, use
|
To trigger a notification using this webhook, use
|
||||||
`send_webhook_fixture_message` from the Zulip command line:
|
`send_webhook_fixture_message` from the Zulip command line:
|
||||||
|
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
|
||||||
./manage.py send_webhook_fixture_message \
|
./manage.py send_webhook_fixture_message \
|
||||||
--fixture=zerver/tests/fixtures/helloworld/hello.json \
|
--fixture=zerver/tests/fixtures/helloworld/hello.json \
|
||||||
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
'--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# To build these production upgrade test images, say a Debian 10 Buster system
|
# To build these production upgrade test images, say an Ubuntu 20.04 Focal system
|
||||||
# preinstalled with Zulip 3.4:
|
# preinstalled with Zulip 3.4:
|
||||||
# docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:buster --build-arg=VERSION=3.4 --tag=zulip/ci:buster-3.4
|
# docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:focal --build-arg=VERSION=3.4 --tag=zulip/ci:focal-3.4
|
||||||
# docker push zulip/ci:buster-3.4
|
# docker push zulip/ci:focal-3.4
|
||||||
|
|
||||||
ARG BASE_IMAGE
|
ARG BASE_IMAGE
|
||||||
FROM $BASE_IMAGE
|
FROM $BASE_IMAGE
|
||||||
|
|
|
@ -3,8 +3,7 @@ set -eux
|
||||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||||
docker build . --build-arg=BASE_IMAGE=ubuntu:20.04 --pull --tag=zulip/ci:focal
|
docker build . --build-arg=BASE_IMAGE=ubuntu:20.04 --pull --tag=zulip/ci:focal
|
||||||
docker build . --build-arg=BASE_IMAGE=ubuntu:22.04 --pull --tag=zulip/ci:jammy
|
docker build . --build-arg=BASE_IMAGE=ubuntu:22.04 --pull --tag=zulip/ci:jammy
|
||||||
docker build . --build-arg=BASE_IMAGE=debian:10 --pull --tag=zulip/ci:buster
|
|
||||||
docker build . --build-arg=BASE_IMAGE=debian:11 --pull --tag=zulip/ci:bullseye
|
docker build . --build-arg=BASE_IMAGE=debian:11 --pull --tag=zulip/ci:bullseye
|
||||||
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:buster --build-arg=VERSION=3.4 --tag=zulip/ci:buster-3.4
|
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:focal --build-arg=VERSION=3.4 --tag=zulip/ci:focal-3.4
|
||||||
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=4.11 --tag=zulip/ci:bullseye-4.11
|
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=4.11 --tag=zulip/ci:bullseye-4.11
|
||||||
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=5.1 --tag=zulip/ci:bullseye-5.1
|
docker build . -f Dockerfile.prod --build-arg=BASE_IMAGE=zulip/ci:bullseye --build-arg=VERSION=5.1 --tag=zulip/ci:bullseye-5.1
|
||||||
|
|
|
@ -79,9 +79,7 @@ except OSError:
|
||||||
distro_info = parse_os_release()
|
distro_info = parse_os_release()
|
||||||
vendor = distro_info["ID"]
|
vendor = distro_info["ID"]
|
||||||
os_version = distro_info["VERSION_ID"]
|
os_version = distro_info["VERSION_ID"]
|
||||||
if vendor == "debian" and os_version == "10": # buster
|
if vendor == "debian" and os_version == "11": # bullseye
|
||||||
POSTGRESQL_VERSION = "11"
|
|
||||||
elif vendor == "debian" and os_version == "11": # bullseye
|
|
||||||
POSTGRESQL_VERSION = "13"
|
POSTGRESQL_VERSION = "13"
|
||||||
elif vendor == "ubuntu" and os_version == "20.04": # focal
|
elif vendor == "ubuntu" and os_version == "20.04": # focal
|
||||||
POSTGRESQL_VERSION = "12"
|
POSTGRESQL_VERSION = "12"
|
||||||
|
|
|
@ -19,7 +19,7 @@ fi
|
||||||
|
|
||||||
os="$(. /etc/os-release && echo "$ID $VERSION_ID")"
|
os="$(. /etc/os-release && echo "$ID $VERSION_ID")"
|
||||||
case "$os" in
|
case "$os" in
|
||||||
'ubuntu 14.04' | 'ubuntu 16.04' | 'ubuntu 18.04')
|
'ubuntu 14.04' | 'ubuntu 16.04' | 'ubuntu 18.04' | 'debian 10')
|
||||||
echo "Error: $os is no longer a supported platform for Zulip." >&2
|
echo "Error: $os is no longer a supported platform for Zulip." >&2
|
||||||
if [ -e /home/vagrant ]; then
|
if [ -e /home/vagrant ]; then
|
||||||
# shellcheck disable=SC2016
|
# shellcheck disable=SC2016
|
||||||
|
@ -32,8 +32,8 @@ esac
|
||||||
|
|
||||||
python_version="$(python3 --version)"
|
python_version="$(python3 --version)"
|
||||||
case "$python_version" in
|
case "$python_version" in
|
||||||
Python\ 3.[0-6].*)
|
Python\ 3.[0-7].*)
|
||||||
echo 'Error: Zulip requires an OS with Python 3.7 or later.' >&2
|
echo 'Error: Zulip requires an OS with Python 3.8 or later.' >&2
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
FROM debian:10
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
ARG DEBIAN_MIRROR
|
ARG UBUNTU_MIRROR
|
||||||
|
|
||||||
# Basic packages and dependencies of docker-systemctl-replacement
|
# Basic packages and dependencies of docker-systemctl-replacement
|
||||||
RUN echo locales locales/default_environment_locale select C.UTF-8 | debconf-set-selections \
|
RUN echo locales locales/default_environment_locale select C.UTF-8 | debconf-set-selections \
|
||||||
&& echo locales locales/locales_to_be_generated select "C.UTF-8 UTF-8" | debconf-set-selections \
|
&& echo locales locales/locales_to_be_generated select "C.UTF-8 UTF-8" | debconf-set-selections \
|
||||||
&& { [ ! "$DEBIAN_MIRROR" ] || sed -i "s|http://\(\w*\.\)*\.debian\.org/debian |$DEBIAN_MIRROR |" /etc/apt/sources.list; } \
|
&& { [ ! "$UBUNTU_MIRROR" ] || sed -i "s|http://\(\w*\.\)*archive\.ubuntu\.com/ubuntu/\? |$UBUNTU_MIRROR |" /etc/apt/sources.list; } \
|
||||||
&& apt-get update \
|
# This restores man pages and other documentation that have been
|
||||||
|
# stripped from the default Ubuntu cloud image and installs
|
||||||
|
# ubuntu-minimal and ubuntu-standard.
|
||||||
|
#
|
||||||
|
# This makes sense to do because we're using this image as a
|
||||||
|
# development environment, not a minimal production system.
|
||||||
|
&& printf 'y\n\n' | unminimize \
|
||||||
&& apt-get install --no-install-recommends -y \
|
&& apt-get install --no-install-recommends -y \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
curl \
|
curl \
|
||||||
|
@ -32,13 +38,7 @@ RUN \
|
||||||
&& mkdir -p /run/sshd \
|
&& mkdir -p /run/sshd \
|
||||||
# docker-systemctl-replacement doesn’t work with template units yet:
|
# docker-systemctl-replacement doesn’t work with template units yet:
|
||||||
# https://github.com/gdraheim/docker-systemctl-replacement/issues/62
|
# https://github.com/gdraheim/docker-systemctl-replacement/issues/62
|
||||||
&& ln -ns /lib/systemd/system/postgresql@.service /etc/systemd/system/multi-user.target.wants/postgresql@11-main.service \
|
&& ln -ns /lib/systemd/system/postgresql@.service /etc/systemd/system/multi-user.target.wants/postgresql@12-main.service \
|
||||||
# redis fails to start with the default configuration if IPv6 is disabled:
|
|
||||||
# https://github.com/antirez/redis/pull/5598
|
|
||||||
&& dpkg-divert --add --rename /etc/default/redis-server \
|
|
||||||
&& printf 'ULIMIT=65536\nDAEMON_ARGS="/etc/redis/redis.conf --bind 127.0.0.1"\n' > /etc/default/redis-server \
|
|
||||||
&& mkdir /etc/systemd/system/redis-server.service.d \
|
|
||||||
&& printf '[Service]\nExecStart=\nExecStart=/usr/bin/redis-server /etc/redis/redis.conf --bind 127.0.0.1\n' > /etc/systemd/system/redis-server.service.d/override.conf \
|
|
||||||
# Set up the vagrant user and its SSH key (globally public)
|
# Set up the vagrant user and its SSH key (globally public)
|
||||||
&& useradd -ms /bin/bash -u "$VAGRANT_UID" vagrant \
|
&& useradd -ms /bin/bash -u "$VAGRANT_UID" vagrant \
|
||||||
&& mkdir -m 700 ~vagrant/.ssh \
|
&& mkdir -m 700 ~vagrant/.ssh \
|
||||||
|
|
|
@ -48,4 +48,4 @@ API_FEATURE_LEVEL = 128
|
||||||
# historical commits sharing the same major version, in which case a
|
# historical commits sharing the same major version, in which case a
|
||||||
# minor version bump suffices.
|
# minor version bump suffices.
|
||||||
|
|
||||||
PROVISION_VERSION = "185.0"
|
PROVISION_VERSION = "185.1"
|
||||||
|
|
|
@ -17,7 +17,7 @@ integration](/api/incoming-webhooks-walkthrough).
|
||||||
`send_webhook_fixture_message` from a [Zulip development
|
`send_webhook_fixture_message` from a [Zulip development
|
||||||
environment](https://zulip.readthedocs.io/en/latest/development/overview.html):
|
environment](https://zulip.readthedocs.io/en/latest/development/overview.html):
|
||||||
|
|
||||||
(zulip-py3-venv) vagrant@debian-10:/srv/zulip$
|
(zulip-py3-venv) vagrant@vagrant:/srv/zulip$
|
||||||
./manage.py send_webhook_fixture_message \
|
./manage.py send_webhook_fixture_message \
|
||||||
> --fixture=zerver/tests/fixtures/helloworld/hello.json \
|
> --fixture=zerver/tests/fixtures/helloworld/hello.json \
|
||||||
> '--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
> '--url=http://localhost:9991/api/v1/external/helloworld?api_key=<api_key>'
|
||||||
|
|
Loading…
Reference in New Issue