tag - ¿Cuánto de Linux debería aprender para implementar sitios web usando LAMP?
mp3tag (12)
Siendo un desarrollador de Windows, actualmente estoy trabajando en mi propio proyecto usando LAMP. Entiendo lo que necesito saber sobre PHP y MySQL, pero Linux parece enorme y no está claro por dónde empezar y lo que es suficiente dado mis objetivos.
Y mis objetivos son captar conceptos generales, poder implementar el proyecto en un proveedor de alojamiento y poder supervisar el rendimiento del sitio para detectar problemas, problemas de carga, etc.
Lo sé, la mejor solución es conseguir que un administrador de Linux lo haga, pero antes de poder hacerlo necesito hacerlo yo mismo.
¡Dime cómo!
Sería genial si las personas expanden sus respuestas sobre qué aprender y cómo aprenderlo (¿debería comprar un libro en particular, o hay un buen tutorial en línea o ...?).Aprendería vi y bash. vi es liviano y tiende a instalarse en todas partes. Puede ser un gran problema hasta que te acostumbres, pero si quieres saber linux, tiende a estar siempre disponible, y necesitarás mucho un editor de texto. También aprendería bash, porque tiende a ser el shell predeterminado.
Las sugerencias de vfilby son buenas.
Definitivamente aprende el administrador de paquetes para cualquier linux que elijas. Pasaría un tiempo con Apache, porque es un poco monstruo solo porque tiene MUCHAS opciones de configuración.
Intento mantener mi Linux Testbed fuera de internet porque sé que no soy un administrador de sistemas lo suficientemente bueno como para mantenerlo seguro. Al menos ponlo detrás de un firewall. Es bastante fácil encontrar secuencias de comandos de iptables para bloquear todo lo que entra, por lo que es posible que desee comprobar iptables para una buena manipulación de firewall / dirección / puerto.
¡Buena suerte!
Arrastra una vieja caja en Craigslist e instala Gentoo Linux en ella. Esa ... experiencia ... debería darte mucha sensación para Linux y cómo piensa.
Además, en el caso vi vs. emacs , rijo emacs . (Aunque querrás comenzar con pico / nano, porque no tiene sentido aprender un editor con todas las funciones mientras aprendes un nuevo sistema operativo).
De la parte superior de mi cabeza necesitarás:
- Aprenda a leer páginas de manual / use el sistema de ayuda.
- Aprenda a navegar por el sistema de archivos.
- Aprenda cómo iniciar / detener los procesos (servicios) que está utilizando.
- Aprenda dónde se conecta su servidor y cómo alinear los archivos de registro.
- Aprenda a verificar los procesos para ver si las cosas se están ejecutando (ps, arriba).
- Encuentre o aprenda un editor de texto básico (vim, joe, pico)
- Si mantiene el servidor, deberá aprender a instalar paquetes.
Estos son solo los conceptos básicos, el siguiente paso es darse cuenta cuando tenga un problema y saber a dónde puede ir para obtener más información al respecto. Incluso con todo esto, solo está rascando la superficie y muchas cosas pueden no tener sentido, sin embargo, es un buen comienzo.
De la parte superior de mi cabeza necesitarás:
- Aprenda a manejar el sistema de archivos.
- Aprenda cómo iniciar / detener los procesos (servicios) que está utilizando.
- Encuentre o aprenda un editor de texto básico (vim, joe, pico)
- Aprende a verificar los procesos para ver si las cosas se están ejecutando (ps, arriba)
- Si mantiene el servidor, deberá aprender a instalar paquetes.
Estos son solo los conceptos básicos, el siguiente paso es darse cuenta cuando tenga un problema y saber a dónde puede ir para obtener más información al respecto. Incluso con todo esto, solo está rascando la superficie y muchas cosas pueden no tener sentido, sin embargo, es un buen comienzo.
Debieras
- Aprenda el shell bash (especialmente
$PATH
,history
) - Comandos básicos (
cd
,ls
,rm
,tail
,kill
,ps
,top
) - Conocer
/proc
y sus principales usos - Aprenda un editor (
vi
siempre está instalado. Si lo desea, también puede aprenderemacs
) - Reemplazo de sed básico (
sed s,orig,repl,g
), un poco de awk - Cómo trabajar con
iptables
,netstat
ytraceroute
- Cómo obtener información (
man
,info
y--help
) - Cómo instalar un paquete (
pacman -S <name>
para archlinux,apt-get install <name>
para debian), elimine y actualice su sistema. - Saber cómo iniciar / detener servicios en su distribución (
/etc/init.d
,/etc/rc.d
) - ¿Cómo funciona en general un sistema de archivos Unix (
inodes
, qué es laquota
?). Comprender, por ejemplo,/etc/fstab
. Sabiendo sobredf
. - Comprender cómo administrar usuarios y grupos (
useradd
,groupadd
). Conocer el formato de/etc/passwd
y/etc/group
- Donde busca archivos de registro para
apache
y el daemonsyslog
. - Conocer algunas cosas de bajo nivel como
dmesg
yhdparm
Estuve haciendo PHP / MySQL en Windows y Mac durante unos años cuando me pidieron que transfiriera un sitio intranet bastante complejo de IIS / Windows a Apache / Linux. No tenía ninguna experiencia con Linux y servidor en blanco sin SO en absoluto. En aproximadamente dos días, yo y otro administrador de Windows casi sin experiencia en Linux teníamos una copia de CentOS en ejecución de PHP / MySQL / Apache, así como de la intranet.
Las lecciones que aprendí: "yum" es tu mejor amigo al instalar tus servicios, "sudo" es tu mejor amigo al configurar tus servicios (los permisos pueden ser una molestia), y casi todos los demás problemas se debieron a mayúsculas y minúsculas - problemas de retroceso Resultó que fallamos un poco en la seguridad del acceso a FTP, pero esto estaba detrás de un firewall (dmz) por lo que no hubo daños antes de que tuvieran una auditoría de seguridad real y la reforzó.
Respuesta final: si estás dispuesto a arremangarte y ensuciar tu línea de comandos, tener un sitio web básico funcionando en una caja Linux no es una tarea enorme hasta que llegues a la seguridad que (IMO) es mejor dejarle a alguien que está un experto en esa área.
Francamente, muy poco si los sitios web en los que va a trabajar son muy pequeños o muy grandes. Muy pequeño significa alojamiento compartido y no es necesario que te preocupes, muy grande significa que probablemente tendrás un administrador del sistema a bordo para manejarlo.
Primero debe decidir si va a administrar el sistema usando herramientas GUI (gnome o KDE) o si va a acceder principalmente desde SSH usando una línea de comando. (Por lo general, esta es una decisión basada en dónde se encuentra el servidor). Aprender un poco de GUI y CLI es muy útil. CLI es súper potente, mucho más que el Símbolo del sistema en Windows (sé de PowerShell ...)
Desde la perspectiva de la GUI, generalmente tengo la terminal (CLI) funcionando de todos modos, desde una perspectiva Debian / Ubuntu:
- Procesos de inicio / detención:
sudo /etc/init.d/apache stop
osudo /etc/init.d/apache start
- Editores de texto:
gedit
(GUI - gnome),kate
(GUI - KDE),vim
(CLI) onano
(CLI) - Procesos en ejecución:
ps -aux
- Terminar el proceso
sudo kill -s TERM <process_id>
- Agregue un paquete:
sudo apt-get install php5-cli
- Actualizar / Parchear un sistema:
sudo apt-get update && sudo apt-get upgrade
Aquí hay mucha información y una gran variedad de opciones para elegir. Yo recomendaría ir con una distribución de Linux que tenga una comunidad amigable (es decir, Ubuntu, CentOS (RHEL debranded / free), o RHEL (les pague para ayudarlo).
Definitivamente va a haber mucho valor para usted para jugar con una distribución durante un fin de semana en una máquina virtual o máquina de repuesto en casa / trabajo. La comunidad Linux es ENORME y encontrará soporte excelente si lo busca.
Puede considerar, en función de su presentación, una opción WAMP (Windows Apache MySQL Python / Perl / PHP).
Aprender Linux no es difícil , pero ciertamente tampoco es una tarea corta. Hay muchas tareas de administrador de sistemas que se transfieren de una plataforma a otra, pero la verdadera respuesta a su pregunta es ser al menos un administrador de Linux aficionado, y luego ir desde allí.
Sobre todo, debe saber cómo usar Linux (como en el uso diario). Entonces, también debes saber cómo manejar las líneas de comando.
Finalmente, debes aprender cosas específicas de LAMP. Debe conocer y aplicar algunas pautas de seguridad básicas (o no tan básicas).
Marque o descargue el manual GNU coreutils y léalo regularmente
Aprende
vim
. Un buen comienzo esvimtutor
en el caparazón.Aprenda a usar los mecanismos de seguridad, no solo deshabilítelos. Windows tiene seguridad laxa porque las aplicaciones disponibles para ella lo esperan de esta manera (y de lo contrario lo romperían). En un entorno tipo Unix, las aplicaciones siempre se han visto forzadas a comportarse, y la seguridad puede ser estricta por defecto.
El 80% de tus problemas serán permisos. Windows los hace de manera diferente; si inicia sesión como root (o con privilegios similares a la raíz) puede omitir los permisos. Apache no puede y no quiere.
- Aprenda a establecer apropiadamente la propiedad de los archivos y directorios. Cualquier libro de Unix lo cubrirá: asegúrese de entenderlo en realidad; no se trata de una seguridad de Windows diferente, es un modelo diferente de seguridad.
De los problemas restantes, el 80% serán problemas de PATH. PHP no tiene un problema de PATH tan grande como Java y Python, pero todos usan una configuración PATH para buscar componentes y bibliotecas. Conseguirás esos mal regularmente. Windows tiene una RUTA, pero también tiene un registro, lo que hace que las cosas sean súper fáciles o súper secretas. Unix no guarda secretos.
- Aprenda qué variables de entorno usan PHP y MySQL. Asegúrese de saber dónde y cómo se establecen. Apache se ejecuta en su propio entorno peculiar, y tiene comandos para proporcionar la configuración del entorno de ejecución a través de
mod_php
. Escriba secuencias cortas de shellecho $PATH
para revelar lo que está sucediendo.
De los problemas restantes, el 80% estará relacionado con la base de datos. Después de clasificar los permisos de la base de datos, igual tendrá que conectarse, y las cosas "named pipe" vs. "localhost" estarán equivocadas de maneras confusas y confusas. MySQL es muy indulgente, pero cometerá algunos errores aquí.
- Pruebe cada conexión alternativa, sepa cómo funcionan. No elija uno porque es similar a Windows, o "más simple". En realidad ejercita cada uno. También es importante cómo pasa los nombres de usuario y las contraseñas de la aplicación web al servidor de la base de datos. Apache se ejecuta como "nadie" y no desea darles acceso predeterminado a nada. Su aplicación debe establecer una conexión intencional con la base de datos sin usar los valores predeterminados.
De los problemas restantes, el 80% serán configuraciones de Apache. Apache es realmente simple, pero tiene un millón de opciones. Hay cuatro formas de hacer todo, y siempre probarás dos que no funcionan para nada y te conformarás con el tercero, que será asqueroso. El cuarto, que es mucho más simple, nunca se te ocurrirá.
- Lea MUCHO sobre la configuración de Apache. El sitio httpd.apache.org tiene mucha información. Esfuérzate por la simplicidad. Copie ejemplos existentes y úselos. No realice los requisitos o las implementaciones deseadas según la experiencia de IIS o la experiencia de escritorio de Windows. Copie algo que funcione
De los problemas restantes, el 80% será el uso de la aplicación del sistema de archivos. Si intenta abrir, leer o escribir archivos locales, encontrará que (a) los permisos no son correctos en el directorio que está tratando de usar [ver más arriba] y (b) las rutas de archivos de Unix son diferentes. No es muy diferente, pero es lo suficientemente diferente como para que algo se rompa de una manera oscura.
- Todos los libros de programación en el libro de Unix / Linux cubren esto. No es muy diferente de Windows, solo lo suficiente como para hacerte tropezar la primera vez. Escriba páginas PHP de tipo "hola mundo" para disparar la versión más simple posible de cargas o descargas solo para asegurarse de tener todas las piezas y piezas en su lugar. Luego, arregle su aplicación completa para hacerlo correctamente.
De los problemas restantes, el 80% será creación de subprocesos. Windows hace esto de manera diferente. Una de las cosas más importantes en Unix es recordar que su subproceso es su hijo y debe esperar que termine para que el sistema operativo pueda realizar la limpieza. Si piensas en un subproceso como algo paralelo de "dispara y olvida", tendrás procesos zombies y te obligarán a reiniciar periódicamente.
- Escribe páginas PHP muy simples para aumentar la gestión del subproceso. La regla de oro es administrar a sus hijos y limpiarlos después de ellos. Luego, arregle su aplicación completa para hacerlo correctamente.
Los problemas restantes serán una lógica de aplicación trivial, pero debido a las diferencias de plataforma, culparás a Unix antes de rastrear el error en la aplicación PHP.
- Obtenga sus pruebas de unidad y su registro al cuadrado para que pueda depurar con eficacia.