{"id":17368,"date":"2026-01-20T15:00:55","date_gmt":"2026-01-20T12:00:55","guid":{"rendered":"https:\/\/trueconf.com/blog\/?p=17368"},"modified":"2026-04-10T15:52:13","modified_gmt":"2026-04-10T12:52:13","slug":"how-to-run-trueconf-server-in-a-docker-container","status":"publish","type":"post","link":"https:\/\/trueconf.com/blog\/knowledge-base\/how-to-run-trueconf-server-in-a-docker-container","title":{"rendered":"How to run TrueConf Server in a Docker container"},"content":{"rendered":"<p class=\"primary-medium-text ui-mb-sm-1\">TrueConf Server video conferencing platform can be installed both on <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/get-video-conferencing-system-15-minutes.html\" target=\"_blank\" rel=\"noopener\">Windows OS<\/a> and on <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/install-and-set-up-your-video-conferencing-server-for-linux-in-15-minutes.html\" target=\"_blank\" rel=\"noopener\">various Linux distros<\/a>. For even more convenient deployment you can use our Docker container that already contains TrueConf Server. The Docker container is available in a public repository, follow this link to download:<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\"><a href=\"https:\/\/hub.docker.com\/r\/trueconf\/trueconf-server\" target=\"_blank\" rel=\"noopener\">https:\/\/hub.docker.com\/r\/trueconf\/trueconf-server<\/a><\/p>\r\n\r\n<div class=\"accent-note accent-note--line accent-note--special ui-mb-sm-1 ui-mt-xs-3\">\r\n    <p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\">If you are using other containers and managing them via Docker Compose, <b><i>do not include<\/i><\/b> TrueConf Server container management in your YAML file. Restarting Compose with the <b>up \/ down<\/b> commands will cause the server license to be invalidated (because the container is recreated). Therefore, either run TrueConf Server separately in a container and manage it outside of Compose, or restart Compose using the start \/ stop commands instead:<\/p>\r\n    <p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\"><code>docker compose start<\/code><\/p>\r\n    <p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\"><code>docker compose stop<\/code><\/p>\r\n<\/div>\r\n\r\n<h2 id=\"what_is_docker\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">What is Docker?<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\"><a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener\"><b>Docker<\/b><\/a> is software package designed for delivering applications to physical and virtual machines and running these applications in an isolated environment (so-called <b><i>container<\/i><\/b>). In its turn, the container is created from the <b><i>image<\/i><\/b>, which contains packaged software and all the necessary dependencies. The machine where you installed the docker engine and the environment where your containers operate is called <b><i>host<\/i><\/b> (e.g. your computer).\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">A number of popular images are hosted in public repositories on the <a href=\"https:\/\/hub.docker.com\" target=\"_blank\" rel=\"noopener\">Docker Hub<\/a> official portal.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">This way of software deployment is often used thanks to its versatility, lower system resources usage, quick and easy launch, simple maintenance and rich database of publicly available images. Additionally, containers are independent and isolated from each other.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">This article shows how to install Docker on <b>Debian 10<\/b> and run TrueConf Server container.<\/p>\r\n\r\n<div class=\"accent-note accent-note--line ui-mb-sm-1\"><p class=\"primary-medium-text\">If you want to learn how to install Docker on Windows and macOS, check out the <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener\">official guide<\/a>.<\/p><\/div>\r\n\r\n<div class=\"accent-note accent-note--line ui-mb-sm-1\"><p class=\"primary-medium-text\">In order to run the following commands you should have <b>sudo<\/b> app, while user\u2019s name has to belong to the respective group. If you\u2019d like to check whether you have <b>sudo<\/b> installed, please run <code>sudo -V<\/code> command. If you don\u2019t have <b>sudo<\/b> by default, you can install it by using <code>apt install sudo<\/code>\u00a0(it should be run under the <b>root <\/b>account). To add another user with <b>user<\/b> login to the <b>sudo<\/b> group, please run <code>sudo usermod -a -G sudo user<\/code>. You should also add this user to the <b>docker<\/b> group as shown in the <a href=\"https:\/\/docs.docker.com\/engine\/install\/linux-postinstall\/\" target=\"_blank\" rel=\"noopener\">official guide<\/a>.<\/p><\/div>\r\n\r\n<h2 id=\"step1\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Step 1. Installing Docker<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In order to install Docker on Debian from the official repository you should run the following commands in your console:<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--num\">Install necessary software package to work with the repositories via HTTPS:\r\n<pre class=\"wrap:true lang:default decode:true \">sudo apt update &amp;&amp; sudo apt install -yq apt-transport-https ca-certificates curl gnupg lsb-release<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Import official Docker GPG key:\r\n<pre class=\"wrap:true lang:default decode:true \">curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Use the following command to set up the stable repository:\r\n<pre class=\"wrap:true lang:default decode:true \">echo \\\r\n  \"deb [arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian \\\r\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Install Docker and all the relevant packages:\r\n<pre class=\"wrap:true lang:default decode:true\">sudo apt update &amp;&amp; sudo apt install -yq docker-ce docker-ce-cli containerd.io<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Verify that the installation has been successful:\r\n<pre class=\"lang:default decode:true \">sudo docker run hello-world<\/pre>\r\n<\/li>\r\n<\/ul>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">This command downloads a test image, opens the image in an isolated container, displays relevant information in the terminal console and stops the container automatically.<\/p>\r\n\r\n<h2 id=\"step2\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Step 2. Downloading and running TrueConf Server container<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In order to create and run TrueConf Server container from an image automatically, the <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/run\/\" target=\"_blank\" rel=\"noopener\"><b>docker run<\/b> command<\/a> is used. If you don\u2019t have image file in your system it will be downloaded automatically from the public repository:<\/p>\r\n\r\n<pre class=\"lang:default decode:true \">sudo docker run [OPTIONS] trueconf\/trueconf-server:testing<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where <code>[OPTIONS]<\/code> are additional parameters. For instance, a command which is run the first time:<\/p>\r\n\r\n<pre class=\"wrap:true lang:default decode:true\">sudo docker run -d -p 80:80 -p 443:443 -p 4307:4307 -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib trueconf\/trueconf-server:stable --name vcs_server<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">downloads TrueConf Server image, then creates and runs the container in the background, and returns control of the terminal to the user. Meanwhile, all the necessary ports for TrueConf Server operation will be open. The control panel access is given to the admin with username <code>tc_admin<\/code> and password <code>12345<\/code>, while TrueConf Server working directory will be mounted to the host directory by the path <code>\/home\/$USER\/trueconf\/server<\/code>. This user (<code>admin<\/code> in our example) will not be linked to the users of the host OS. So, it can have any login data. This user will be created in the container and will be added as the administrator with full access to the control panel.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Below we will review some of the used parameters which we can combine with the standard Docker options described in the <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener\">official guide<\/a>. For instance, you can enter key <code>--name<\/code> in order to give name to the container for more convenient usage (previously we set the container name <code>--name vcs_server<\/code>, this name will be used in later examples).<\/p>\r\n\r\n<div class=\"accent-note accent-note--line ui-mb-sm-1 ui-mt-xs-3\"><p class=\"primary-medium-text\">\r\n<code>$USER<\/code> is an environment variable in Linux-based operating systems, when this variable is used in commands, it will be automatically replaced with the login of the current system user.\r\n<\/p><\/div>\r\n\r\n<h3 id=\"host_network_connection\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Host network connection (&#8211;network=host)<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In order to establish the container connection with the network run the command <code>--network=host<\/code>. It allows you to use the host network connection.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If you have specified this parameter, it will not be necessary to configure port forwarding described below. However, you have to make sure that the <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/ports-trueconf-server-use.html\" target=\"_blank\" rel=\"noopener\">required ports<\/a> are opened on the host machine, at least <b>80<\/b>, <b>443<\/b>, and <b>4307<\/b>.<\/p>\r\n\r\n<h3 id=\"port_forwarding\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Port forwarding (<code>-p [host_port]:[container_port]\/[protocol]<\/code>)<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Binding of the host machine port <code>[host_port]<\/code> to port <code>[container_port]<\/code> of the container using <code>[protocol]<\/code>\u00a0(if not specified, <b>tcp<\/b> is used by default). Port ranges are specified in the same way, e.g. <code>-p 53000-55000:53000-55000\/udp<\/code>.<\/p>\r\n\r\n<div class=\"accent-note accent-note--line ui-mb-sm-1\"><p class=\"primary-medium-text\">It is <b>required<\/b> to forward ports <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/ports-trueconf-server-use.html#Mandatory_inbound_ports_for_TrueConf_Server_and_TrueConf_Server_Free\" target=\"_blank\" rel=\"noopener\">mandatory for TrueConf Server<\/a>: <b>80<\/b>, <b>443<\/b>, <b>4307<\/b>.<\/p><\/div>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If you need to provide access for TrueConf Server <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/ports-trueconf-server-use.html#Additional_ports_for_TrueConf_Server_and_TrueConf_Server_Free\" target=\"_blank\" rel=\"noopener\">additional ports<\/a>, (e.g. for WebRTC), you should also specify them:<\/p>\r\n\r\n<pre class=\"wrap:true lang:default decode:true\">sudo docker run -d -p 80:80 -p 443:443 -p 4307:4307 -p 53000-55000:53000-55000\/udp -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib trueconf\/trueconf-server:stable --name vcs_server<\/pre>\r\n\r\n<h3 id=\"setting_enviroment\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Setting environment variables (<code>-e [variable]=[value]<\/code>)<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Setting environment variables for the container. You can set:<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=password<\/code> \u2013 creates a TrueConf Server admin account with login <code>tc_admin<\/code> and password <code>password<\/code> inside the container. Please note that this user is not related to host OS users, which is why you can use any authorization data.<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-e INIT_DB=true<\/code> \u2013 creates a database cluster for initial use in the force mode. The database is mounted on the host volume. This option erases all the previous TrueConf Server settings and data such as chat history, registration information, user and group list, conferences profiles, etc. Only video conference recordings will be saved, however they won\u2019t be displayed in the control panel. <b>This action is irreversible, use this option only if you are sure that it is necessary to clear the database and you have a backup copy!<\/b><\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-e ServerID=xxxx -e Serial=xxxx -e ServerName=xxxx<\/code> \u2013 automatic TrueConf Server registration (if you have already received <a href=\"https:\/\/trueconf.com\/blog\/wiki\/registration-key\" target=\"_blank\" rel=\"noopener\">TrueConf Server registration key<\/a>), where:\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>ServerID<\/code> \u2013\u00a0<a href=\"https:\/\/trueconf.com\/blog\/wiki\/server-id\" target=\"_blank\" rel=\"noopener\">Server ID<\/a><\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>Serial<\/code> \u2013 registration key without the first four or five characters, e.g., if your registration key is <code>AAAAA-BBBB-CCCC-DDDD<\/code>, you should enter <code>BBBB-CCCC-DDDD<\/code><\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>ServerName<\/code> \u2013 domain name (FQDN) to get the access to the server, e.g., <code>video.company.name<\/code>.<\/li>\r\n<\/ul>\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Please note that to start registration you should enter all the three parameters at once.<\/p>\r\n<\/li>\r\n\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-e ServiceAddress<\/code> \u2013 external video conferencing server address to get access outside the corporate network. If it\u2019s not set, it will be <code>ServerName<\/code> by default.<\/li>\r\n<\/ul>\r\n\r\n<h3 id=\"mounting_derictories\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Mounting directories (<code>-v [host_path]:[container_path]<\/code>)<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Mounting <code>[host_path]<\/code> directory on the host to the <code>[container_path]<\/code> container directory. You can use a directory mounting to save log files and other generated server data to the <code>[host_path]<\/code> path. It includes such data as server settings, accounts, conferences list, recordings, SSL certificates and user scripts, etc. After the container stops, the data is saved and is available next time the container is running. If the <code>[host_path]<\/code> doesn\u2019t exist on the host, it will be created automatically.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">We will show available paths for mounting with examples below:<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib<\/code> \u2013 saving all the files (including database files) in TrueConf Server working directory except for the log files in the\u00a0<code>\/home\/$USER\/trueconf\/server<\/code> host directory.<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-v \/home\/$USER\/trueconf\/server\/log:\/opt\/trueconf\/server\/var\/log<\/code> \u2013 saving log files that generate only when TrueConf Server is running in the <code>\/home\/$USER\/trueconf\/server\/log<\/code> host directory.\r\n<div class=\"accent-note accent-note--line accent-note--special ui-mb-sm-1 ui-mt-xs-3\"><p class=\"primary-medium-text\">\r\nTo make sure that the data and settings are not lost when the <a href=\"#upd_tcs\">Docker container is updated<\/a>, we recommend mounting and starting TrueConf Server at the path <code>\/opt\/trueconf\/server\/var\/lib<\/code>.\r\n<\/p><\/div>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-v \/path\/to\/custom\/certs:\/ssl<\/code> \u2013 specifies path to the <code>\/path\/to\/custom\/certs<\/code> host directory with SSL certificate files to be used by the server in the container. In order to apply SSL certificates after the mounting, please open the TrueConf Server control panel, go to <strong>Web \u2192 HTTPS<\/strong> section and select <strong>Use custom certificate<\/strong> in the <strong>HTTPS Mode<\/strong> drop-down list. Click <strong>Test configuration<\/strong> and <strong>Apply<\/strong> to save changes.<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>-v \/path\/to\/custom\/scripts:\/setup.d<\/code> \u2013 command for <code>\/path\/to\/custom\/scripts<\/code> volume mounting with additional sh scripts files to be run at the container startup.<\/li>\r\n<\/ul>\r\n\r\n<div class=\"accent-note accent-note--line ui-mb-sm-1\"><p class=\"primary-medium-text\">Please take two details into account when mounting the directory with the certificates:\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n\t<li class=\"ui-list__item ui-list__item--num\">TrueConf Server works only with the <b>.crt<\/b> format. So, the folder should include two files with the following extensions: <b>.crt<\/b> for the certificate file and <b>.key<\/b> for the key file. If your certificate is in a different format, convert into <b>.crt<\/b> as it is described in our article about <a href=\"https:\/\/trueconf.com\/blog\/knowledge-base\/adjust-https-trueconf-server.html\" target=\"_blank\" rel=\"noopener\">HTTPS configuration<\/a>.<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">The files should be named in the following way: the certificate \u2014 <b>tls.crt<\/b>, the key \u2014 <b>tls.key<\/b>.<\/li>\r\n<\/ul>\r\n<\/p><\/div>\r\n\r\n<h3 id=\"container_name_and_id\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Container name and ID<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">To use a number of commands, one has to know the name and identifier (ID) of the container. To get this information, run this command:<\/p>\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker ps -a<\/pre> \r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">You will get the list of all containers and their statuses. To display only running containers, execute this command:<\/p>\r\n<pre class=\"lang:default decode:true \" >sudo docker ps<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In the Docker documentation, you can find more examples of how the <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/ps\/\" target=\"_blank\" rel=\"noopener\"><code>ps<\/code> command can be used<\/a>.<\/p>\r\n\r\n<h3 id=\"stopping_and_restarting\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">Stopping and restarting the container<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">To stop the container, please run the command:<\/p>\r\n\r\n<pre class=\"lang:default decode:true \">sudo docker stop vcs_server<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where <code>vcs_server<\/code> is the <a href=\"#Container_name_and_ID\">name or identifier of your container<\/a>.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">To restart the container that has been stopped earlier, please run the command:<\/p>\r\n\r\n<pre class=\"lang:default decode:true \">sudo docker start vcs_server<\/pre>\r\n\r\n<h3 id=\"one_time_container\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">One-time container running<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">For testing purposes you may need to run one-time container. This container will be deleted automatically after its stop. You can do it by running <code>--rm<\/code>.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Here\u2019s how one-time container launch command with an admin\u2019s login and password specified will look like:<\/p>\r\n\r\n<pre class=\"wrap:true lang:default decode:true\">sudo docker run --rm --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 trueconf\/trueconf-server:stable --name vcs_server<\/pre>\r\n\r\n<h2 id=\"step3\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Step 3. Registering TrueConf Server<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If you didn\u2019t register your TrueConf Server earlier by <a href=\"#Setting_environment_variables_-e_variablevalue\">using <b>-e <\/b>key<\/a> , you can register it via the <a href=\"https:\/\/trueconf.com\/blog\/wiki\/trueconf-server-control-panel\" target=\"_blank\" rel=\"noopener\">TrueConf Server control panel<\/a>. Open the control panel in the browser on any of your local network computers and enter the IP address of the server where the container is running.<\/p>\r\n\r\n<h2 id=\"step4\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Step 4. Adding TrueConf Server administrators<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">Before adding new users with admin access to the TrueConf Server control panel, please make sure that the container has been run, and its directory <code>\/opt\/trueconf\/server\/var\/lib<\/code> has already been mounted to the <code>\/home\/$USER\/trueconf\/server\/lib<\/code> directory on the host as <a href=\"#Mounting_directories_-v_host_pathcontainer_path\">shown before<\/a>.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">These are the three authorization files which have to be created by executing the following command:<\/p>\r\n\r\n<pre class=\"wrap:true lang:default decode:true\">sudo touch \/home\/$USER\/trueconf\/server\/docker\/passwd \/home\/$USER\/trueconf\/server\/docker\/tcadmins \/home\/$USER\/trueconf\/server\/docker\/tcsecadmins<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where<\/p>\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><b>passwd<\/b> \u2013 a login and an encrypted password<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><b>tcadmins<\/b> \u2013 a list of server administrator logins with full access<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><b>tcsecadmins<\/b> \u2013 a list of server administrator logins with <a href=\"https:\/\/docs.trueconf.com\/server\/en\/admin\/security-admin#security-admin-capabilities\" target=\"_blank\" rel=\"noopener\">Security Admin access level<\/a>.<\/li>\r\n<\/ul>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">After that please follow the next steps:<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--num\">Install <a href=\"https:\/\/packages.debian.org\/en\/sid\/apache2-utils\" target=\"_blank\" rel=\"noopener\">apache2-utils<\/a> utility package which contains <b>htpasswd <\/b>to manage secret passwords:\r\n<pre class=\"lang:default decode:true\">sudo apt install -yq apache2-utils<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Generate a password for a new login. The password will be saved as <b>passwd<\/b> file in the directory from which the terminal has been run:\r\n<pre class=\"lang:default decode:true\">htpasswd -c -d -b passwd new_admin password<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>new_admin<\/code> \u2013 a new admin\u2019s login<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--disc\"><code>password<\/code> \u2013 password<\/li>\r\n<\/ul>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Add content from the generated <b>passwd<\/b> file to the <code>\/home\/$USER\/trueconf\/server\/docker\/passwd<\/code> file. The file is on the volume which is mounted on the host. For this purpose you can use a text editor such as <b>vim<\/b> or <b>nano<\/b>. Please run it under the <b>root<\/b> account or using <b>sudo.<\/b> You can also run the command:\r\n<pre class=\"wrap:true lang:default decode:true\">sudo bash -c 'cat passwd &gt;&gt; \/home\/$USER\/trueconf\/server\/docker\/passwd'<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">Add the admin login you have created either to <b>tcadmins<\/b> or <b>tcsecadmins<\/b> file, depending on the level access you want to grant to the admin:\r\n<pre class=\"wrap:true lang:default decode:true\">sudo bash -c 'echo new_admin &gt;&gt; \/home\/$USER\/trueconf\/server\/docker\/tcadmins'<\/pre>\r\n<\/li>\r\n \t<li class=\"ui-list__item ui-list__item--num\">To check if you have added admins successfully, please visit TrueConf Server guest page, click <strong>Administrator login<\/strong> and sign in with a new account.<\/li>\r\n<\/ul>\r\n\r\n<h2 id=\"step5\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Step 5. Adding container to run automatically<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In order to start TrueConf Server container <a href=\"https:\/\/docs.docker.com\/config\/containers\/start-containers-automatically\/\" target=\"_blank\" rel=\"noopener\">automatically<\/a>, e.g, after host machine reboot, please use <code>--restart<\/code> key. You can specify the key by running the <code><a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/update\/\" target=\"_blank\" rel=\"noopener\">update<\/a><\/code> command:<\/p>\r\n\r\n<pre class=\"wrap:true lang:default decode:true\">sudo docker container update --restart always vcs_server<\/pre>\r\nwhere <code>vcs_server<\/code> is your container\u2019s name or ID.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">You can also do it at the time when the container is running.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">You can view information about the container which is running by using <code>sudo docker ps<\/code>command.<\/p>\r\n\r\n<h2 id=\"upd_tcs\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Updating TrueConf Server in the container<\/h2>\r\n\r\n<h3 id=\"for_tcs_529_above\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">For updating TrueConf Server from version 5.2.9 to 5.4.5<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If TrueConf Server (from 5.2.9 to 5.4.5) is run in the container, you will only need to download a new image to update (e.g., you may use the <b>stable<\/b> tag to download the release version).<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n\t<li class=\"ui-list__item ui-list__item--num\">Download an image with this command:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker pull trueconf\/trueconf-server:stable<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Stop the current container with TrueConf Server as it <a href=\"#Stopping_and_restarting_the_container\">is described before<\/a>.\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker stop vcs_server<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\"><a href=\"#Step_2_Downloading_and_running_TrueConf_Server_container\">Run the new container<\/a> from the image downloaded at step 1 ( the example with the stable tag). You will need to specify the paths for mounting directories (they must be identical to the ones used previously):\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib trueconf\/trueconf-server:stable --name vcs_server<\/pre> \r\n\r\n<\/li>\r\n<\/ul>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If everything is installed successfully, you may delete the previous containers and the image as it is <a href=\"#Deleting_the_container_and_image\">described below<\/a>.<\/p>\r\n\r\n<h3 id=\"for_tcs_55\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">For updating TrueConf Server 5.2.8 or above to 5.2.9+ and from 5.4.5 to 5.5.0+<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If you need to update TrueConf Server 5.2.8 to 5.2.9+ or from 5.4.5 to 5.5.0+, you will need to export the information from the database:<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n\t<li class=\"ui-list__item ui-list__item--num\">Download the image with the new version (e.g., by using the <b>stable<\/b> tag to download the release version):\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker pull trueconf\/trueconf-server:stable<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Go to the command shell (terminal) of the container where TrueConf Server is deployed:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker exec -it vcs_server bash<\/pre> \r\nwhere <code>vcs_server<\/code> is the <a href=\"#Container_name_and_ID\">name or identifier of your container<\/a>.\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Create a backup copy of the TrueConf Server database:\r\n \r\n<pre class=\"lang:default decode:true \" >su -s \/bin\/sh postgres --command='PGCLUSTER=11\/trueconf pg_dumpall -p 5433 -U postgres &gt; \/opt\/trueconf\/server\/var\/lib\/database\/11\/trueconf\/tcs_db.dump'<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">As a result, the backup copy will be saved in the mounted directory at the path\r\n \r\n<pre class=\"lang:default decode:true \" >&lt;mounted_lib_path&gt;\/database\/11\/trueconf\/tcs_db.dump<\/pre> \r\nwhere <code><mounted_lib_path><\/code> is the path specified when the container was started. Here is an example of the path to the backup file:\r\n \r\n<pre class=\"lang:default decode:true \" >\/home\/$USER\/trueconf\/server\/lib\/database\/11\/trueconf\/tcs_db.dump<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Exit the container terminal:\r\n<pre class=\"lang:default decode:true \" >exit<\/pre>\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Copy the backup copy of the database to any convenient location, for example <code>\/home\/$USER\/backup<\/code>:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo cp \/home\/$USER\/trueconf\/server\/lib\/database\/11\/trueconf\/tcs_db.dump \/home\/$USER\/backup<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Execute the following command to create and run the container with the new version of TrueConf Server:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server:\/opt\/trueconf\/server\/var\/lib -e INIT_DB=TRUE -e DUMP_PATH=\/opt\/backup -v \/home\/$USER\/backup:\/opt\/backup trueconf\/trueconf-server:stable --name vcs_server<\/pre> \r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where <code>\/home\/$USER\/backup<\/code> is the directory with the database backup file.<\/p>\r\n \r\n<p class=\"primary-medium-text ui-mb-sm-1\">In addition to the database backup path, use the <code>-v<\/code> key to specify the paths for <a href=\"#Mounting_directories_-v_host_pathcontainer_path\">mounting directories<\/a> (they must be identical to the ones used before).<\/p>\r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Go to the guest page of the server by using the IP address of the machine where the container is running. Make sure that all the settings have been imported. If everything works as it should, the previous container and image can be deleted as it is <a href=\"#Deleting_the_container_and_image\">described below<\/a>.<\/li>\r\n<\/ul>\r\n\r\n<h2 id=\"deleting_container_and_img\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">Deleting the container and image<\/h2>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">If you no longer need the container, you can delete it with the <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/rm\/\" target=\"_blank\" rel=\"noopener\"><code>rm<\/code> command<\/a>:<\/p>\r\n\r\n<pre class=\"lang:default decode:true \" >sudo docker rm vcs_server<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">where <code>vcs_server<\/code> is the <a href=\"#Container_name_and_ID\">name or identifier of your container<\/a>. The corresponding image will remain even if all containers are deleted. Besides, the directory which was <a href=\"#Mounting_directories_-v_host_pathcontainer_path\">used for mounting<\/a> will also remain in the OS.\r\n\r\nTo delete a running container, add the key <code>--force<\/code>:<\/p>\r\n\r\n<pre class=\"lang:default decode:true \" >sudo docker rm --force vcs_server<\/pre> \r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">To delete an image (e.g., if you have downloaded a new image and the old one is no longer needed):<\/p>\r\n\r\n<ul class=\"ui-list ui-list--medium\" style=\"margin-bottom: 18px;\">\r\n\t<li class=\"ui-list__item ui-list__item--num\">Check the list of all images together with their tags and identifiers:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker images<\/pre> \r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">To delete the selected image, run the <code>rmi<\/code> command, for example:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker rmi trueconf\/trueconf-server:5.2.8.10213<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1\">In this case, you will delete the image with the repository and tag <code>trueconf\/trueconf-server:5.2.8.10213<\/code>. If this image no longer has any tags, it will also be deleted. To learn more about the use of this command, read the <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/rmi\/\" target=\"_blank\" rel=\"noopener\">official Docker documentation<\/a>.<\/p>\r\n\r\n<\/li>\r\n\t<li class=\"ui-list__item ui-list__item--num\">Since the <code>rmi<\/code> command does not free up space on the OS storage, you will need to execute <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/system_prune\/\" target=\"_blank\" rel=\"noopener\"><code>system prune<\/code> command<\/a> to delete unnecessary images and containers:\r\n \r\n<pre class=\"lang:default decode:true \" >sudo docker system prune -a<\/pre> \r\n\r\n<\/li>\r\n<\/ul>\r\n\r\n<h2 id=\"faq\" class=\"h4--main h4--thick black-text ui-mb-xs-3 ui-mt-md-1\">\ud83c\udd98 How to solve typical problems<\/h2>\r\n\r\n<h3 id=\"not-start\" class=\"h5--main h5--thick black-text ui-mb-xs-3 ui-mt-md-1\">The container does not start after update<\/h3>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\">Run the following command to view logs:<\/p>\r\n\r\n<pre class=\"lang:default decode:true wrap:true\">docker logs vcs_server<\/pre>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\">where <code>vcs_server<\/code> is the <a href=\"#container_name_and_id\">name or identifier of your container<\/a>.<\/p>\r\n\r\n<p class=\"primary-medium-text ui-mb-sm-1 ui-mt-xs-3\">If you see a message about an incorrect version of Postgres, export the information from the database as shown for <a href=\"#for_tcs_55\">updating from the version 5.2.8 or above<\/a>.<\/p>\r\n\r\n<script type=\"application\/ld+json\">\r\n{\r\n  \"@context\": \"https:\/\/schema.org\",\r\n  \"@type\": \"HowTo\",\r\n  \"name\": \"How to Install TrueConf Server Using Docker on Debian 10\",\r\n  \"description\": \"This article shows how to install Docker on Debian 10 and run TrueConf Server container. It covers installation, configuration, registration, administration, and basic maintenance tasks.\",\r\n  \"image\": \"https:\/\/trueconf.com\/blog\/wp-content\/uploads\/2020\/04\/trueconf-server-docker.png\",\r\n  \"estimatedCost\": {\r\n    \"@type\": \"MonetaryAmount\",\r\n    \"value\": \"0\",\r\n    \"currency\": \"USD\"\r\n  },\r\n  \"supply\": [\r\n    {\r\n      \"@type\": \"HowToSupply\",\r\n      \"name\": \"sudo privileges on Debian 10\"\r\n    },\r\n    {\r\n      \"@type\": \"HowToSupply\",\r\n      \"name\": \"Internet connection to download Docker and the TrueConf Server image\"\r\n    }\r\n  ],\r\n  \"tool\": [\r\n    {\r\n      \"@type\": \"HowToTool\",\r\n      \"name\": \"Terminal \/ command line\"\r\n    },\r\n    {\r\n      \"@type\": \"HowToTool\",\r\n      \"name\": \"Docker engine (installed during the guide)\"\r\n    }\r\n  ],\r\n  \"step\": [\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 1,\r\n      \"name\": \"Install Docker on Debian 10\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#step1\",\r\n      \"itemListElement\": [\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Update package index and install prerequisites:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo apt update && sudo apt install -yq apt-transport-https ca-certificates curl gnupg lsb-release\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Import the official Docker GPG key:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"curl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Set up the stable repository:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"echo \\\\\\n  \\\"deb [arch=amd64 signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian \\\\\\n  $(lsb_release -cs) stable\\\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Install Docker Engine and associated packages:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo apt update && sudo apt install -yq docker-ce docker-ce-cli containerd.io\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Verify the installation:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker run hello-world\"\r\n          }\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 2,\r\n      \"name\": \"Download and run TrueConf Server container\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#step2\",\r\n      \"text\": \"Use the <code>docker run<\/code> command to automatically download the TrueConf Server image and start a container. The basic command is:\",\r\n      \"code\": {\r\n        \"@type\": \"Code\",\r\n        \"text\": \"sudo docker run [OPTIONS] trueconf\/trueconf-server:testing\"\r\n      },\r\n      \"itemListElement\": [\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"A typical first-run command includes port forwarding, admin credentials, and volume mounting. Example:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker run -d -p 80:80 -p 443:443 -p 4307:4307 -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib trueconf\/trueconf-server:stable --name vcs_server\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"<strong>Host network connection<\/strong> (<code>--network=host<\/code>) \u2013 allows the container to use the host's network directly, avoiding port forwarding. Make sure ports 80, 443, and 4307 are open on the host.\"\r\n        },\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"<strong>Port forwarding<\/strong> (<code>-p [host_port]:[container_port]\/[protocol]<\/code>) \u2013 bind host ports to container ports. Mandatory ports: 80, 443, 4307. Optional UDP range for WebRTC: 53000-55000.\"\r\n        },\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"<strong>Environment variables<\/strong> (<code>-e [variable]=[value]<\/code>) \u2013 set admin credentials (<code>ADMIN_USER<\/code>, <code>ADMIN_PASSWORD<\/code>), force database initialization (<code>INIT_DB=true<\/code>), or auto\u2011register the server (<code>ServerID<\/code>, <code>Serial<\/code>, <code>ServerName<\/code>).\"\r\n        },\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"<strong>Mounting directories<\/strong> (<code>-v [host_path]:[container_path]<\/code>) \u2013 persist data and settings on the host. Common mounts: <code>\/opt\/trueconf\/server\/var\/lib<\/code> (working data), <code>\/opt\/trueconf\/server\/var\/log<\/code> (logs), <code>\/ssl<\/code> (custom SSL certificates), <code>\/setup.d<\/code> (startup scripts).\"\r\n        },\r\n        {\r\n          \"@type\": \"HowToTip\",\r\n          \"text\": \"<strong>Container name<\/strong> (<code>--name vcs_server<\/code>) \u2013 assign a friendly name for easier management.\"\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 3,\r\n      \"name\": \"Register TrueConf Server\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#step3\",\r\n      \"text\": \"If you did not register the server using environment variables during step 2, open the TrueConf Server control panel in a browser using the host machine's IP address and complete the registration process. The control panel guides you through entering the registration key (Server ID, Serial, ServerName).\"\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 4,\r\n      \"name\": \"Add TrueConf Server administrators\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#step4\",\r\n      \"itemListElement\": [\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Ensure the container is running and the directory <code>\/opt\/trueconf\/server\/var\/lib<\/code> is mounted (as shown in step 2). Create the required authorization files on the host:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo touch \/home\/$USER\/trueconf\/server\/docker\/passwd \/home\/$USER\/trueconf\/server\/docker\/tcadmins \/home\/$USER\/trueconf\/server\/docker\/tcsecadmins\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Install <code>apache2-utils<\/code> to generate encrypted passwords:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo apt install -yq apache2-utils\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Generate a password for a new administrator (e.g., username <code>new_admin<\/code>, password <code>password<\/code>):\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"htpasswd -c -d -b passwd new_admin password\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Append the generated entry to the <code>passwd<\/code> file on the mounted volume:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo bash -c 'cat passwd >> \/home\/$USER\/trueconf\/server\/docker\/passwd'\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Add the new administrator to the appropriate group \u2013 either <code>tcadmins<\/code> (full access) or <code>tcsecadmins<\/code> (security admin). Example for full access:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo bash -c 'echo new_admin >> \/home\/$USER\/trueconf\/server\/docker\/tcadmins'\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Verify by logging into the control panel with the new credentials.\"\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 5,\r\n      \"name\": \"Set the container to start automatically\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#step5\",\r\n      \"text\": \"Use the <code>docker update<\/code> command to configure the container to restart automatically (e.g., after a host reboot). Replace <code>vcs_server<\/code> with your container's name or ID:\",\r\n      \"code\": {\r\n        \"@type\": \"Code\",\r\n        \"text\": \"sudo docker container update --restart always vcs_server\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 6,\r\n      \"name\": \"Update TrueConf Server in the container\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#upd_tcs\",\r\n      \"itemListElement\": [\r\n        {\r\n          \"@type\": \"HowToStep\",\r\n          \"position\": 1,\r\n          \"name\": \"For versions 5.2.9 to 5.4.5 (simple update)\",\r\n          \"itemListElement\": [\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Pull the new image (using the <code>stable<\/code> tag for the latest release):\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker pull trueconf\/trueconf-server:stable\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Stop the current container:\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker stop vcs_server\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Run a new container from the updated image, using the same volume mounts and options as before.\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server\/lib:\/opt\/trueconf\/server\/var\/lib trueconf\/trueconf-server:stable --name vcs_server\"\r\n              }\r\n            }\r\n          ]\r\n        },\r\n        {\r\n          \"@type\": \"HowToStep\",\r\n          \"position\": 2,\r\n          \"name\": \"For versions 5.2.8 \u2192 5.2.9+ or 5.4.5 \u2192 5.5.0+ (requires database export)\",\r\n          \"itemListElement\": [\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Pull the new image:\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker pull trueconf\/trueconf-server:stable\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Open a shell inside the running container:\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker exec -it vcs_server bash\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Export the database to a dump file:\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"su -s \/bin\/sh postgres --command='PGCLUSTER=11\/trueconf pg_dumpall -p 5433 -U postgres > \/opt\/trueconf\/server\/var\/lib\/database\/11\/trueconf\/tcs_db.dump'\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Exit the container and copy the dump to a safe location on the host (e.g., <code>\/home\/$USER\/backup<\/code>):\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"exit\\nsudo cp \/home\/$USER\/trueconf\/server\/lib\/database\/11\/trueconf\/tcs_db.dump \/home\/$USER\/backup\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToDirection\",\r\n              \"text\": \"Create and run a new container with the updated image, mounting both the persistent data directory and the backup directory, and set <code>INIT_DB=TRUE<\/code> and <code>DUMP_PATH<\/code> to automatically restore the database.\",\r\n              \"code\": {\r\n                \"@type\": \"Code\",\r\n                \"text\": \"sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v \/home\/$USER\/trueconf\/server:\/opt\/trueconf\/server\/var\/lib -e INIT_DB=TRUE -e DUMP_PATH=\/opt\/backup -v \/home\/$USER\/backup:\/opt\/backup trueconf\/trueconf-server:stable --name vcs_server\"\r\n              }\r\n            },\r\n            {\r\n              \"@type\": \"HowToTip\",\r\n              \"text\": \"After starting, verify that all settings and data have been restored. The old container and image can then be removed.\"\r\n            }\r\n          ]\r\n        }\r\n      ]\r\n    },\r\n    {\r\n      \"@type\": \"HowToStep\",\r\n      \"position\": 7,\r\n      \"name\": \"Delete the container and image\",\r\n      \"url\": \"https:\/\/trueconf.com\/blog\/knowledge-base\/install-trueconf-server-docker.html#deleting_container_and_img\",\r\n      \"itemListElement\": [\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Remove a stopped container:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker rm vcs_server\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"To remove a running container, use <code>--force<\/code>:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker rm --force vcs_server\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"List all images:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker images\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Delete a specific image (e.g., <code>trueconf\/trueconf-server:5.2.8.10213<\/code>):\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker rmi trueconf\/trueconf-server:5.2.8.10213\"\r\n          }\r\n        },\r\n        {\r\n          \"@type\": \"HowToDirection\",\r\n          \"text\": \"Clean up unused images, containers, and volumes:\",\r\n          \"code\": {\r\n            \"@type\": \"Code\",\r\n            \"text\": \"sudo docker system prune -a\"\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}\r\n<\/script>","protected":false},"excerpt":{"rendered":"TrueConf Server video conferencing platform can be installed both on Windows OS and on various Linux distros. For even more convenient deployment you can use our Docker container that already contains TrueConf Server. The Docker container is available in a public repository, follow this link to download: https:\/\/hub.docker.com\/r\/trueconf\/trueconf-server If you are using other containers and [&hellip;]","protected":false},"author":45,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[260],"tags":[186,191],"class_list":["post-17368","post","type-post","status-publish","format-standard","hentry","category-knowledge-base","tag-administration","tag-deployment","no-wpautop"],"_links":{"self":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/17368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/comments?post=17368"}],"version-history":[{"count":39,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/17368\/revisions"}],"predecessor-version":[{"id":44442,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/posts\/17368\/revisions\/44442"}],"wp:attachment":[{"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/media?parent=17368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/categories?post=17368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trueconf.com/blog\/wp-json\/wp\/v2\/tags?post=17368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}