<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rémy Vandepoel, Author at OVHcloud Blog</title>
	<atom:link href="https://blog.ovhcloud.com/author/remy-vandepoel/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Innovation for Freedom</description>
	<lastBuildDate>Wed, 13 May 2026 08:06:27 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.ovhcloud.com/wp-content/uploads/2019/07/cropped-cropped-nouveau-logo-ovh-rebranding-32x32.gif</url>
	<title>Rémy Vandepoel, Author at OVHcloud Blog</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Développement à distance #3 &#8211; Industrialisation et automatisation</title>
		<link>https://blog.ovhcloud.com/developpement-distance-3-industrialisation-automatisation/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Wed, 13 May 2026 08:06:26 +0000</pubDate>
				<category><![CDATA[OVHcloud en Français]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=31558</guid>

					<description><![CDATA[Après avoir configuré votre serveur manuellement, pas à pas, il est temps d’automatiser tout le processus. L’idée est simple&#160;: décrire votre infrastructure dans des fichiers de configuration et laisser Terraform s’occuper de commander les ressources chez OVHcloud. Voici un guide d’introduction à Terraform, avec de nombreuses informations utiles&#160;: https://support.us.ovhcloud.com/hc/en-us/articles/22648864003219-Using-Terraform-with-OVHcloud.Ainsi que le lien vers le fournisseur [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdeveloppement-distance-3-industrialisation-automatisation%2F&amp;action_name=D%C3%A9veloppement%20%C3%A0%20distance%20%233%20%26%238211%3B%20Industrialisation%20et%20automatisation&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1536" height="1024" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/3-1024x683.jpg" alt="" class="wp-image-31559" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/3-1024x683.jpg 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/3-300x200.jpg 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/3-768x512.jpg 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/3.jpg 1536w" sizes="(max-width: 1536px) 100vw, 1536px" /></figure>



<p class="wp-block-paragraph">Après avoir <a href="https://blog.ovhcloud.com/developpement-distance-2-securisation-performance/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">configuré votre serveur manuellement</a>, pas à pas, il est temps d’automatiser tout le processus.</p>



<p class="wp-block-paragraph">L’idée est simple&nbsp;: décrire votre infrastructure dans des fichiers de configuration et laisser <strong>Terraform</strong> s’occuper de commander les ressources chez <strong>OVHcloud</strong>.<br><br>Voici un guide d’introduction à Terraform, avec de nombreuses informations utiles&nbsp;: <a href="https://support.us.ovhcloud.com/hc/en-us/articles/22648864003219-Using-Terraform-with-OVHcloud" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://support.us.ovhcloud.com/hc/en-us/articles/22648864003219-Using-Terraform-with-OVHcloud</a>.<br>Ainsi que le lien vers le fournisseur officiel Terraform d’OVHcloud&nbsp;: <a href="https://registry.terraform.io/providers/ovh/ovh/latest" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://registry.terraform.io/providers/ovh/ovh/latest</a><br><br>Il existe deux étapes à l’automatisation du déploiement&nbsp;:</p>



<ul class="wp-block-list">
<li>déploiement de l’instance Public Cloud&nbsp;;</li>



<li>déploiement de la partie applicative (vscode-server) et sa configuration.</li>
</ul>



<h2 class="wp-block-heading">1. Le cœur de l’automatisation&nbsp;: le script Cloud-init</h2>



<p class="wp-block-paragraph">Avant de parler de Terraform, il est nécessaire de comprendre comment le serveur s’auto-configure lors de son initialisation.<br>Pour cela, utilisez <code>cloud-init</code>, un standard qui permet d’exécuter des scripts dès le premier démarrage de l’instance.</p>



<p class="wp-block-paragraph"><strong>Ce que vous allez automatiser dans ce script&nbsp;:</strong></p>



<ul class="wp-block-list">
<li>la mise à jour du système (<code>apt update/upgrade</code>)&nbsp;;</li>



<li>l’installation de <code>code-server</code> via le script officiel&nbsp;;</li>



<li>l’installation et la configuration de <strong>Caddy</strong> (pour le SSL automatique)&nbsp;;</li>



<li>la configuration du pare-feu <strong>UFW</strong>.</li>
</ul>



<p class="wp-block-paragraph">Ce type de fichier possède une syntaxe bien particulière, le cloud-config.yaml sera à disposition plus bas.</p>



<p class="wp-block-paragraph">Toutefois, l’important à retenir est&nbsp;: pourquoi utiliser ce format&nbsp;?</p>



<ul class="wp-block-list">
<li><strong>Idempotence&nbsp;:</strong> le <code>cloud-init</code> s’assure que tout est prêt dès le premier boot.</li>



<li><strong>Sécurité dès la naissance&nbsp;:</strong> le pare-feu <code>ufw</code> est activé immédiatement, réduisant la fenêtre d’exposition.</li>



<li><strong>Intégration Terraform&nbsp;:</strong> une seule ligne est nécessaire pour l’inclure&nbsp;: <code>user_data = file("cloud-config.yaml")</code></li>
</ul>



<h2 class="wp-block-heading">2. Utilisation de Terraform pour le déploiement</h2>



<p class="wp-block-paragraph">Terraform permet d’obtenir un démarrage de l’instance bien plus aisé et rapide.<br>Sa configuration, quant à elle, comporte plusieurs avantages&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>persistance des données.</strong> Un <code>terraform destroy</code> de l’instance pourra conserver le volume de données (but fixé dans le chapitre 2)&nbsp;;</li>



<li><strong>évolutivité.</strong> Si le projet grossit, la taille du volume et/ou la flavor peuvent être modulées&nbsp;;</li>



<li><strong>portabilité.</strong> Le volume de données peut être démonté et remonté sur une autre machine.</li>
</ul>



<p class="wp-block-paragraph">Pour garder ce billet court, pas de copier-coller de code, mais un lien vers un repository GitHub avec tout le nécessaire pour déployer ceci en quelques minutes&nbsp;:<br><a href="https://github.com/RemyAtOVH/blogpost-dev-server" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://github.com/RemyAtOVH/blogpost-dev-server</a></p>



<p class="wp-block-paragraph">Son utilisation&nbsp;:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ubuntu@vscode-server:~$ source openrc.production.sh<br>ubuntu@vscode-server:~$ terraform init<br>ubuntu@vscode-server:~$ terraform plan<br>ubuntu@vscode-server:~$ terraform apply<br>[…]<br>Apply complete! Resources: 4 added, 0 changed, 0 destroyed.<br>Outputs:instance_ip = &#8220;XXX.XXX.XXX.XXX&#8221;</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Avant l’application du cloud-init (ou sans), on constate bien un volume secondaire <strong>/dev/sdb</strong>, de taille correspondant aux spécifications de Terraform&nbsp;:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong><strong>ubuntu@vscode-server-automated:~$ lsblk</strong></strong><br><strong><strong>NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS<br>[&#8230;]<br>sda       8:0    0   25G  0 disk <br>[&#8230;]<br>sdb       8:16   0   10G  0 disk </strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">C’est lui qui assurera la persistance des données.</p>



<p class="wp-block-paragraph">Vous pourriez tout à fait effectuer manuellement la suppression de l’instance et des autres composants, sans toutefois le supprimer lui.<br>Pour éviter toute suppression en cas de «&nbsp;terraform destroy&nbsp;», un paramètre a été ajouté&nbsp;:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>lifecycle { prevent_destroy = true }</strong><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Lors du premier démarrage, les différents scripts d’installation pouvant prendre du temps, vous pouvez en vérifier les étapes d’un simple <em>tail&nbsp;</em>:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ubuntu@vscode-server-automated:<strong>~</strong>$ tail -f /var/log/cloud-init-output.log</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Une fois le cloud-init exécuté automatiquement, tout ce qui a pu être mis en place manuellement dans les chapitres précédents a été fait. Et ce, de façon automatique et reproductible&nbsp;!</p>



<p class="wp-block-paragraph">Il sera donc possible, sous réserve de quelques minutes d’exécution, de déployer cet environnement de développement distant personnalisé si besoin et potentiellement le supprimer après quelques heures ou jours d’utilisation.</p>



<p class="wp-block-paragraph">Dans cette série de chapitres, nous avons transformé une simple idée, disposer de son VS Code partout, en une infrastructure de niveau professionnel, automatisée et résiliente.<br>Retrouvez ci-dessous les étapes et le chemin parcouru.</p>



<ul class="wp-block-list">
<li><strong><a href="https://blog.ovhcloud.com/developpement-distance-1-premier-deploiement/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Chapitre 1</a>&nbsp;:</strong> premiers pas en installation manuelle pour comprendre la mécanique de&nbsp;<code>code-server</code>.</li>



<li><strong><a href="https://blog.ovhcloud.com/developpement-distance-2-securisation-performance/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Chapitre 2</a>&nbsp;:</strong> sécurisation, avec utilisation d’un Reverse Proxy (Caddy) et d’un pare-feu (UFW) pour naviguer sereinement en HTTPS.</li>



<li><strong>Chapitre 3&nbsp;:</strong> cet article, utilisant Terraform et OpenStack, pour une meilleure reproductibilité.</li>
</ul>



<p class="wp-block-paragraph">L’automatisation que nous avons mise en place avec un déploiement chez OVHcloud en utilisant Public Cloud reposant sur OpenStack, constitue une base solide.</p>



<p class="wp-block-paragraph">À partir d’ici, il est possible d’aller encore plus loin&nbsp;: ajouter une sauvegarde automatique de vos volumes (snapshotting), coupler cela à un pipeline CI/CD ou même explorer le déploiement de cet environnement via docker-compose, ou même Kubernetes.</p>



<p class="wp-block-paragraph">Retrouvez prochainement une version vidéo de ces billets de blog, étape par étape, sur notre <a href="https://www.youtube.com/@ovhgroup" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">chaîne YouTube</a>. Restez à l’écoute&nbsp;!</p>
<img decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdeveloppement-distance-3-industrialisation-automatisation%2F&amp;action_name=D%C3%A9veloppement%20%C3%A0%20distance%20%233%20%26%238211%3B%20Industrialisation%20et%20automatisation&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Remote development #2 &#8211; Security and Performance</title>
		<link>https://blog.ovhcloud.com/remote-development-2-security-performance/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Mon, 11 May 2026 16:00:02 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=31546</guid>

					<description><![CDATA[In the previous chapter, we started the VSCode Server on a remote instance. That’s a win. However, as it stands, your installation is vulnerable, or at least not optimally secured. Traffic is being sent in clear (HTTP) and port 8080 is exposed to anyone scanning our IP address. To transform this prototype into a daily [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fremote-development-2-security-performance%2F&amp;action_name=Remote%20development%20%232%20%26%238211%3B%20Security%20and%20Performance&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1-1024x683.jpg" alt="" class="wp-image-31555" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1-1024x683.jpg 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1-300x200.jpg 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1-768x512.jpg 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1.jpg 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">In the <a href="https://blog.ovhcloud.com/remote-development-1-first-deployment/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">previous chapter</a>, we started the VSCode Server on a remote instance.</p>



<p class="wp-block-paragraph">That’s a win. However, as it stands, your installation is vulnerable, or at least not optimally secured. Traffic is being sent in clear (HTTP) and port 8080 is exposed to anyone scanning our IP address.</p>



<p class="wp-block-paragraph">To transform this prototype into a daily working tool, we need to set up a Reverse Proxy.<br>Its role is simple: to intercept secure connections (HTTPS) on the standard port 443 and redirect them locally to our service.</p>



<h2 class="wp-block-heading">1. Prerequisites: securing the network part</h2>



<p class="wp-block-paragraph">First and foremost, we need to instruct code-server to no longer listen for connections from outside, but only to those coming from the machine itself (the proxy).</p>



<p class="wp-block-paragraph">Modify your configuration file: nano ~/.config/code-server/config.yaml</p>



<p class="wp-block-paragraph">Change the line &#8220;bind-addr&#8221; as follows:&nbsp;</p>



<p class="wp-block-paragraph"><code>bind-addr: 127.0.0.1:8080</code></p>



<p class="wp-block-paragraph">Then restart the service.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo systemctl restart code-server@$USER</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">This will ensure that vscode-server will indeed only “listen” locally and cannot be contacted directly from outside.</p>



<h2 class="wp-block-heading">2. Implement the reverse proxy</h2>



<p class="wp-block-paragraph">Here, you have two choices:</p>



<ul class="wp-block-list">
<li>NGINX, which has been the standard choice for many years</li>



<li>Caddy, which has a more simplistic (but comprehensive) and newer approach.</li>
</ul>



<p class="wp-block-paragraph">For this blog post, we have selected Caddy for the example and to familiarise ourselves if we have not already!</p>



<p class="wp-block-paragraph">Caddy natively manages SSL certificate renewal – which can be done through OVHcloud!</p>



<p class="wp-block-paragraph"><strong>Installation (Debian/Ubuntu)</strong></p>



<p class="wp-block-paragraph">You will find more comprehensive documentation for other systems or installation methods in the official documentation: <a href="https://caddyserver.com/docs/install" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://caddyserver.com/docs/install</a>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https</strong></code><br><code><strong>ubuntu@vscode-server:~$ curl -1sLf </strong></code><strong>&#8216;https://dl.cloudsmith.io/public/caddy/stable/gpg.key&#8217;</strong><code><strong>| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg</strong></code><br><code><strong>ubuntu@vscode-server:~$ curl -1sLf </strong></code><strong>&#8216;https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt&#8217;</strong><code><strong>| sudo tee /etc/apt/sources.list.d/caddy-stable.list</strong></code><br><code><strong>ubuntu@vscode-server:~$ sudo apt update &amp;&amp; sudo apt install caddy -y</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Configuration: </strong>modify the file <code>/etc/caddy/Caddyfile</code> (clear it and replace it with this):</p>



<p class="wp-block-paragraph"><em>Replace “<strong>dev.your-domain.uk</strong>” with your own domain name, with the subdomain of your choice pointing to the IP of the instance.</em></p>



<ul class="wp-block-list">
<li>Simple configuration only on HTTP port (80)</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong><strong>dev.your-domain.uk {<br>    reverse_proxy 127.0.0.1:8080<br>}</strong></strong></td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li>Recommended configuration on HTTPS port (443), using a domain hosted with OVHcloud.</li>
</ul>



<p class="wp-block-paragraph">For creating OVHcloud API tokens, you can refer to this page: <a href="https://eu.api.ovh.com/createToken/" target="_blank" rel="noreferrer noopener" data-wpel-link="exclude">https://eu.api.ovh.com/createToken/</a>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>dev.your-domain.uk </strong></code><strong>{<br>&nbsp; &nbsp; tls {<br>&nbsp; &nbsp; &nbsp; &nbsp; dns ovh {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endpoint &#8220;ovh-eu&#8221;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; application_key {$OVH_APPLICATION_KEY}<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; application_secret {$OVH_APPLICATION_SECRET}<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; consumer_key {$OVH_CONSUMER_KEY}<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; }<br>&nbsp;&nbsp;&nbsp; reverse_proxy&nbsp;<code>127.0.0.1:8080</code><br>}</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><em>For further details regarding SSL certificate management, consult the official Caddy documentation.<br>Application:</em></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo systemctl reload caddy</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">If you have opted for the recommended configuration in HTTPS, your environment is now protected by robust SSL encryption.</p>



<p class="wp-block-paragraph">You are no longer at risk of having your password intercepted on public Wi-Fi, which is a considerable step towards our goal.</p>



<h2 class="wp-block-heading">3. Network and firewall</h2>



<p class="wp-block-paragraph">Now that the access point is unique via the HTTPS URL configured just above, the rest of the ports, except for SSH, can be closed.</p>



<p class="wp-block-paragraph">Now, implement the basic rules in the firewall. On Ubuntu, the standard tool is <strong>UFW</strong> (Uncomplicated Firewall).</p>



<p class="wp-block-paragraph">Start by opening the ports related to the functional services.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw allow ssh<br>ubuntu@vscode-server:~$ sudo ufw allow http<br>ubuntu@vscode-server:~$ sudo ufw allow https</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Activate the firewall:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw enable</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Check the implementation of the rules.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw status<br>Status: active</strong></code><br><code><strong>To &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Action &nbsp; &nbsp; &nbsp;From<br>-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------ &nbsp; &nbsp; &nbsp;----<br>22/tcp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>80/tcp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>443 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>45876 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>22/tcp (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>80/tcp (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>443 (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>45876 (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">You can also add stricter rules to explicitly reject anything unauthorised in incoming traffic while generally authorising outgoing traffic.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw default deny incoming<br>ubuntu@vscode-server:~$ sudo ufw default allow outgoing</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">From now on, if someone attempts to access the IP on port <code>8080</code>, the connection will be outright rejected.</p>



<p class="wp-block-paragraph">Only the domain name in HTTPS is the legitimate entry point.<br>This handy little development server now feels more like a fortress.&nbsp;<br><br>But what happens if you decide to delete this instance to move to a more powerful one and/or stop it for an indefinite period, as your project is on hold?</p>



<p class="wp-block-paragraph">This is what you will find out in the next part: how to <strong>isolate your data and configurations</strong> on a persistent storage volume to make your environment completely interchangeable, but also how to <strong>automate the deploymen</strong> of this development environment!</p>



<p class="wp-block-paragraph">The ultimate goal is for a simple <code>terraform apply</code> command to to be enough to generate a development environment that’s ready to use in under two minutes.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fremote-development-2-security-performance%2F&amp;action_name=Remote%20development%20%232%20%26%238211%3B%20Security%20and%20Performance&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Développement à distance #2 &#8211; Sécurisation et performance</title>
		<link>https://blog.ovhcloud.com/developpement-distance-2-securisation-performance/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Mon, 11 May 2026 15:58:04 +0000</pubDate>
				<category><![CDATA[OVHcloud en Français]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=31371</guid>

					<description><![CDATA[Dans le chapitre précédent, nous avons démarré VSCode Server sur une instance distante. C’est une victoire. Mais en l’état, votre installation est vulnérable, ou du moins non sécurisée de façon optimale. Le trafic circule donc en clair (HTTP) et le port 8080 est exposé à quiconque scanne notre adresse IP. Pour transformer ce prototype en [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdeveloppement-distance-2-securisation-performance%2F&amp;action_name=D%C3%A9veloppement%20%C3%A0%20distance%20%232%20%26%238211%3B%20S%C3%A9curisation%20et%20performance&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1024x683.jpg" alt="" class="wp-image-31554" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-1024x683.jpg 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-300x200.jpg 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2-768x512.jpg 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/2.jpg 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Dans le <a href="https://blog.ovhcloud.com/developpement-distance-1-premier-deploiement/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">chapitre précédent</a>, nous avons démarré VSCode Server sur une instance distante.</p>



<p class="wp-block-paragraph">C’est une victoire. Mais en l’état, votre installation est vulnérable, ou du moins non sécurisée de façon optimale. Le trafic circule donc en clair (HTTP) et le port 8080 est exposé à quiconque scanne notre adresse IP.</p>



<p class="wp-block-paragraph">Pour transformer ce prototype en un outil de travail quotidien, il est indispensable de mettre en place un Reverse Proxy.</p>



<p class="wp-block-paragraph">Son rôle est simple : intercepter les connexions sécurisées (HTTPS) sur le port standard 443 et les rediriger localement vers notre service.</p>



<h2 class="wp-block-heading">1. Prérequis&nbsp;: verrouiller la partie réseau</h2>



<p class="wp-block-paragraph">Avant toute chose, il est nécessaire de demander à code-server de ne plus écouter les connexions venant de l’extérieur, mais uniquement celles venant de la machine elle-même (le proxy).</p>



<p class="wp-block-paragraph">Modifiez votre fichier de configuration : nano ~/.config/code-server/config.yaml</p>



<p class="wp-block-paragraph">Modifiez la ligne « bind-addr » comme suit :</p>



<p class="wp-block-paragraph"><code>bind-addr: 127.0.0.1:8080</code></p>



<p class="wp-block-paragraph">Puis redémarrez le service.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo systemctl restart code-server@$USER</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Ceci aura pour effet d’avoir la certitude que vscode-server «&nbsp;écoutera&nbsp;» bien uniquement en local et ne pourra pas être contacté directement de l’extérieur</p>



<h2 class="wp-block-heading">2. Implémenter le reverse proxy</h2>



<p class="wp-block-paragraph">Ici, vous avez deux choix&nbsp;:</p>



<ul class="wp-block-list">
<li>nginx constitue le choix standard depuis de nombreuses années&nbsp;;</li>



<li>Caddy, avec une approche plus simpliste (mais complète) et récente.</li>
</ul>



<p class="wp-block-paragraph">Pour ce billet de blog, nous avons sélectionné Caddy pour l’exemple et se familiariser si ce n’est pas déjà le cas !</p>



<p class="wp-block-paragraph">Caddy sait nativement gérer l’implémentation du renouvellement de certificats SSL. Le tout, avec OVHcloud !</p>



<p class="wp-block-paragraph"><strong>Installation (Debian/Ubuntu</strong></p>



<p class="wp-block-paragraph">Vous pourrez trouver une documentation plus complète pour d’autres systèmes, ou méthodes d’installation dans la documentation officielle : <a href="https://caddyserver.com/docs/install" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://caddyserver.com/docs/install</a>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https</strong></code><br><code><strong>ubuntu@vscode-server:~$ curl -1sLf </strong></code><strong>&#8216;https://dl.cloudsmith.io/public/caddy/stable/gpg.key&#8217;</strong><code><strong>| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg</strong></code><br><code><strong>ubuntu@vscode-server:~$ curl -1sLf </strong></code><strong>&#8216;https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt&#8217;</strong><code><strong>| sudo tee /etc/apt/sources.list.d/caddy-stable.list</strong></code><br><code><strong>ubuntu@vscode-server:~$ sudo apt update &amp;&amp; sudo apt install caddy -y</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Configuration :</strong> modifiez le fichier <code>/etc/caddy/Caddyfile</code> (videz-le et remplacez par ceci)&nbsp;:</p>



<p class="wp-block-paragraph"><em>Remplacez «&nbsp;<strong>dev.votre-domaine.fr</strong>&nbsp;» par votre propre nom de domaine avec le sous-domaine de votre choix pointant vers l’IP de l’instance.</em></p>



<ul class="wp-block-list">
<li>Configuration simple uniquement sur le port HTTP (80)</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>dev.your-domain.uk {</strong></code><code><strong>&nbsp;&nbsp;&nbsp; reverse_proxy 127.0.0.1:8080</strong></code><code><strong>}</strong></code><strong></strong></td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li>Configuration recommandée sur le port HTTPS (443), en utilisant un domaine hébergé chez OVHcloud.</li>
</ul>



<p class="wp-block-paragraph">Pour la création des tokens API OVHcloud, vous pouvez vous référer à cette page : <a href="https://eu.api.ovh.com/createToken/" target="_blank" rel="noreferrer noopener" data-wpel-link="exclude">https://eu.api.ovh.com/createToken/</a>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong><code><strong>dev.your-domain.fr </strong></code><strong>{<br>&nbsp; &nbsp; tls {<br>&nbsp; &nbsp; &nbsp; &nbsp; dns ovh {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endpoint "ovh-eu"<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; application_key {$OVH_APPLICATION_KEY}<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; application_secret {$OVH_APPLICATION_SECRET}<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; consumer_key {$OVH_CONSUMER_KEY}<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; }<br>&nbsp;&nbsp;&nbsp; reverse_proxy&nbsp;<code>127.0.0.1:8080</code><br>}</strong></strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><em>Pour davantage de détails concernant la gestion des certificats SSL, vous pouvez consulter la documentation officielle de Caddy.<br>Application</em>:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo systemctl reload caddy</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Désormais, si vous avez opté pour la configuration recommandée en HTTPS, votre environnement est protégé par un chiffrement SSL robuste.</p>



<p class="wp-block-paragraph">Vous ne risquez plus de voir votre mot de passe intercepté sur un Wi-Fi public, ce qui est un pas en avant non négligeable vers notre but.</p>



<h2 class="wp-block-heading">3. Réseau et pare-feu</h2>



<p class="wp-block-paragraph">Maintenant que le point d’accès est unique via l’URL en HTTPS configuré juste au-dessus, le reste des ports, sauf le SSH, évidemment, peut être coupé.</p>



<p class="wp-block-paragraph">Implémentez maintenant les règles basiques, dans le pare-feu. Sur Ubuntu, l’outil standard est <strong>UFW </strong>(Uncomplicated Firewall).</p>



<p class="wp-block-paragraph">Commencez par ouvrir les ports relatifs aux services fonctionnels.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw allow ssh<br>ubuntu@vscode-server:~$ sudo ufw allow http<br>ubuntu@vscode-server:~$ sudo ufw allow https</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Activez le firewall&nbsp;:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw enable</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Vérification de la prise en compte des règles.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw status<br>Status: active</strong></code><br><code><strong>To &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Action &nbsp; &nbsp; &nbsp;From<br>-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ------ &nbsp; &nbsp; &nbsp;----<br>22/tcp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>80/tcp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>443 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>45876 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere<br>22/tcp (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>80/tcp (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>443 (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)<br>45876 (v6) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ALLOW &nbsp; &nbsp; &nbsp; Anywhere (v6)</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Vous pouvez également ajouter des règles plus strictes pour rejeter explicitement tout ce qui n’est pas autorisé en entrée et laisser la sortie globalement autorisée.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo ufw default deny incoming<br>ubuntu@vscode-server:~$ sudo ufw default allow outgoing</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Désormais, si quelqu’un tente d’accéder à l’IP sur le port&nbsp;<code>8080</code>, la connexion sera purement et simplement rejetée.</p>



<p class="wp-block-paragraph">Seul le nom de domaine en HTTPS constitue la porte d’entrée légitime.<br>Ce petit serveur de développement, bien pratique, ressemble désormais davantage à une forteresse.&nbsp;</p>



<p class="wp-block-paragraph">Mais que se passe-t-il si vous décidez de supprimer cette instance pour en prendre une plus puissante et/ou la stopper pour une durée indéterminée, car votre projet est en pause&nbsp;?</p>



<p class="wp-block-paragraph">C’est ce que vous découvrirez dans la prochaine partie&nbsp;: comment <strong>isoler vos données et vos configurations</strong> sur un volume de stockage persistant pour rendre votre environnement totalement interchangeable, mais également comment <strong>automatiser le déploiement</strong> de cet environnement de développement&nbsp;!</p>



<p class="wp-block-paragraph">L’objectif final&nbsp;: qu’une simple commande <code>terraform apply</code> suffise à faire surgir un environnement de développement, prêt à l’emploi en moins de deux minutes.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fdeveloppement-distance-2-securisation-performance%2F&amp;action_name=D%C3%A9veloppement%20%C3%A0%20distance%20%232%20%26%238211%3B%20S%C3%A9curisation%20et%20performance&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Remote development #1 &#8211; First Deployment</title>
		<link>https://blog.ovhcloud.com/remote-development-1-first-deployment/</link>
		
		<dc:creator><![CDATA[Rémy Vandepoel]]></dc:creator>
		<pubDate>Thu, 07 May 2026 16:00:42 +0000</pubDate>
				<category><![CDATA[OVHcloud Engineering]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.ovhcloud.com/?p=31612</guid>

					<description><![CDATA[A development environment is an essential day-to-day system, but it can quickly become complex to manage. In this three-part blog post, we will explore how to become more comfortable and productive with it! Endless meetings, slightly differing Docker environments on each machine, and untimely system updates: maintaining a reliable and consistent development workstation can quickly [&#8230;]<img src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fremote-development-1-first-deployment%2F&amp;action_name=Remote%20development%20%231%20%26%238211%3B%20First%20Deployment&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://blog.ovhcloud.com/wp-content/uploads/2026/05/1-1024x683.jpg" alt="" class="wp-image-31613" srcset="https://blog.ovhcloud.com/wp-content/uploads/2026/05/1-1024x683.jpg 1024w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/1-300x200.jpg 300w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/1-768x512.jpg 768w, https://blog.ovhcloud.com/wp-content/uploads/2026/05/1.jpg 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">A development environment is an essential day-to-day system, but it can quickly become complex to manage. In this three-part blog post, we will explore how to become more comfortable and productive with it!</p>



<p class="wp-block-paragraph">Endless meetings, slightly differing Docker environments on each machine, and untimely system updates: maintaining a reliable and consistent development workstation can quickly become a daily struggle.</p>



<p class="wp-block-paragraph">With each new project, you have to reinstall the same tools, the same CLIs, and reconfigure the same SDKs or frameworks. And above all, hope that the local machine can handle the load when tests, the linter, and the database are all running simultaneously. Meanwhile, with remote work or working while travelling, individuals find themselves developing with a temperamental VPN, from a laptop that is sometimes close to obsolescence.</p>



<p class="wp-block-paragraph">In this series of articles, we aim to transform this reality by building on a complete development environment hosted in the cloud and accessible from any browser via VS Code Server.</p>



<p class="wp-block-paragraph"><strong>The idea is to have a remote, powerful, and, if necessary, reproducible and independent “workstation”.</strong></p>



<p class="wp-block-paragraph">This first chapter demonstrates how to easily deploy a Public Cloud instance manually and install VS Code Server on it. The following chapters will improve its security and automation. &nbsp;</p>



<h2 class="wp-block-heading"><strong>1. Deploying the instance</strong></h2>



<p class="wp-block-paragraph">For the initial tests it may be wise to opt for a smaller, Discovery-type instance so that you can familiarise yourself with the environment and test it. A d2-2 instance will be used here. 1 vCPU and 2 GB of RAM should be enough.</p>



<h2 class="wp-block-heading"><strong>2. Installing the application element</strong></h2>



<p class="wp-block-paragraph">The fountain of knowledge for the following steps is the GitHub for the vscode-server project: <a href="https://github.com/coder/code-server" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external">https://github.com/coder/code-server</a></p>



<p class="wp-block-paragraph">There are several options for the installation. In this chapter, to simplify the deployment and for those who are not very familiar with Docker, the installation will be done via the “native” installation script, without using containers.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo apt update &amp;&amp; sudo apt upgrade<br>ubuntu@vscode-server:~$ curl -fsSL&nbsp;</strong></code><a href="https://code-server.dev/install.sh" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><strong>https://code-server.dev/install.sh</strong></a> <code><strong>| sh</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">This step is enough to install the essentials. Activate the service now and check that it is running correctly.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ sudo systemctl enable --now code-server@$USER<br>ubuntu@vscode-server:~$ sudo systemctl status code-server@$USER<br>● </strong></code><a href="mailto:code-server@ubuntu.servic"><strong>code-server@ubuntu.servic</strong></a><code><strong>e - code-server<br>&nbsp; &nbsp; &nbsp;Loaded: loaded (/usr/lib/systemd/system/code-server@.service; enabled; preset: enabled)<br>&nbsp; &nbsp; &nbsp;Active: active (running) since Wed 2025-12-03 14:55:37 UTC; 15min ago<br>&nbsp;Invocation: 1b393d84bebe415cbb770a17a0c8d399<br>&nbsp; &nbsp;Main PID: 893 (node)<br>&nbsp; &nbsp; &nbsp; Tasks: 22 (limit: 4532)<br>&nbsp; &nbsp; &nbsp;Memory: 95.1M (peak: 112.1M)<br>&nbsp; &nbsp; &nbsp; &nbsp; CPU: 1.868s<br>&nbsp; &nbsp; &nbsp;CGroup: /system.slice/system-code\x2dserver.slice/code-server@ubuntu.service<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;├─ 893 /usr/lib/code-server/lib/node /usr/lib/code-server<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;└─1130 /usr/lib/code-server/lib/node /usr/lib/code-server/out/node/entry</strong></code><strong></strong></td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><strong>3. Validate the configuration</strong></h2>



<p class="wp-block-paragraph">At this stage, the service is operational; the configuration still needs to be finalised, particularly creating the folder that will contain the code as well as the authentication.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ mkdir workspace </strong></code><strong><br></strong><code><strong>ubuntu@vscode-server:~$ cat ~/.config/code-server/config.yaml<br>bind-addr: 127.0.0.1:8080<br>auth: password<br>password:&lt;secure_password&gt;<br>cert: false</strong></code><strong></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">You need to set a secure password here and verify that the <code>bind-addr</code> corresponds to your desired configuration.</p>



<p class="wp-block-paragraph">If you wish to directly test the service in its current state, use <code>0.0.0.0:8080</code>. Then restart the service and access the interface via <code>http://&lt;IP_PUBLIQUE&gt;:8080</code>.</p>



<p class="wp-block-paragraph">After providing the password found in the <code>config.yaml</code> in the authentication window, you will gain direct access to VS Code in the browser.</p>



<p class="wp-block-paragraph">From this deployment, you can then partially address the issue of getting a stable development environment.</p>



<p class="wp-block-paragraph">At this stage, it is possible to directly clone your GitHub repositories or to use the <code>workspace</code> folder to clone them.<br>This is recommended for greater longevity, as you will see in the second chapter.</p>



<p class="wp-block-paragraph">To perform a test commit via the vscode-server interface, you must configure git locally (just once) so that the authentication of the remote repository runs correctly.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><code><strong>ubuntu@vscode-server:~$ git config user.email </strong></code><strong>&#8220;mail@foo.bar&#8221;</strong><br><code><strong>ubuntu@vscode-server:~$ git config --global </strong></code><a href="http://user.name" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><strong>user.name</strong></a><code><strong>"John Doe"</strong></code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">From this step onwards, you can use the remote development environment with vscode-server, while enjoying nearly all the features you might have locally, but with the advantages of having an environment dedicated to this use.</p>



<p class="wp-block-paragraph">⚠️ <strong>Reminder: in its current state, the deployment made here is not “production ready”!</strong></p>



<p class="wp-block-paragraph">The aim of this first chapter is to introduce the service, with the instructions here to help you familiarize yourself with the environment. Therefore, please ensure that you do not operate the service as deployed here for more than a few hours!</p>



<p class="wp-block-paragraph">The environment will need to be secured, as it is directly exposed on the Internet. We’ll talk about this in the <a href="https://blog.ovhcloud.com/remote-development-2-security-performance/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">following chapters</a>.</p>



<p class="wp-block-paragraph">By now, you have an operational development environment that is already capable of supporting a real application project!</p>



<p class="wp-block-paragraph">The instance is online, VS Code Server is responding in the browser, the workspace is ready, and the first repository has been cloned and opened as if on a local machine. This foundation demonstrates that it is possible to abstract from the hardware to gain portability and more easily share a common configuration within a team or a remote development workstation.</p>



<p class="wp-block-paragraph"><strong>In the upcoming chapters</strong>, this minimum viable environment will be gradually enhanced with persistent storage, backup mechanisms, and secure access via HTTPS. It will then be fully automated through Infrastructure as Code, in order to transition from a simple technical test to a genuine development platform ready for internal production.</p>
<img loading="lazy" decoding="async" src="//blog.ovhcloud.com/wp-content/plugins/matomo/app/matomo.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Fblog.ovhcloud.com%2Fremote-development-1-first-deployment%2F&amp;action_name=Remote%20development%20%231%20%26%238211%3B%20First%20Deployment&amp;urlref=https%3A%2F%2Fblog.ovhcloud.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
