¿Dónde está mi ñ?
Aquí está el vídeo de mi charla en la PyConES 2017 de Cáceres.
Desgraciadamente, el audio no empieza hasta el 1:34.
Aquí está el vídeo de mi charla en la PyConES 2017 de Cáceres.
Desgraciadamente, el audio no empieza hasta el 1:34.
Este artículo es una continuación del anterior sobre configurar un servidor web estático.
Como ya está instalado el repositorio EPEL, sólo hay que instalar la utilidad certbot.
$ sudo yum install certbot
Para crear los certificados:
$ sudo certbot certonly --webroot -w /srv/www.migonzalvar.eu/ -d migonzalvar.eu -d www.migonzalvar.eu
Esto funciona porque el servidor está ejecutándose y es accesible. certbot
crea unos archivos en el raíz del sitio y Let's Encrypt los comprueba.
Podemos ahora confirmar que está todo bien simulando una actualización:
$ sudo certbot renew --dry-run
Un paso más, para incrementar la seguridad y evitar el ataque Logjam cramos una clave fuerte Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
server {
listen 80;
server_name migonzalvar.eu www.migonzalvar.eu;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name migonzalvar.eu www.migonzalvar.eu;
ssl_certificate /etc/letsencrypt/live/migonzalvar.eu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/migonzalvar.eu/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
root /srv/www.migonzalvar.eu/;
}
}
Testamos la configuración recién creada:
$ sudo nginx -t
Y añádimos regla al firewall:
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload
Crear /etc/systemd/system/certbot-renew.service
:
[Unit]
Description=Let's Encrypt renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
ExecStartPost=/bin/systemctl reload nginx.service
Y el mismo archivo pero acabado en .timer
, es decir /etc/systemd/system/certbot-renew.timer
:
[Unit]
Description=Daily renewal of Let's Encrypt's certificates
[Timer]
OnCalendar=daily
RandomizedDelaySec=1day
Persistent=true
[Install]
WantedBy=timers.target
POr último lo iniciamos y lo dejamos activo.
$ sudo systemctl start certbot-renew.timer
$ sudo systemctl enable certbot-renew.timer
$ systemctl list-timers
Referencias:
En la parte 1 traté de como configurar el servidor. Ahora voy a describir como instalar un servidor web y mi primer sitio estático.
$ sudo vi /etc/yum.repos.d/nginx.repo
…
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
…
$ sudo yum update
$ sudo yum install nginx
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --reload
Configurar el directorio donde estarán los archivos estáticos.
$ sudo mkdir /srv/www.migonzalvar.eu
$ sudo chown root.wheel -R /srv/www.migonzalvar.eu
$ sudo chmod 2775 /srv/www.migonzalvar.eu
$ sudo chcon -Rv --type=httpd_sys_content_t /srv/www.migonzalvar.eu
la configuración de nginx en /etc/nginx/conf.d/www.migonzalvar.eu.conf
:
server {
listen 80;
server_name migonzalvar.eu www.migonzalvar.eu;
location / {
root /srv/www.migonzalvar.eu/;
}
}
El último paso es subir los archivos desde mi ordenador, lo que se puede hacer con el comando rsync
:
LOCAL$ rsync web/ root@SERVER_IP_ADDRESS:/srv/www.migonzalvar.eu/
Referencias:
En este artículo describo como he configurado mi propio servidor privado virtual.
Lo uso principalmente para alojar páginas estáticas y algún que otro experimento. Ni la configuración ni el procedimiento es especialmente novedoso pero sí que hay algunos pasos que me parece interesante compartir.
Espero que le sirve a alguien, puede que incluso a mi yo del futuro.
En mi caso he contratado un VPS en DigitalOcean pero este procedimiento sirve para cualquier servidor CentOS.
Vamos allá.
Accedo a través de ssh tecleando en mi ordenador ssh root@SERVER_IP_ADDRESS
.
Lo primero es configurar un usuario con el que administraré el sistema. No es una buena práctica usar root
para el día a día. Es más recomendable tener un usuario con menos privilegios y recurrir al comando sudo
cuando es necesario.
En el SERVIDOR como root ejecuto los siguientes pasos para crear el usuario demo
, asignarle una contraseña muy segura y enrolarlo en el grupo de administradores wheel
.
# adduser demo
# passwd demo
# gpasswd -a demo wheel
Opcionalmente, para evitar teclear la contraseña cada vez que invoco sudo
, voy a retocar el archivo /etc/sudoers
# visudo
Y configuro esta línea:
%wheel ALL=(ALL) NOPASSWD: ALL
A partir de ahora usaré el usario demo siempre, incluso para acceder al servidor.
Vuelvo a acceder al SERVIDOR pero esta vez como usuario demo:
$ sudo vi /etc/ssh/sshd_config
…
PermitRootLogin no
…
Reinicio el servicio ssh y compruebo que esta levantado.
$ sudo systemctl reload sshd
$ ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is a1:b2:c3:d4:e5:f6:10:20:30:40:50.
Are you sure you want to continue connecting (yes/no)? ^C
$ sudo systemctl start firewalld
$ sudo firewall-cmd --permanent --add-service=ssh
$ sudo firewall-cmd --reload
$ sudo systemctl enable firewalld
$ sudo timedatectl set-local-rtc 0
$ sudo yum install chrony
$ sudo systemctl start chronyd
$ sudo systemctl enable chronyd
$ sudo vi /etc/selinux/config
...
SELINUX=enforcing
...
sudo yum install epel-release
sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
Espero poder documentar próximamente como instalar nginx y configurar un sitio web estático.
Referencias:
First, assure virtualenv and pip Python tools are installed.
# yum install -y python-virtualenv python-pip
Loaded plugins: etckeeper
xs-extra | 2.9 kB 00:00
Package python-virtualenv-1.10.1-1.fc18.noarch already installed and latest version
Package python-pip-1.3.1-4.fc18.noarch already installed and latest version
Nothing to do
The pathagar web application and all its dependencies will reside in its own directory.
# mkdir /usr/local/pathagar-v2
# cd /usr/local/pathagar-v2
Then, create the virtual environment inside that directory and activate it.
# virtualenv venv
New python executable in venv/bin/python
Installing Setuptools......................done.
Installing Pip.............................done.
# source venv/bin/activate
This is the different method, install psycopg2 from a wheel package from a custom repository. This is a very fast procedure and avoids the need to compile and to have development packages.
(venv)# pip install --use-wheel --no-index --find-links=http://xsce.activitycentral.com/wheelhouse/ psycopg2==2.5.1
Ignoring indexes: https://pypi.python.org/simple/
Downloading/unpacking psycopg2==2.5.1
Downloading psycopg2-2.5.1-cp27-none-linux_armv7l.whl (321kB): 321kB downloaded
Installing collected packages: psycopg2
Successfully installed psycopg2
Cleaning up...
The rest of requirements can be installed from PyPI in the standard way.
(venv)# pip install Django==1.4.5 django-tagging==0.3.1 django-sendfile==0.3.0 django-taggit==0.10
Downloading/unpacking Django==1.4.5
Downloading Django-1.4.5.tar.gz (7.7MB): 7.7MB downloaded
Running setup.py egg_info for package Django
Downloading/unpacking django-tagging==0.3.1
Downloading django-tagging-0.3.1.tar.gz
Running setup.py egg_info for package django-tagging
Downloading/unpacking django-sendfile==0.3.0
You are installing a potentially insecure and unverifiable file. Future versions of pip will default to disallowing insecure files.
Downloading django-sendfile-0.3.0.tar.gz
Running setup.py egg_info for package django-sendfile
Downloading/unpacking django-taggit==0.10
Downloading django-taggit-0.10.tar.gz
Running setup.py egg_info for package django-taggit
Installing collected packages: Django, django-tagging, django-sendfile, django-taggit
Running setup.py install for Django
changing mode of build/scripts-2.7/django-admin.py from 644 to 755
changing mode of /usr/local/pathagar-v2/venv/bin/django-admin.py to 755
Running setup.py install for django-tagging
Running setup.py install for django-sendfile
Running setup.py install for django-taggit
Successfully installed Django django-tagging django-sendfile django-taggit
Cleaning up...
Now, we only have to install and deploy pathagar: all its dependencies are installed into the virtual environment totally isolated from site wide Python packages.