Dois-je créer un lien symbolique entre mon répertoire / var / www et mon domicile?


20

Je viens d'installer Ubuntu Server 10.04 avec une configuration LAMP. Je souhaite y héberger un site Web, mais je ne sais pas quelle est la meilleure façon d'obtenir / modifier mes fichiers sur le serveur. Google propose de nombreuses options, mais je ne sais pas laquelle est la meilleure?

À moins qu'il n'y ait une meilleure option, j'aimerais créer les pages sur un autre PC (Windows ou Linux) et utiliser SFTP pour synchroniser les modifications sur le serveur - mais est-ce que je fais cela dans un dossier avec un lien symbolique dans ~ / ou en changeant les droits sur le dossier / var / www /?


Réponses:


21

Chaque configuration est différente. Pour moi, j'ai beaucoup d'utilisateurs sur un serveur qui héberge chacun des sites Web, pour vous, vous n'aurez probablement pas besoin de créer plus d'un utilisateur sur le système. Cependant, si vous gérez plusieurs sites Web sur ce serveur, cette configuration vous aidera à gérer, configurer et déboguer chaque domaine d'une manière plus facile qu'une configuration LAMP standard. Pour que cela se produise, j'utilise plusieurs appareils Apache pour contourner les erreurs d'autorisation.

Tout d'abord, voici la structure du document que j'utilise:

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs

Chaque utilisateur a son propre compte avec un dossier de domaines (auquel j'ai ajouté pour /etc/skelqu'il soit créé à chaque fois. Chaque domaine a son propre dossier dans le domainsdossier avec un htmldossier (j'ai mes raisons pour cela, principalement afin que les domaines puissent avoir des fichiers Web à l'extérieur N'hésitez pas à modifier cette structure comme bon vous semble, n'oubliez pas de faire ces changements tout au long de ce post.

Deuxièmement, j'héberge beaucoup de sites PHP donc j'utilise suPHP dans ma configuration. Par défaut, le paquet d'archives standard n'a pas le bon indicateur de compilation activé, ce qui entraîne une version moins sécurisée de suPHP. J'ai créé mon propre package suPHP que j'utilise sur mes serveurs, instructions d'installation ci-dessous. suPHP vous permet de définir les scripts PHP utilisateur à exécuter (entre autres: php.ini personnalisé pour chaque site, etc.). J'active également suExec pour Apache - supprimant ainsi la nécessité d'avoir la propriété de l'utilisateur www-data (un utilisateur que je méprise).

Assurez-vous d'abord que Apache et tous les autres services sont installés sur votre serveur. Assurez-vous qu'ils fonctionnent au moins. Après cela, je recommande d'installer suphp-common et le module libapache2-mod-suphp requis (Plus d'informations: Que sont les PPA et comment les utiliser? ). Ensuite, après ces installations, activez suPHP et suexec en utilisanta2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Vient ensuite le fichier de configuration. J'ai créé divers outils qui génèrent automatiquement les fichiers de configuration chaque fois que j'ajoute un nouveau site; cependant, voici le modèle de base que j'utilise:

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>

Cela configure la journalisation pour ce domaine, la racine du document et toutes les autres nécessités de base pour que le domaine fonctionne. Je place ces fichiers dans /etc/apache2/sites-available/généralement nommés [USER]-[DOMAIN]et les active / désactive avec a2ensitecomme ceci:

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]

Après chaque modification des fichiers de configuration, Apache devra être rechargé avec

sudo /etc/init.d/apache reload

Bien que cela puisse sembler beaucoup pour configurer la quantité de flexibilité gagnée, à mon avis, l'emporte de loin sur le temps de configuration. Bien que vous n'ayez besoin que d'un serveur Web mono-utilisateur, à l'avenir, si vous avez toujours voulu autre chose qu'un serveur Web mono-utilisateur, vous devrez effectuer d'autres actions (ou simplement supprimer la sécurité tous ensemble) pour ce faire.


+1 pour chaque configuration est différent et l'utilisation de comptes d'utilisateurs distincts pour chaque site Web
Lekensteyn

1
C'est très bien pour un système LAMP multi-utilisateurs, mais la question concernait un système LAMP mono-utilisateur, auquel cas cette réponse est exagérée. :)
Kees Cook

Le même principe @Kees s'applique - seulement vous n'avez pas à faire plus d'utilisateurs. De cette façon, vous n'avez jamais à vous soucier des problèmes d'utilisateur ou d'autorisation - et si un seul utilisateur a plusieurs domaines, cette configuration couvrira cela.
Marco Ceppi

Marco, vous pouvez implémenter cette méthode au moment même où vous obtenez votre deuxième utilisateur. Cependant, le premier devrait être beaucoup plus simple à moins qu'il ne soit certain que vous en aurez plus.
SpamapS

+1 - c'est la configuration la plus sûre et la plus sensée.
Nathan Osman

11

Sftp est très facile à installer. Installez simplement le paquet openssh-serveret vous aurez sftp. Assurez-vous que votre utilisateur dispose d'un bon mot de passe si vous pouvez y accéder via Internet. (8+ caractères, pas un mot du dictionnaire, ont des symboles et des chiffres).

Pour les autorisations, je fais généralement cela.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Vous devriez ensuite être en mesure de publier des pages en vous connectant avec sftp (en utilisant votre nom d'utilisateur et votre mot de passe), puis en allant dans le dossier / var / www et en y plaçant vos fichiers.


1
Une méthode plus sûre est l'authentification par clé (avec la clé privée protégée par mot de passe bien sûr)
Lekensteyn

@Lekensteyn J'ai envisagé de suggérer cela, mais j'essayais de rester simple. Craig T pourrait consulter help.ubuntu.com/community/SSH/OpenSSH/Keys et help.ubuntu.com/community/SSH/OpenSSH/… s'il souhaite configurer l'authentification basée sur une clé plus sécurisée.
Azendale

2
Il s'agit de l'approche la plus simple pour placer les fichiers au bon endroit sur un serveur Web à instance unique sans détruire les autorisations de fichiers. :) De plus, rsync pourrait être utilisé à la place de sftp. Les deux utilisent SSH sous le capot (et je recommanderais d'utiliser des clés ssh au lieu de mots de passe, mais quelqu'un l'a déjà mentionné).
Kees Cook

1
+1, d'accord avec Kees, c'est super simple et fonctionne pour la question posée. J'ai utilisé presque exactement la même configuration pour les clusters de production avec plus de 40 nœuds, limitant l'accès aux clés SSH uniquement.
SpamapS

1

J'utilise webdav. Il est très facile à installer sur Ubuntu Server. Si vous avez installé apache, vous avez presque terminé. Justement sudo a2enmod dav; service apache2 restart. Vous devrez faire une petite configuration de votre site virtuel. Voici un exemple que j'utilise en production:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite
    DAVLockDB /var/lock/apache2/DAVLock
    <Directory /srv/mysite>
        Order allow,deny
        Allow from all
    Dav On
    DAVMinTimeout 600
    DAVDepthInfinity On
AuthName "mysite login"
AuthType Basic
AuthUserFile /srv/mysite/.htpassword
Require valid-user

    </Directory>
php_admin_value engine off
</VirtualHost>

<VirtualHost *>

    ServerName mysite.com
    ServerAlias *.mysite.com
    ServerAdmin webmaster@mysite.com

    DocumentRoot /srv/mysite/www
    <Directory /srv/mysite/www>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /srv/mysite/cgi-bin/
</VirtualHost>

Vous pouvez le mettre dans / srv / etc / apache2 / sites-available / mysite et ensuite le faire sudo a2ensite mysite; sudo service apache2 reload.

Ce qui se passe ici, c'est que vous avez créé deux sites virtuels. L'un est www.mysite.com et l'autre est webdav.mysite.com. PHP a été désactivé sur webdav.mysite.com, ce qui est important.

Vous pouvez désormais accéder à votre site via http sur Ubuntu, Windows et MacOS. Tous les trois ont un support webdav intégré. Voici des instructions sur l' ajout d'un emplacement réseau webdav dans Ubuntu .


Pourquoi est-ce bien? Parce que vous pouvez accéder à votre site depuis n'importe quel système d'exploitation sans logiciel supplémentaire (sftp fonctionne dans Ubuntu, a besoin d'un programme distinct dans d'autres systèmes d'exploitation). De plus, avec un site comme wordpress, les autorisations sont déjà correctes pour gérer les téléchargements de fichiers, car apache traite des deux aspects. Et si vous voulez de la sécurité, le https standard est également disponible. (vous pouvez utiliser différents ports si vous avez plusieurs sites sur la même IP)
newz2000

Soit dit en passant, les instructions ci - dessus supposent que vous avez créé un endroit pour votre site: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000

1
DAV n'est pas certain d'être chiffré (à moins que votre serveur Web exécute également SSL), donc je recommanderais SFTP ou rsync sur DAV en général.
Kees Cook

0

Je donnerais des autorisations d'écriture à / var / www pour les données www et ajouterais votre utilisateur à ce groupe. De cette façon, il serait facile de contrôler quels utilisateurs peuvent écrire dans ce répertoire.

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user

-1

Utilisez-vous un cadre pour votre site? Drupal, Wordpress, etc.? Drupal, par exemple, dispose d'outils pour télécharger via l'interaction du navigateur.

Avez-vous regardé Samba? Vous pouvez configurer un partage Samba (et il y a des tonnes de ressources sur le Web pour eux) et simplement utiliser l'Explorateur Windows pour ouvrir / modifier / enregistrer / supprimer. Configurez / var / www à partager, puis mappez le «lecteur réseau» à Windows.

S'agit-il d'un travail ou d'un environnement familial? Cela ressemble à la maison, mais si vous êtes dans un environnement de travail ... vous pouvez coupler Samba avec Active Directory avec des outils comme Likewise-Open. J'ai une configuration de serveur / site Web telle que ceux de la boutique informatique peuvent se connecter de chaque côté du serveur (Linux ou site Web) via leurs informations d'identification AD.

Je suggère également d'examiner quelque chose comme Mercurial. Créez un référentiel sur le serveur et synchronisez-le avec Windows via quelque chose comme TortiseHG. Je suppose que c'est comme rsync, mais vous auriez des versions, des sauvegardes, la possibilité de distribuer, etc. (SVN, Mercurial, Git, etc. toutes les options)



-2

Êtes-vous après quelque chose comme ça

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www

1
La connexion en tant que root semble être une exagération sérieuse.
Kees Cook
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.